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