src/HOLCF/IOA/meta_theory/ShortExecutions.ML
author wenzelm
Thu, 15 Nov 2001 23:25:46 +0100
changeset 12218 6597093b77e7
parent 12028 52aa183c15bb
child 14981 e73f8140af78
permissions -rw-r--r--
GPLed;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     1
(*  Title:      HOLCF/IOA/meta_theory/ShortExecutions.thy
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
     2
    ID:         $Id$
12218
wenzelm
parents: 12028
diff changeset
     3
    Author:     Olaf Müller
wenzelm
parents: 12028
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     5
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
     6
Some properties about (Cut ex), defined as follows:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     7
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
     8
For every execution ex there is another shorter execution (Cut ex) 
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     9
that has the same trace as ex, but its schedule ends with an external action.
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    10
*) 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    11
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    12
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    13
fun thin_tac' j =
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    14
  rotate_tac (j - 1) THEN'
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    15
  etac thin_rl THEN' 
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    16
  rotate_tac (~ (j - 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    17
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    18
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    19
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    20
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    21
                   section "oraclebuild rewrite rules";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    22
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    23
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    24
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    25
bind_thm ("oraclebuild_unfold", fix_prover2 thy oraclebuild_def 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    26
"oraclebuild P = (LAM s t. case t of \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    27
\       nil => nil\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    28
\    | x##xs => \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    29
\      (case x of\ 
12028
52aa183c15bb replaced Undef by UU;
wenzelm
parents: 10835
diff changeset
    30
\        UU => UU\
10835
nipkow
parents: 9877
diff changeset
    31
\      | Def y => (Takewhile (%a.~ P a)$s)\
nipkow
parents: 9877
diff changeset
    32
\                  @@ (y>>(oraclebuild P$(TL$(Dropwhile (%a.~ P a)$s))$xs))\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    33
\      )\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    34
\    )");
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    35
10835
nipkow
parents: 9877
diff changeset
    36
Goal "oraclebuild P$sch$UU = UU";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    37
by (stac oraclebuild_unfold 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    38
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    39
qed"oraclebuild_UU";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    40
10835
nipkow
parents: 9877
diff changeset
    41
Goal "oraclebuild P$sch$nil = nil";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    42
by (stac oraclebuild_unfold 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    43
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    44
qed"oraclebuild_nil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    45
10835
nipkow
parents: 9877
diff changeset
    46
Goal "oraclebuild P$s$(x>>t) = \
nipkow
parents: 9877
diff changeset
    47
\         (Takewhile (%a.~ P a)$s)   \
nipkow
parents: 9877
diff changeset
    48
\          @@ (x>>(oraclebuild P$(TL$(Dropwhile (%a.~ P a)$s))$t))";     
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    49
by (rtac trans 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    50
by (stac oraclebuild_unfold 1);
7229
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    51
by (asm_full_simp_tac (simpset() addsimps [Consq_def]) 1);
6773ba0c36d5 renamed Cons to Consq in order to avoid clash with List.Cons;
wenzelm
parents: 6161
diff changeset
    52
by (simp_tac (simpset() addsimps [Consq_def]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    53
qed"oraclebuild_cons";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    54
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    55
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    56
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    57
 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    58
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    59
                   section "Cut rewrite rules";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    60
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    61
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    62
Goalw [Cut_def]
6161
paulson
parents: 5976
diff changeset
    63
"[| Forall (%a.~ P a) s; Finite s|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    64
\           ==> Cut P s =nil";
10835
nipkow
parents: 9877
diff changeset
    65
by (subgoal_tac "Filter P$s = nil" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    66
by (asm_simp_tac (simpset() addsimps [oraclebuild_nil]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    67
by (rtac ForallQFilterPnil 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    68
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    69
qed"Cut_nil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    70
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    71
Goalw [Cut_def]
6161
paulson
parents: 5976
diff changeset
    72
"[| Forall (%a.~ P a) s; ~Finite s|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    73
\           ==> Cut P s =UU";
10835
nipkow
parents: 9877
diff changeset
    74
by (subgoal_tac "Filter P$s= UU" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    75
by (asm_simp_tac (simpset() addsimps [oraclebuild_UU]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    76
by (rtac ForallQFilterPUU 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    77
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    78
qed"Cut_UU";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    79
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    80
Goalw [Cut_def]
6161
paulson
parents: 5976
diff changeset
    81
"[| P t;  Forall (%x.~ P x) ss; Finite ss|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    82
\           ==> Cut P (ss @@ (t>> rs)) \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    83
\                = ss @@ (t >> Cut P rs)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    84
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    85
by (asm_full_simp_tac (simpset() addsimps [ForallQFilterPnil,oraclebuild_cons,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    86
          TakewhileConc,DropwhileConc]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    87
qed"Cut_Cons";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    88
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    89
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    90
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    91
                   section "Cut lemmas for main theorem";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    92
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    93
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    94
10835
nipkow
parents: 9877
diff changeset
    95
Goal "Filter P$s = Filter P$(Cut P s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    96
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
    97
by (res_inst_tac [("A1","%x. True")
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    98
                 ,("Q1","%x.~ P x"), ("x1","s")]
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    99
                 (take_lemma_induct RS mp) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   100
by (Fast_tac 3);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   101
by (case_tac "Finite s" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   102
by (asm_full_simp_tac (simpset() addsimps [Cut_nil,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   103
             ForallQFilterPnil]) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   104
by (asm_full_simp_tac (simpset() addsimps [Cut_UU,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   105
             ForallQFilterPUU]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   106
(* main case *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   107
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons,ForallQFilterPnil]) 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4283
diff changeset
   108
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   109
qed"FilterCut";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   110
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   111
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   112
Goal "Cut P (Cut P s) = (Cut P s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   113
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   114
by (res_inst_tac [("A1","%x. True")
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   115
                 ,("Q1","%x.~ P x"), ("x1","s")]
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   116
                 (take_lemma_less_induct RS mp) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   117
by (Fast_tac 3);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   118
by (case_tac "Finite s" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   119
by (asm_full_simp_tac (simpset() addsimps [Cut_nil,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   120
             ForallQFilterPnil]) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   121
by (asm_full_simp_tac (simpset() addsimps [Cut_UU,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   122
             ForallQFilterPUU]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   123
(* main case *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   124
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons,ForallQFilterPnil]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   125
by (rtac take_reduction 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4283
diff changeset
   126
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   127
qed"Cut_idemp";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   128
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   129
10835
nipkow
parents: 9877
diff changeset
   130
Goal "Map f$(Cut (P o f) s) = Cut P (Map f$s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   131
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   132
by (res_inst_tac [("A1","%x. True")
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   133
                 ,("Q1","%x.~ P (f x)"), ("x1","s")]
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   134
                 (take_lemma_less_induct RS mp) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   135
by (Fast_tac 3);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   136
by (case_tac "Finite s" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   137
by (asm_full_simp_tac (simpset() addsimps [Cut_nil]) 1); 
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   138
by (rtac (Cut_nil RS sym) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   139
by (asm_full_simp_tac (simpset() addsimps [ForallMap,o_def]) 1); 
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   140
by (asm_full_simp_tac (simpset() addsimps [Map2Finite]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   141
(* csae ~ Finite s *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   142
by (asm_full_simp_tac (simpset() addsimps [Cut_UU]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   143
by (rtac (Cut_UU RS sym) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   144
by (asm_full_simp_tac (simpset() addsimps [ForallMap,o_def]) 1); 
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   145
by (asm_full_simp_tac (simpset() addsimps [Map2Finite]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   146
(* main case *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   147
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons,MapConc,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   148
          ForallMap,FiniteMap1,o_def]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   149
by (rtac take_reduction 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4283
diff changeset
   150
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   151
qed"MapCut";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   152
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   153
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   154
Goal "~Finite s --> Cut P s << s";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   155
by (strip_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   156
by (rtac (take_lemma_less RS iffD1) 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   157
by (strip_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   158
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   159
by (assume_tac 2);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   160
by (thin_tac' 1 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   161
by (res_inst_tac [("x","s")] spec 1);
9877
b2a62260f8ac less_induct -> nat_less_induct
nipkow
parents: 7229
diff changeset
   162
by (rtac nat_less_induct 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   163
by (strip_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   164
ren "na n s" 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   165
by (case_tac "Forall (%x. ~ P x) s" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   166
by (rtac (take_lemma_less RS iffD2 RS spec) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   167
by (asm_full_simp_tac (simpset() addsimps [Cut_UU]) 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   168
(* main case *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   169
by (dtac divide_Seq3 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   170
by (REPEAT (etac exE 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   171
by (REPEAT (etac conjE 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   172
by (hyp_subst_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   173
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   174
by (rtac take_reduction_less 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   175
(* auto makes also reasoning about Finiteness of parts of s ! *)
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4283
diff changeset
   176
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   177
qed_spec_mp"Cut_prefixcl_nFinite";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   178
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   179
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   180
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   181
Goal "!!ex .is_exec_frag A (s,ex) ==> is_exec_frag A (s,Cut P ex)";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   182
by (case_tac "Finite ex" 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   183
by (cut_inst_tac [("s","ex"),("P","P")] Cut_prefixcl_Finite 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   184
by (assume_tac 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   185
by (etac exE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   186
by (rtac exec_prefix2closed 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   187
by (eres_inst_tac [("s","ex"),("t","Cut P ex @@ y")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   188
by (assume_tac 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   189
by (etac exec_prefixclosed 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   190
by (etac Cut_prefixcl_nFinite 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   191
qed"execThruCut";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   192
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   193
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   194
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   195
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   196
                   section "Main Cut Theorem";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   197
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   198
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   199
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   200
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   201
Goalw [schedules_def,has_schedule_def]
10835
nipkow
parents: 9877
diff changeset
   202
 "[|sch : schedules A ; tr = Filter (%a. a:ext A)$sch|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   203
\   ==> ? sch. sch : schedules A & \
10835
nipkow
parents: 9877
diff changeset
   204
\              tr = Filter (%a. a:ext A)$sch &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   205
\              LastActExtsch A sch";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   206
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   207
by (safe_tac set_cs);
10835
nipkow
parents: 9877
diff changeset
   208
by (res_inst_tac [("x","filter_act$(Cut (%a. fst a:ext A) (snd ex))")] exI 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   209
by (asm_full_simp_tac (simpset() addsimps [executions_def]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   210
by (pair_tac "ex" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   211
by (safe_tac set_cs);
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   212
by (res_inst_tac [("x","(x,Cut (%a. fst a:ext A) y)")] exI 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   213
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   214
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   215
(* Subgoal 1: Lemma:  propagation of execution through Cut *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   216
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   217
by (asm_full_simp_tac (simpset() addsimps [execThruCut]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   218
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   219
(* Subgoal 2:  Lemma:  Filter P s = Filter P (Cut P s) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   220
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   221
by (simp_tac (simpset() addsimps [filter_act_def]) 1);
10835
nipkow
parents: 9877
diff changeset
   222
by (subgoal_tac "Map fst$(Cut (%a. fst a: ext A) y)= Cut (%a. a:ext A) (Map fst$y)" 1);
4283
92707e24b62b managed merge details;
mueller
parents: 4098
diff changeset
   223
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   224
by (rtac (rewrite_rule [o_def] MapCut) 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   225
by (asm_full_simp_tac (simpset() addsimps [FilterCut RS sym]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   226
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   227
(* Subgoal 3: Lemma: Cut idempotent  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   228
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   229
by (simp_tac (simpset() addsimps [LastActExtsch_def,filter_act_def]) 1);
10835
nipkow
parents: 9877
diff changeset
   230
by (subgoal_tac "Map fst$(Cut (%a. fst a: ext A) y)= Cut (%a. a:ext A) (Map fst$y)" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   231
by (rtac (rewrite_rule [o_def] MapCut) 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   232
by (asm_full_simp_tac (simpset() addsimps [Cut_idemp]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   233
qed"exists_LastActExtsch";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   234
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   235
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   236
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   237
                   section "Further Cut lemmas";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   238
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   239
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   240
Goalw [LastActExtsch_def]
10835
nipkow
parents: 9877
diff changeset
   241
  "[| LastActExtsch A sch; Filter (%x. x:ext A)$sch = nil |] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   242
\   ==> sch=nil";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   243
by (dtac FilternPnilForallP 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   244
by (etac conjE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   245
by (dtac Cut_nil 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   246
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   247
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   248
qed"LastActExtimplnil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   249
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   250
Goalw [LastActExtsch_def]
10835
nipkow
parents: 9877
diff changeset
   251
  "[| LastActExtsch A sch; Filter (%x. x:ext A)$sch = UU |] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   252
\   ==> sch=UU";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   253
by (dtac FilternPUUForallP 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   254
by (etac conjE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   255
by (dtac Cut_UU 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   256
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   257
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   258
qed"LastActExtimplUU";