src/HOLCF/IOA/meta_theory/SimCorrectness.thy
author huffman
Wed, 17 Feb 2010 10:00:22 -0800
changeset 35174 e15040ae75d7
parent 27208 5fe899199f85
child 39159 0dec18004e75
permissions -rw-r--r--
remove $ from all HOLCF files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4565
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
     1
(*  Title:      HOLCF/IOA/meta_theory/SimCorrectness.thy
12218
wenzelm
parents: 10835
diff changeset
     2
    Author:     Olaf Müller
4565
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
     3
*)
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
     4
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     5
header {* Correctness of Simulations in HOLCF/IOA *}
4565
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
     6
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     7
theory SimCorrectness
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
imports Simulations
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
begin
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    10
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    11
definition
4565
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
    12
  (* Note: s2 instead of s1 in last argument type !! *)
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    13
  corresp_ex_simC :: "('a,'s2)ioa => (('s1 * 's2)set) => ('a,'s1)pairs
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    14
                   -> ('s2 => ('a,'s2)pairs)" where
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    15
  "corresp_ex_simC A R = (fix$(LAM h ex. (%s. case ex of
4565
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
    16
      nil =>  nil
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
    17
    | x##xs => (flift1 (%pr. let a = (fst pr); t = (snd pr);
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    18
                                 T' = @t'. ? ex1. (t,t'):R & move A ex1 s a t'
4565
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
    19
                             in
ea467ce15040 added forward simulation correectness;
mueller
parents:
diff changeset
    20
                                (@cex. move A cex s a T')
10835
nipkow
parents: 4565
diff changeset
    21
                                 @@ ((h$xs) T'))
nipkow
parents: 4565
diff changeset
    22
                        $x) )))"
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    23
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    24
definition
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    25
  corresp_ex_sim :: "('a,'s2)ioa => (('s1 *'s2)set) =>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    26
                      ('a,'s1)execution => ('a,'s2)execution" where
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    27
  "corresp_ex_sim A R ex == let S'= (@s'.(fst ex,s'):R & s': starts_of A)
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    28
                            in
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    29
                               (S',(corresp_ex_simC A R$(snd ex)) S')"
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    30
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    31
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    32
subsection "corresp_ex_sim"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    33
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    34
lemma corresp_ex_simC_unfold: "corresp_ex_simC A R  = (LAM ex. (%s. case ex of
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    35
       nil =>  nil
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    36
     | x##xs => (flift1 (%pr. let a = (fst pr); t = (snd pr);
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    37
                                  T' = @t'. ? ex1. (t,t'):R & move A ex1 s a t'
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    38
                              in
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    39
                                 (@cex. move A cex s a T')
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    40
                               @@ ((corresp_ex_simC A R $xs) T'))
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    41
                         $x) ))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    42
apply (rule trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    43
apply (rule fix_eq2)
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    44
apply (simp only: corresp_ex_simC_def)
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    45
apply (rule beta_cfun)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    46
apply (simp add: flift1_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    47
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    48
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    49
lemma corresp_ex_simC_UU: "(corresp_ex_simC A R$UU) s=UU"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    50
apply (subst corresp_ex_simC_unfold)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    51
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    52
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    53
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    54
lemma corresp_ex_simC_nil: "(corresp_ex_simC A R$nil) s = nil"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    55
apply (subst corresp_ex_simC_unfold)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    56
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    57
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    58
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    59
lemma corresp_ex_simC_cons: "(corresp_ex_simC A R$((a,t)>>xs)) s =
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    60
           (let T' = @t'. ? ex1. (t,t'):R & move A ex1 s a t'
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    61
            in
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    62
             (@cex. move A cex s a T')
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    63
              @@ ((corresp_ex_simC A R$xs) T'))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    64
apply (rule trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    65
apply (subst corresp_ex_simC_unfold)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    66
apply (simp add: Consq_def flift1_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    67
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    68
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    69
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    70
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    71
declare corresp_ex_simC_UU [simp] corresp_ex_simC_nil [simp] corresp_ex_simC_cons [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    72
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    73
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    74
subsection "properties of move"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    75
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    76
declare Let_def [simp del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    77
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    78
lemma move_is_move_sim:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    79
   "[|is_simulation R C A; reachable C s; s -a--C-> t; (s,s'):R|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
    80
      let T' = @t'. ? ex1. (t,t'):R & move A ex1 s' a t' in
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    81
      (t,T'): R & move A (@ex2. move A ex2 s' a T') s' a T'"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    82
apply (unfold is_simulation_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    83
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    84
(* Does not perform conditional rewriting on assumptions automatically as
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    85
   usual. Instantiate all variables per hand. Ask Tobias?? *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    86
apply (subgoal_tac "? t' ex. (t,t') :R & move A ex s' a t'")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    87
prefer 2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    88
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    89
apply (erule conjE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    90
apply (erule_tac x = "s" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    91
apply (erule_tac x = "s'" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    92
apply (erule_tac x = "t" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    93
apply (erule_tac x = "a" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    94
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    95
(* Go on as usual *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    96
apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    97
apply (drule_tac x = "t'" and P = "%t'. ? ex. (t,t') :R & move A ex s' a t'" in someI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    98
apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    99
apply (erule conjE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   100
apply (simp add: Let_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   101
apply (rule_tac x = "ex" in someI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   102
apply (erule conjE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   103
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   104
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   105
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   106
declare Let_def [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   107
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   108
lemma move_subprop1_sim:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   109
   "[|is_simulation R C A; reachable C s; s-a--C-> t; (s,s'):R|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   110
    let T' = @t'. ? ex1. (t,t'):R & move A ex1 s' a t' in
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   111
     is_exec_frag A (s',@x. move A x s' a T')"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   112
apply (cut_tac move_is_move_sim)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   113
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   114
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   115
apply (simp add: move_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   116
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   117
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   118
lemma move_subprop2_sim:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   119
   "[|is_simulation R C A; reachable C s; s-a--C-> t; (s,s'):R|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   120
    let T' = @t'. ? ex1. (t,t'):R & move A ex1 s' a t' in
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   121
    Finite (@x. move A x s' a T')"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   122
apply (cut_tac move_is_move_sim)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   123
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   124
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   125
apply (simp add: move_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   126
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   127
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   128
lemma move_subprop3_sim:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   129
   "[|is_simulation R C A; reachable C s; s-a--C-> t; (s,s'):R|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   130
    let T' = @t'. ? ex1. (t,t'):R & move A ex1 s' a t' in
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   131
     laststate (s',@x. move A x s' a T') = T'"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   132
apply (cut_tac move_is_move_sim)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   133
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   134
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   135
apply (simp add: move_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   136
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   137
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   138
lemma move_subprop4_sim:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   139
   "[|is_simulation R C A; reachable C s; s-a--C-> t; (s,s'):R|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   140
    let T' = @t'. ? ex1. (t,t'):R & move A ex1 s' a t' in
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   141
      mk_trace A$((@x. move A x s' a T')) =
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   142
        (if a:ext A then a>>nil else nil)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   143
apply (cut_tac move_is_move_sim)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   144
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   145
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   146
apply (simp add: move_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   147
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   148
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   149
lemma move_subprop5_sim:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   150
   "[|is_simulation R C A; reachable C s; s-a--C-> t; (s,s'):R|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   151
    let T' = @t'. ? ex1. (t,t'):R & move A ex1 s' a t' in
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   152
      (t,T'):R"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   153
apply (cut_tac move_is_move_sim)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   154
defer
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   155
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   156
apply (simp add: move_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   157
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   158
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   159
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   160
subsection {* TRACE INCLUSION Part 1: Traces coincide *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   161
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   162
subsubsection "Lemmata for <=="
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   163
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   164
(* ------------------------------------------------------
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   165
                 Lemma 1 :Traces coincide
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   166
   ------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   167
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   168
declare split_if [split del]
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   169
lemma traces_coincide_sim [rule_format (no_asm)]:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   170
  "[|is_simulation R C A; ext C = ext A|] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   171
         !s s'. reachable C s & is_exec_frag C (s,ex) & (s,s'): R -->
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   172
             mk_trace C$ex = mk_trace A$((corresp_ex_simC A R$ex) s')"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   173
27208
5fe899199f85 proper context for tactics derived from res_inst_tac;
wenzelm
parents: 26359
diff changeset
   174
apply (tactic {* pair_induct_tac @{context} "ex" [thm "is_exec_frag_def"] 1 *})
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   175
(* cons case *)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 25135
diff changeset
   176
apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   177
apply (rename_tac ex a t s s')
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   178
apply (simp add: mk_traceConc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   179
apply (frule reachable.reachable_n)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   180
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   181
apply (erule_tac x = "t" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   182
apply (erule_tac x = "@t'. ? ex1. (t,t') :R & move A ex1 s' a t'" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   183
apply (simp add: move_subprop5_sim [unfolded Let_def]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   184
  move_subprop4_sim [unfolded Let_def] split add: split_if)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   185
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   186
declare split_if [split]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   187
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   188
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   189
(* ----------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   190
(*               Lemma 2 : corresp_ex_sim is execution         *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   191
(* ----------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   192
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   193
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   194
lemma correspsim_is_execution [rule_format (no_asm)]:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   195
 "[| is_simulation R C A |] ==>
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   196
  !s s'. reachable C s & is_exec_frag C (s,ex) & (s,s'):R
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   197
  --> is_exec_frag A (s',(corresp_ex_simC A R$ex) s')"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   198
27208
5fe899199f85 proper context for tactics derived from res_inst_tac;
wenzelm
parents: 26359
diff changeset
   199
apply (tactic {* pair_induct_tac @{context} "ex" [@{thm is_exec_frag_def}] 1 *})
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   200
(* main case *)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 25135
diff changeset
   201
apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   202
apply (rename_tac ex a t s s')
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   203
apply (rule_tac t = "@t'. ? ex1. (t,t') :R & move A ex1 s' a t'" in lemma_2_1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   204
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   205
(* Finite *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   206
apply (erule move_subprop2_sim [unfolded Let_def])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   207
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   208
apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   209
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   210
(* is_exec_frag *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   211
apply (erule move_subprop1_sim [unfolded Let_def])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   212
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   213
apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   214
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   215
(* Induction hypothesis  *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   216
(* reachable_n looping, therefore apply it manually *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   217
apply (erule_tac x = "t" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   218
apply (erule_tac x = "@t'. ? ex1. (t,t') :R & move A ex1 s' a t'" in allE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   219
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   220
apply (frule reachable.reachable_n)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   221
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   222
apply (simp add: move_subprop5_sim [unfolded Let_def])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   223
(* laststate *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   224
apply (erule move_subprop3_sim [unfolded Let_def, symmetric])
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   225
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   226
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   227
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   228
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   229
subsection "Main Theorem: TRACE - INCLUSION"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   230
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   231
(* -------------------------------------------------------------------------------- *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   232
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   233
  (* generate condition (s,S'):R & S':starts_of A, the first being intereting
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   234
     for the induction cases concerning the two lemmas correpsim_is_execution and
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   235
     traces_coincide_sim, the second for the start state case.
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   236
     S':= @s'. (s,s'):R & s':starts_of A, where s:starts_of C  *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   237
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   238
lemma simulation_starts:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   239
"[| is_simulation R C A; s:starts_of C |]
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   240
  ==> let S' = @s'. (s,s'):R & s':starts_of A in
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   241
      (s,S'):R & S':starts_of A"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   242
  apply (simp add: is_simulation_def corresp_ex_sim_def Int_non_empty Image_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   243
  apply (erule conjE)+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   244
  apply (erule ballE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   245
  prefer 2 apply (blast)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   246
  apply (erule exE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   247
  apply (rule someI2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   248
  apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   249
  apply blast
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   250
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   251
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   252
lemmas sim_starts1 = simulation_starts [unfolded Let_def, THEN conjunct1, standard]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   253
lemmas sim_starts2 = simulation_starts [unfolded Let_def, THEN conjunct2, standard]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   254
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   255
25135
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   256
lemma trace_inclusion_for_simulations:
4f8176c940cf modernized specifications ('definition', 'axiomatization');
wenzelm
parents: 19741
diff changeset
   257
  "[| ext C = ext A; is_simulation R C A |]
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   258
           ==> traces C <= traces A"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   259
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   260
  apply (unfold traces_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   261
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   262
  apply (simp (no_asm) add: has_trace_def2)
26359
6d437bde2f1d more antiquotations
haftmann
parents: 25135
diff changeset
   263
  apply auto
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   264
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   265
  (* give execution of abstract automata *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   266
  apply (rule_tac x = "corresp_ex_sim A R ex" in bexI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   267
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   268
  (* Traces coincide, Lemma 1 *)
27208
5fe899199f85 proper context for tactics derived from res_inst_tac;
wenzelm
parents: 26359
diff changeset
   269
  apply (tactic {* pair_tac @{context} "ex" 1 *})
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   270
  apply (rename_tac s ex)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   271
  apply (simp (no_asm) add: corresp_ex_sim_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   272
  apply (rule_tac s = "s" in traces_coincide_sim)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   273
  apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   274
  apply (simp add: executions_def reachable.reachable_0 sim_starts1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   275
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   276
  (* corresp_ex_sim is execution, Lemma 2 *)
27208
5fe899199f85 proper context for tactics derived from res_inst_tac;
wenzelm
parents: 26359
diff changeset
   277
  apply (tactic {* pair_tac @{context} "ex" 1 *})
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   278
  apply (simp add: executions_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   279
  apply (rename_tac s ex)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   280
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   281
  (* start state *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   282
  apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   283
  apply (simp add: sim_starts2 corresp_ex_sim_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   284
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   285
  (* is-execution-fragment *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   286
  apply (simp add: corresp_ex_sim_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   287
  apply (rule_tac s = s in correspsim_is_execution)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   288
  apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   289
  apply (simp add: reachable.reachable_0 sim_starts1)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   290
  done
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   291
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   292
end