src/HOLCF/IOA/meta_theory/ShortExecutions.ML
author mueller
Thu, 26 Nov 1998 16:37:56 +0100
changeset 5976 44290b71a85f
parent 5068 fb28eaa07e01
child 6161 bc2a76ce1ea3
permissions -rw-r--r--
tuning to assimiliate it with PhD;
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$
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     3
    Author:     Olaf M"uller
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
    Copyright   1997  TU Muenchen
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.
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    10
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    11
*) 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    12
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    13
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    14
fun thin_tac' j =
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    15
  rotate_tac (j - 1) THEN'
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    16
  etac thin_rl THEN' 
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    17
  rotate_tac (~ (j - 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
    18
3275
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
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    22
                   section "oraclebuild rewrite rules";
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
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    26
bind_thm ("oraclebuild_unfold", fix_prover2 thy oraclebuild_def 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    27
"oraclebuild P = (LAM s t. case t of \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    28
\       nil => nil\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    29
\    | x##xs => \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    30
\      (case x of\ 
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    31
\        Undef => UU\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    32
\      | Def y => (Takewhile (%a.~ P a)`s)\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    33
\                  @@ (y>>(oraclebuild P`(TL`(Dropwhile (%a.~ P a)`s))`xs))\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    34
\      )\
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    35
\    )");
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    36
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    37
Goal "oraclebuild P`sch`UU = UU";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    38
by (stac oraclebuild_unfold 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    39
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    40
qed"oraclebuild_UU";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    41
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    42
Goal "oraclebuild P`sch`nil = nil";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    43
by (stac oraclebuild_unfold 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    44
by (Simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    45
qed"oraclebuild_nil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    46
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    47
Goal "oraclebuild P`s`(x>>t) = \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    48
\         (Takewhile (%a.~ P a)`s)   \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    49
\          @@ (x>>(oraclebuild P`(TL`(Dropwhile (%a.~ P a)`s))`t))";     
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    50
by (rtac trans 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    51
by (stac oraclebuild_unfold 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    52
by (asm_full_simp_tac (simpset() addsimps [Cons_def]) 1);
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    53
by (simp_tac (simpset() addsimps [Cons_def]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    54
qed"oraclebuild_cons";
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
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    60
                   section "Cut rewrite rules";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    61
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    62
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    63
Goalw [Cut_def]
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    64
"!! s. [| Forall (%a.~ P a) s; Finite s|] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    65
\           ==> Cut P s =nil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    66
by (subgoal_tac "Filter P`s = nil" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    67
by (asm_simp_tac (simpset() addsimps [oraclebuild_nil]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    68
by (rtac ForallQFilterPnil 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    69
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    70
qed"Cut_nil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    71
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    72
Goalw [Cut_def]
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    73
"!! s. [| Forall (%a.~ P a) s; ~Finite s|] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    74
\           ==> Cut P s =UU";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    75
by (subgoal_tac "Filter P`s= UU" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    76
by (asm_simp_tac (simpset() addsimps [oraclebuild_UU]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
    77
by (rtac ForallQFilterPUU 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    78
by (REPEAT (atac 1));
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    79
qed"Cut_UU";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    80
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    81
Goalw [Cut_def]
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    82
"!! s. [| P t;  Forall (%x.~ P x) ss; Finite ss|] \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    83
\           ==> Cut P (ss @@ (t>> rs)) \
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    84
\                = ss @@ (t >> Cut P rs)";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    85
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
    86
by (asm_full_simp_tac (simpset() addsimps [ForallQFilterPnil,oraclebuild_cons,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    87
          TakewhileConc,DropwhileConc]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    88
qed"Cut_Cons";
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
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    92
                   section "Cut lemmas for main theorem";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    93
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    94
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    95
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
    96
Goal "Filter P`s = Filter P`(Cut P s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    97
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
    98
by (res_inst_tac [("A1","%x. True")
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    99
                 ,("Q1","%x.~ P x"), ("x1","s")]
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   100
                 (take_lemma_induct RS mp) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   101
by (Fast_tac 3);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   102
by (case_tac "Finite s" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   103
by (asm_full_simp_tac (simpset() addsimps [Cut_nil,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   104
             ForallQFilterPnil]) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   105
by (asm_full_simp_tac (simpset() addsimps [Cut_UU,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   106
             ForallQFilterPUU]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   107
(* main case *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   108
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
   109
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   110
qed"FilterCut";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   111
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   112
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   113
Goal "Cut P (Cut P s) = (Cut P s)";
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   114
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   115
by (res_inst_tac [("A1","%x. True")
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   116
                 ,("Q1","%x.~ P x"), ("x1","s")]
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   117
                 (take_lemma_less_induct RS mp) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   118
by (Fast_tac 3);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   119
by (case_tac "Finite s" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   120
by (asm_full_simp_tac (simpset() addsimps [Cut_nil,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   121
             ForallQFilterPnil]) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   122
by (asm_full_simp_tac (simpset() addsimps [Cut_UU,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   123
             ForallQFilterPUU]) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   124
(* main case *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   125
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons,ForallQFilterPnil]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   126
by (rtac take_reduction 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4283
diff changeset
   127
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   128
qed"Cut_idemp";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   129
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   130
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   131
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
   132
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   133
by (res_inst_tac [("A1","%x. True")
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   134
                 ,("Q1","%x.~ P (f x)"), ("x1","s")]
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   135
                 (take_lemma_less_induct RS mp) 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   136
by (Fast_tac 3);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   137
by (case_tac "Finite s" 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   138
by (asm_full_simp_tac (simpset() addsimps [Cut_nil]) 1); 
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   139
by (rtac (Cut_nil RS sym) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   140
by (asm_full_simp_tac (simpset() addsimps [ForallMap,o_def]) 1); 
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   141
by (asm_full_simp_tac (simpset() addsimps [Map2Finite]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   142
(* csae ~ Finite s *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   143
by (asm_full_simp_tac (simpset() addsimps [Cut_UU]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   144
by (rtac (Cut_UU RS sym) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   145
by (asm_full_simp_tac (simpset() addsimps [ForallMap,o_def]) 1); 
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   146
by (asm_full_simp_tac (simpset() addsimps [Map2Finite]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   147
(* main case *)
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   148
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons,MapConc,
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   149
          ForallMap,FiniteMap1,o_def]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   150
by (rtac take_reduction 1);
4477
b3e5857d8d99 New Auto_tac (by Oheimb), and new syntax (without parens), and expandshort
paulson
parents: 4283
diff changeset
   151
by Auto_tac;
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   152
qed"MapCut";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   153
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   154
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   155
Goal "~Finite s --> Cut P s << s";
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   156
by (strip_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   157
by (rtac (take_lemma_less RS iffD1) 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   158
by (strip_tac 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   159
by (rtac mp 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   160
by (assume_tac 2);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   161
by (thin_tac' 1 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   162
by (res_inst_tac [("x","s")] spec 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   163
by (rtac less_induct 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   164
by (strip_tac 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   165
ren "na n s" 1;
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   166
by (case_tac "Forall (%x. ~ P x) s" 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   167
by (rtac (take_lemma_less RS iffD2 RS spec) 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   168
by (asm_full_simp_tac (simpset() addsimps [Cut_UU]) 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   169
(* main case *)
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   170
by (dtac divide_Seq3 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   171
by (REPEAT (etac exE 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   172
by (REPEAT (etac conjE 1));
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   173
by (hyp_subst_tac 1);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   174
by (asm_full_simp_tac (simpset() addsimps [Cut_Cons]) 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   175
by (rtac take_reduction_less 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   176
(* 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
   177
by Auto_tac;
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   178
qed_spec_mp"Cut_prefixcl_nFinite";
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
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   181
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   182
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
   183
by (case_tac "Finite ex" 1);
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   184
by (cut_inst_tac [("s","ex"),("P","P")] Cut_prefixcl_Finite 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   185
by (assume_tac 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   186
by (etac exE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   187
by (rtac exec_prefix2closed 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   188
by (eres_inst_tac [("s","ex"),("t","Cut P ex @@ y")] subst 1);
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   189
by (assume_tac 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   190
by (etac exec_prefixclosed 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   191
by (etac Cut_prefixcl_nFinite 1);
3361
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   192
qed"execThruCut";
1877e333f66c Last changes for new release 94-8
mueller
parents: 3275
diff changeset
   193
3275
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
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   197
                   section "Main Cut Theorem";
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
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   201
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   202
Goalw [schedules_def,has_schedule_def]
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   203
 "!! sch. [|sch : schedules A ; tr = Filter (%a. a:ext A)`sch|] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   204
\   ==> ? sch. sch : schedules A & \
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   205
\              tr = Filter (%a. a:ext A)`sch &\
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   206
\              LastActExtsch A sch";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   207
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   208
by (safe_tac set_cs);
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   209
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
   210
by (asm_full_simp_tac (simpset() addsimps [executions_def]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   211
by (pair_tac "ex" 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   212
by (safe_tac set_cs);
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   213
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
   214
by (Asm_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   215
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   216
(* Subgoal 1: Lemma:  propagation of execution through Cut *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   217
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   218
by (asm_full_simp_tac (simpset() addsimps [execThruCut]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   219
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   220
(* Subgoal 2:  Lemma:  Filter P s = Filter P (Cut P s) *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   221
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   222
by (simp_tac (simpset() addsimps [filter_act_def]) 1);
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   223
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
   224
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   225
by (rtac (rewrite_rule [o_def] MapCut) 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   226
by (asm_full_simp_tac (simpset() addsimps [FilterCut RS sym]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   227
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   228
(* Subgoal 3: Lemma: Cut idempotent  *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   229
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   230
by (simp_tac (simpset() addsimps [LastActExtsch_def,filter_act_def]) 1);
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   231
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
   232
by (rtac (rewrite_rule [o_def] MapCut) 2);
4098
71e05eb27fb6 isatool fixclasimp;
wenzelm
parents: 4042
diff changeset
   233
by (asm_full_simp_tac (simpset() addsimps [Cut_idemp]) 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   234
qed"exists_LastActExtsch";
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
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   238
                   section "Further Cut lemmas";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   239
(* ---------------------------------------------------------------- *)
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   240
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   241
Goalw [LastActExtsch_def]
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   242
  "!! A. [| LastActExtsch A sch; Filter (%x. x:ext A)`sch = nil |] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   243
\   ==> sch=nil";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   244
by (dtac FilternPnilForallP 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   245
by (etac conjE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   246
by (dtac Cut_nil 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   247
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   248
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   249
qed"LastActExtimplnil";
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   250
5068
fb28eaa07e01 isatool fixgoal;
wenzelm
parents: 4477
diff changeset
   251
Goalw [LastActExtsch_def]
3847
d5905b98291f fixed dots;
wenzelm
parents: 3457
diff changeset
   252
  "!! A. [| LastActExtsch A sch; Filter (%x. x:ext A)`sch = UU |] \
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   253
\   ==> sch=UU";
3457
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   254
by (dtac FilternPUUForallP 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   255
by (etac conjE 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   256
by (dtac Cut_UU 1);
a8ab7c64817c Ran expandshort
paulson
parents: 3433
diff changeset
   257
by (assume_tac 1);
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   258
by (Asm_full_simp_tac 1);
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
   259
qed"LastActExtimplUU";