src/HOL/HOLCF/IOA/ShortExecutions.thy
author wenzelm
Wed, 04 Oct 2017 12:00:53 +0200
changeset 66787 64b47495676d
parent 63549 b0d31c7def86
child 69597 ff784d5a5bfb
permissions -rw-r--r--
obsolete;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62008
cbedaddc9351 clarified directory structure;
wenzelm
parents: 62005
diff changeset
     1
(*  Title:      HOL/HOLCF/IOA/ShortExecutions.thy
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 40774
diff changeset
     2
    Author:     Olaf Müller
17256
526ff7cfd6ea converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     3
*)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
17256
526ff7cfd6ea converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     5
theory ShortExecutions
526ff7cfd6ea converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     6
imports Traces
526ff7cfd6ea converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
     7
begin
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     8
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
     9
text \<open>
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    10
  Some properties about \<open>Cut ex\<close>, defined as follows:
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    11
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    12
  For every execution ex there is another shorter execution \<open>Cut ex\<close>
17256
526ff7cfd6ea converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
    13
  that has the same trace as ex, but its schedule ends with an external action.
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    14
\<close>
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    15
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    16
definition oraclebuild :: "('a \<Rightarrow> bool) \<Rightarrow> 'a Seq \<rightarrow> 'a Seq \<rightarrow> 'a Seq"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    17
  where "oraclebuild P =
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    18
    (fix \<cdot>
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    19
      (LAM h s t.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    20
        case t of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    21
          nil \<Rightarrow> nil
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    22
        | x ## xs \<Rightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    23
            (case x of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    24
              UU \<Rightarrow> UU
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    25
            | Def y \<Rightarrow>
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    26
                (Takewhile (\<lambda>x. \<not> P x) \<cdot> s) @@
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    27
                (y \<leadsto> (h \<cdot> (TL \<cdot> (Dropwhile (\<lambda>x. \<not> P x) \<cdot> s)) \<cdot> xs)))))"
3275
3f53f2c876f4 changes for release 94-8
mueller
parents: 3071
diff changeset
    28
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    29
definition Cut :: "('a \<Rightarrow> bool) \<Rightarrow> 'a Seq \<Rightarrow> 'a Seq"
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    30
  where "Cut P s = oraclebuild P \<cdot> s \<cdot> (Filter P \<cdot> s)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    31
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    32
definition LastActExtsch :: "('a,'s) ioa \<Rightarrow> 'a Seq \<Rightarrow> bool"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    33
  where "LastActExtsch A sch \<longleftrightarrow> Cut (\<lambda>x. x \<in> ext A) sch = sch"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    34
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    35
axiomatization where
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    36
  Cut_prefixcl_Finite: "Finite s \<Longrightarrow> \<exists>y. s = Cut P s @@ y"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    37
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    38
axiomatization where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    39
  LastActExtsmall1: "LastActExtsch A sch \<Longrightarrow> LastActExtsch A (TL \<cdot> (Dropwhile P \<cdot> sch))"
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    40
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    41
axiomatization where
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    42
  LastActExtsmall2: "Finite sch1 \<Longrightarrow> LastActExtsch A (sch1 @@ sch2) \<Longrightarrow> LastActExtsch A sch2"
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    43
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    44
ML \<open>
60754
02924903a6fd prefer tactics with explicit context;
wenzelm
parents: 42151
diff changeset
    45
fun thin_tac' ctxt j =
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    46
  rotate_tac (j - 1) THEN'
60754
02924903a6fd prefer tactics with explicit context;
wenzelm
parents: 42151
diff changeset
    47
  eresolve_tac ctxt [thin_rl] THEN'
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    48
  rotate_tac (~ (j - 1))
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 62001
diff changeset
    49
\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    50
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    51
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    52
subsection \<open>\<open>oraclebuild\<close> rewrite rules\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    53
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    54
lemma oraclebuild_unfold:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    55
  "oraclebuild P =
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    56
    (LAM s t.
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    57
      case t of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    58
        nil \<Rightarrow> nil
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    59
      | x ## xs \<Rightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    60
          (case x of
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    61
            UU \<Rightarrow> UU
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    62
          | Def y \<Rightarrow>
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    63
            (Takewhile (\<lambda>a. \<not> P a) \<cdot> s) @@
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    64
            (y \<leadsto> (oraclebuild P \<cdot> (TL \<cdot> (Dropwhile (\<lambda>a. \<not> P a) \<cdot> s)) \<cdot> xs))))"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    65
  apply (rule trans)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    66
  apply (rule fix_eq2)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    67
  apply (simp only: oraclebuild_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    68
  apply (rule beta_cfun)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    69
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    70
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    71
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    72
lemma oraclebuild_UU: "oraclebuild P \<cdot> sch \<cdot> UU = UU"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    73
  apply (subst oraclebuild_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    74
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    75
  done
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    76
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    77
lemma oraclebuild_nil: "oraclebuild P \<cdot> sch \<cdot> nil = nil"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    78
  apply (subst oraclebuild_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    79
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    80
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    81
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    82
lemma oraclebuild_cons:
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    83
  "oraclebuild P \<cdot> s \<cdot> (x \<leadsto> t) =
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    84
    (Takewhile (\<lambda>a. \<not> P a) \<cdot> s) @@
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    85
    (x \<leadsto> (oraclebuild P \<cdot> (TL \<cdot> (Dropwhile (\<lambda>a. \<not> P a) \<cdot> s)) \<cdot> t))"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    86
  apply (rule trans)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    87
  apply (subst oraclebuild_unfold)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    88
  apply (simp add: Consq_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    89
  apply (simp add: Consq_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    90
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    91
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    92
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    93
subsection \<open>Cut rewrite rules\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
    94
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    95
lemma Cut_nil: "Forall (\<lambda>a. \<not> P a) s \<Longrightarrow> Finite s \<Longrightarrow> Cut P s = nil"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    96
  apply (unfold Cut_def)
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
    97
  apply (subgoal_tac "Filter P \<cdot> s = nil")
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    98
  apply (simp add: oraclebuild_nil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
    99
  apply (rule ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   100
  apply assumption+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   101
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   102
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   103
lemma Cut_UU: "Forall (\<lambda>a. \<not> P a) s \<Longrightarrow> \<not> Finite s \<Longrightarrow> Cut P s = UU"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   104
  apply (unfold Cut_def)
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   105
  apply (subgoal_tac "Filter P \<cdot> s = UU")
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   106
  apply (simp add: oraclebuild_UU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   107
  apply (rule ForallQFilterPUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   108
  apply assumption+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   109
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   110
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   111
lemma Cut_Cons:
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   112
  "P t \<Longrightarrow> Forall (\<lambda>x. \<not> P x) ss \<Longrightarrow> Finite ss \<Longrightarrow>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   113
    Cut P (ss @@ (t \<leadsto> rs)) = ss @@ (t \<leadsto> Cut P rs)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   114
  apply (unfold Cut_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   115
  apply (simp add: ForallQFilterPnil oraclebuild_cons TakewhileConc DropwhileConc)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   116
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   117
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   118
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   119
subsection \<open>Cut lemmas for main theorem\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   120
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   121
lemma FilterCut: "Filter P \<cdot> s = Filter P \<cdot> (Cut P s)"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   122
  apply (rule_tac A1 = "\<lambda>x. True" and Q1 = "\<lambda>x. \<not> P x" and x1 = "s" in take_lemma_induct [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   123
  prefer 3
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   124
  apply fast
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   125
  apply (case_tac "Finite s")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   126
  apply (simp add: Cut_nil ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   127
  apply (simp add: Cut_UU ForallQFilterPUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   128
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   129
  apply (simp add: Cut_Cons ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   130
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   131
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   132
lemma Cut_idemp: "Cut P (Cut P s) = (Cut P s)"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   133
  apply (rule_tac A1 = "\<lambda>x. True" and Q1 = "\<lambda>x. \<not> P x" and x1 = "s" in
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   134
    take_lemma_less_induct [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   135
  prefer 3
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   136
  apply fast
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   137
  apply (case_tac "Finite s")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   138
  apply (simp add: Cut_nil ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   139
  apply (simp add: Cut_UU ForallQFilterPUU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   140
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   141
  apply (simp add: Cut_Cons ForallQFilterPnil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   142
  apply (rule take_reduction)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   143
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   144
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   145
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   146
lemma MapCut: "Map f\<cdot>(Cut (P \<circ> f) s) = Cut P (Map f\<cdot>s)"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   147
  apply (rule_tac A1 = "\<lambda>x. True" and Q1 = "\<lambda>x. \<not> P (f x) " and x1 = "s" in
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   148
    take_lemma_less_induct [THEN mp])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   149
  prefer 3
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   150
  apply fast
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   151
  apply (case_tac "Finite s")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   152
  apply (simp add: Cut_nil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   153
  apply (rule Cut_nil [symmetric])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   154
  apply (simp add: ForallMap o_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   155
  apply (simp add: Map2Finite)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   156
  text \<open>case \<open>\<not> Finite s\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   157
  apply (simp add: Cut_UU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   158
  apply (rule Cut_UU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   159
  apply (simp add: ForallMap o_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   160
  apply (simp add: Map2Finite)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   161
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   162
  apply (simp add: Cut_Cons MapConc ForallMap FiniteMap1 o_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   163
  apply (rule take_reduction)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   164
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   165
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   166
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   167
lemma Cut_prefixcl_nFinite [rule_format]: "\<not> Finite s \<longrightarrow> Cut P s \<sqsubseteq> s"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   168
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   169
  apply (rule take_lemma_less [THEN iffD1])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   170
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   171
  apply (rule mp)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   172
  prefer 2
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   173
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   174
  apply (tactic "thin_tac' @{context} 1 1")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   175
  apply (rule_tac x = "s" in spec)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   176
  apply (rule nat_less_induct)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   177
  apply (intro strip)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   178
  apply (rename_tac na n s)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   179
  apply (case_tac "Forall (\<lambda>x. \<not> P x) s")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   180
  apply (rule take_lemma_less [THEN iffD2, THEN spec])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   181
  apply (simp add: Cut_UU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   182
  text \<open>main case\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   183
  apply (drule divide_Seq3)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   184
  apply (erule exE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   185
  apply (erule conjE)+
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   186
  apply hypsubst
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   187
  apply (simp add: Cut_Cons)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   188
  apply (rule take_reduction_less)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   189
  text \<open>auto makes also reasoning about Finiteness of parts of \<open>s\<close>!\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   190
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   191
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   192
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   193
lemma execThruCut: "is_exec_frag A (s, ex) \<Longrightarrow> is_exec_frag A (s, Cut P ex)"
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   194
  apply (case_tac "Finite ex")
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   195
  apply (cut_tac s = "ex" and P = "P" in Cut_prefixcl_Finite)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   196
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   197
  apply (erule exE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   198
  apply (rule exec_prefix2closed)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   199
  apply (erule_tac s = "ex" and t = "Cut P ex @@ y" in subst)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   200
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   201
  apply (erule exec_prefixclosed)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   202
  apply (erule Cut_prefixcl_nFinite)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   203
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   204
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   205
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   206
subsection \<open>Main Cut Theorem\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   207
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   208
lemma exists_LastActExtsch:
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   209
  "sch \<in> schedules A \<Longrightarrow> tr = Filter (\<lambda>a. a \<in> ext A) \<cdot> sch \<Longrightarrow>
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   210
    \<exists>sch. sch \<in> schedules A \<and> tr = Filter (\<lambda>a. a \<in> ext A) \<cdot> sch \<and> LastActExtsch A sch"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   211
  apply (unfold schedules_def has_schedule_def [abs_def])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   212
  apply auto
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   213
  apply (rule_tac x = "filter_act \<cdot> (Cut (\<lambda>a. fst a \<in> ext A) (snd ex))" in exI)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   214
  apply (simp add: executions_def)
62195
799a5306e2ed more method definitions;
wenzelm
parents: 62156
diff changeset
   215
  apply (pair ex)
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   216
  apply auto
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   217
  apply (rule_tac x = "(x1, Cut (\<lambda>a. fst a \<in> ext A) x2)" in exI)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   218
  apply simp
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   219
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   220
  text \<open>Subgoal 1: Lemma:  propagation of execution through \<open>Cut\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   221
  apply (simp add: execThruCut)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   222
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   223
  text \<open>Subgoal 2:  Lemma:  \<open>Filter P s = Filter P (Cut P s)\<close>\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   224
  apply (simp add: filter_act_def)
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   225
  apply (subgoal_tac "Map fst \<cdot> (Cut (\<lambda>a. fst a \<in> ext A) x2) = Cut (\<lambda>a. a \<in> ext A) (Map fst \<cdot> x2)")
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   226
  apply (rule_tac [2] MapCut [unfolded o_def])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   227
  apply (simp add: FilterCut [symmetric])
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   228
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   229
  text \<open>Subgoal 3: Lemma: \<open>Cut\<close> idempotent\<close>
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   230
  apply (simp add: LastActExtsch_def filter_act_def)
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   231
  apply (subgoal_tac "Map fst \<cdot> (Cut (\<lambda>a. fst a \<in> ext A) x2) = Cut (\<lambda>a. a \<in> ext A) (Map fst \<cdot> x2)")
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   232
  apply (rule_tac [2] MapCut [unfolded o_def])
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   233
  apply (simp add: Cut_idemp)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   234
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   235
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   236
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   237
subsection \<open>Further Cut lemmas\<close>
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   238
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   239
lemma LastActExtimplnil: "LastActExtsch A sch \<Longrightarrow> Filter (\<lambda>x. x \<in> ext A) \<cdot> sch = nil \<Longrightarrow> sch = nil"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   240
  apply (unfold LastActExtsch_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   241
  apply (drule FilternPnilForallP)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   242
  apply (erule conjE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   243
  apply (drule Cut_nil)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   244
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   245
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   246
  done
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17256
diff changeset
   247
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62195
diff changeset
   248
lemma LastActExtimplUU: "LastActExtsch A sch \<Longrightarrow> Filter (\<lambda>x. x \<in> ext A) \<cdot> sch = UU \<Longrightarrow> sch = UU"
62156
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   249
  apply (unfold LastActExtsch_def)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   250
  apply (drule FilternPUUForallP)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   251
  apply (erule conjE)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   252
  apply (drule Cut_UU)
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   253
  apply assumption
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   254
  apply simp
7355fd313cf8 misc tuning and modernization;
wenzelm
parents: 62116
diff changeset
   255
  done
17256
526ff7cfd6ea converted to Isar theory format;
wenzelm
parents: 14981
diff changeset
   256
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   257
end