src/HOLCF/IOA/meta_theory/Abstraction.thy
author haftmann
Mon, 12 Jun 2006 09:14:41 +0200
changeset 19852 b06db8e4476b
parent 19741 f65265d71426
child 23560 e43686246de4
permissions -rw-r--r--
fixed smlnj incompat.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
     1
(*  Title:      HOLCF/IOA/meta_theory/Abstraction.thy
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
     2
    ID:         $Id$
12218
wenzelm
parents: 10835
diff changeset
     3
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     4
*)
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
     5
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     6
header {* Abstraction Theory -- tailored for I/O automata *}
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
     7
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     8
theory Abstraction
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
imports LiveIOA
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    10
begin
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    11
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    12
defaultsort type
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    13
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    14
consts
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    15
4577
674b0b354feb added thms wrt weakening and strengthening in Abstraction;
mueller
parents: 4559
diff changeset
    16
  cex_abs      ::"('s1 => 's2) => ('a,'s1)execution => ('a,'s2)execution"
674b0b354feb added thms wrt weakening and strengthening in Abstraction;
mueller
parents: 4559
diff changeset
    17
  cex_absSeq   ::"('s1 => 's2) => ('a option,'s1)transition Seq => ('a option,'s2)transition Seq"
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    18
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    19
  is_abstraction ::"[('s1=>'s2),('a,'s1)ioa,('a,'s2)ioa] => bool"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    20
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    21
  weakeningIOA       :: "('a,'s2)ioa => ('a,'s1)ioa => ('s1 => 's2) => bool"
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    22
  temp_weakening     :: "('a,'s2)ioa_temp => ('a,'s1)ioa_temp => ('s1 => 's2) => bool"
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    23
  temp_strengthening :: "('a,'s2)ioa_temp => ('a,'s1)ioa_temp => ('s1 => 's2) => bool"
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    24
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    25
  state_weakening       :: "('a,'s2)step_pred => ('a,'s1)step_pred => ('s1 => 's2) => bool"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    26
  state_strengthening   :: "('a,'s2)step_pred => ('a,'s1)step_pred => ('s1 => 's2) => bool"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    27
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    28
  is_live_abstraction  :: "('s1 => 's2) => ('a,'s1)live_ioa => ('a,'s2)live_ioa => bool"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    29
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    30
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    31
defs
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    32
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    33
is_abstraction_def:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    34
  "is_abstraction f C A ==
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    35
   (!s:starts_of(C). f(s):starts_of(A)) &
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    36
   (!s t a. reachable C s & s -a--C-> t
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    37
            --> (f s) -a--A-> (f t))"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    38
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    39
is_live_abstraction_def:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    40
  "is_live_abstraction h CL AM ==
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    41
      is_abstraction h (fst CL) (fst AM) &
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    42
      temp_weakening (snd AM) (snd CL) h"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    43
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    44
cex_abs_def:
10835
nipkow
parents: 5976
diff changeset
    45
  "cex_abs f ex == (f (fst ex), Map (%(a,t). (a,f t))$(snd ex))"
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    46
4577
674b0b354feb added thms wrt weakening and strengthening in Abstraction;
mueller
parents: 4559
diff changeset
    47
(* equals cex_abs on Sequneces -- after ex2seq application -- *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    48
cex_absSeq_def:
10835
nipkow
parents: 5976
diff changeset
    49
  "cex_absSeq f == % s. Map (%(s,a,t). (f s,a,f t))$s"
4577
674b0b354feb added thms wrt weakening and strengthening in Abstraction;
mueller
parents: 4559
diff changeset
    50
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    51
weakeningIOA_def:
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    52
   "weakeningIOA A C h == ! ex. ex : executions C --> cex_abs h ex : executions A"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    53
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    54
temp_weakening_def:
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    55
   "temp_weakening Q P h == temp_strengthening (.~ Q) (.~ P) h"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    56
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    57
temp_strengthening_def:
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    58
   "temp_strengthening Q P h == ! ex. (cex_abs h ex |== Q) --> (ex |== P)"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    59
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    60
state_weakening_def:
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    61
  "state_weakening Q P h == state_strengthening (.~Q) (.~P) h"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    62
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    63
state_strengthening_def:
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    64
  "state_strengthening Q P h == ! s t a.  Q (h(s),a,h(t)) --> P (s,a,t)"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    65
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    66
axioms
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    67
4577
674b0b354feb added thms wrt weakening and strengthening in Abstraction;
mueller
parents: 4559
diff changeset
    68
(* thm about ex2seq which is not provable by induction as ex2seq is not continous *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    69
ex2seq_abs_cex:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    70
  "ex2seq (cex_abs h ex) = cex_absSeq h (ex2seq ex)"
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    71
5976
44290b71a85f tuning to assimiliate it with PhD;
mueller
parents: 4816
diff changeset
    72
(* analog to the proved thm strength_Box - proof skipped as trivial *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    73
weak_Box:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    74
"temp_weakening P Q h
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    75
 ==> temp_weakening ([] P) ([] Q) h"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    76
5976
44290b71a85f tuning to assimiliate it with PhD;
mueller
parents: 4816
diff changeset
    77
(* analog to the proved thm strength_Next - proof skipped as trivial *)
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    78
weak_Next:
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
    79
"temp_weakening P Q h
4559
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    80
 ==> temp_weakening (Next P) (Next Q) h"
8e604d885b54 added files containing temproal logic and abstraction;
mueller
parents:
diff changeset
    81
19741
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    82
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    83
subsection "cex_abs"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    84
	
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    85
lemma cex_abs_UU: "cex_abs f (s,UU) = (f s, UU)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    86
  by (simp add: cex_abs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    87
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    88
lemma cex_abs_nil: "cex_abs f (s,nil) = (f s, nil)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    89
  by (simp add: cex_abs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    90
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    91
lemma cex_abs_cons: "cex_abs f (s,(a,t)>>ex) = (f s, (a,f t) >> (snd (cex_abs f (t,ex))))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    92
  by (simp add: cex_abs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    93
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    94
declare cex_abs_UU [simp] cex_abs_nil [simp] cex_abs_cons [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    95
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    96
 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    97
subsection "lemmas"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    98
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
    99
lemma temp_weakening_def2: "temp_weakening Q P h = (! ex. (ex |== P) --> (cex_abs h ex |== Q))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   100
  apply (simp add: temp_weakening_def temp_strengthening_def NOT_def temp_sat_def satisfies_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   101
  apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   102
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   103
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   104
lemma state_weakening_def2: "state_weakening Q P h = (! s t a. P (s,a,t) --> Q (h(s),a,h(t)))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   105
  apply (simp add: state_weakening_def state_strengthening_def NOT_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   106
  apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   107
  done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   108
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   109
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   110
subsection "Abstraction Rules for Properties"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   111
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   112
lemma exec_frag_abstraction [rule_format]: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   113
 "[| is_abstraction h C A |] ==> 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   114
  !s. reachable C s & is_exec_frag C (s,xs)  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   115
  --> is_exec_frag A (cex_abs h (s,xs))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   116
apply (unfold cex_abs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   117
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   118
apply (tactic {* pair_induct_tac "xs" [thm "is_exec_frag_def"] 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   119
txt {* main case *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   120
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   121
apply (simp add: is_abstraction_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   122
apply (frule reachable.reachable_n)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   123
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   124
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   125
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   126
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   127
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   128
lemma abs_is_weakening: "is_abstraction h C A ==> weakeningIOA A C h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   129
apply (simp add: weakeningIOA_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   130
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   131
apply (simp add: executions_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   132
txt {* start state *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   133
apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   134
apply (simp add: is_abstraction_def cex_abs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   135
txt {* is-execution-fragment *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   136
apply (erule exec_frag_abstraction)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   137
apply (simp add: reachable.reachable_0)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   138
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   139
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   140
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   141
lemma AbsRuleT1: "[|is_abstraction h C A; validIOA A Q; temp_strengthening Q P h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   142
          ==> validIOA C P"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   143
apply (drule abs_is_weakening)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   144
apply (simp add: weakeningIOA_def validIOA_def temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   145
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   146
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   147
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   148
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   149
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   150
(* FIX: Nach TLS.ML *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   151
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   152
lemma IMPLIES_temp_sat: "(ex |== P .--> Q) = ((ex |== P) --> (ex |== Q))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   153
  by (simp add: IMPLIES_def temp_sat_def satisfies_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   154
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   155
lemma AND_temp_sat: "(ex |== P .& Q) = ((ex |== P) & (ex |== Q))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   156
  by (simp add: AND_def temp_sat_def satisfies_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   157
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   158
lemma OR_temp_sat: "(ex |== P .| Q) = ((ex |== P) | (ex |== Q))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   159
  by (simp add: OR_def temp_sat_def satisfies_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   160
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   161
lemma NOT_temp_sat: "(ex |== .~ P) = (~ (ex |== P))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   162
  by (simp add: NOT_def temp_sat_def satisfies_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   163
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   164
declare IMPLIES_temp_sat [simp] AND_temp_sat [simp] OR_temp_sat [simp] NOT_temp_sat [simp]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   165
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   166
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   167
lemma AbsRuleT2: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   168
   "[|is_live_abstraction h (C,L) (A,M);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   169
          validLIOA (A,M) Q;  temp_strengthening Q P h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   170
          ==> validLIOA (C,L) P"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   171
apply (unfold is_live_abstraction_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   172
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   173
apply (drule abs_is_weakening)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   174
apply (simp add: weakeningIOA_def temp_weakening_def2 validLIOA_def validIOA_def temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   175
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   176
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   177
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   178
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   179
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   180
lemma AbsRuleTImprove: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   181
   "[|is_live_abstraction h (C,L) (A,M);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   182
          validLIOA (A,M) (H1 .--> Q);  temp_strengthening Q P h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   183
          temp_weakening H1 H2 h; validLIOA (C,L) H2 |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   184
          ==> validLIOA (C,L) P"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   185
apply (unfold is_live_abstraction_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   186
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   187
apply (drule abs_is_weakening)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   188
apply (simp add: weakeningIOA_def temp_weakening_def2 validLIOA_def validIOA_def temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   189
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   190
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   191
done
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
subsection "Correctness of safe abstraction"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   195
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   196
lemma abstraction_is_ref_map: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   197
"is_abstraction h C A ==> is_ref_map h C A"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   198
apply (unfold is_abstraction_def is_ref_map_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   199
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   200
apply (rule_tac x = "(a,h t) >>nil" in exI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   201
apply (simp add: move_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   202
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   203
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   204
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   205
lemma abs_safety: "[| inp(C)=inp(A); out(C)=out(A);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   206
                   is_abstraction h C A |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   207
                ==> C =<| A"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   208
apply (simp add: ioa_implements_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   209
apply (rule trace_inclusion)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   210
apply (simp (no_asm) add: externals_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   211
apply (auto)[1]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   212
apply (erule abstraction_is_ref_map)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   213
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   214
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   215
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   216
subsection "Correctness of life abstraction"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   217
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   218
(* Reduces to Filter (Map fst x) = Filter (Map fst (Map (%(a,t). (a,x)) x),
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   219
   that is to special Map Lemma *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   220
lemma traces_coincide_abs: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   221
  "ext C = ext A  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   222
         ==> mk_trace C$xs = mk_trace A$(snd (cex_abs f (s,xs)))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   223
apply (unfold cex_abs_def mk_trace_def filter_act_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   224
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   225
apply (tactic {* pair_induct_tac "xs" [] 1 *})
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
(* Does not work with abstraction_is_ref_map as proof of abs_safety, because
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   230
   is_live_abstraction includes temp_strengthening which is necessarily based
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   231
   on cex_abs and not on corresp_ex. Thus, the proof is redoone in a more specific
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   232
   way for cex_abs *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   233
lemma abs_liveness: "[| inp(C)=inp(A); out(C)=out(A);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   234
                   is_live_abstraction h (C,M) (A,L) |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   235
                ==> live_implements (C,M) (A,L)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   236
apply (simp add: is_live_abstraction_def live_implements_def livetraces_def liveexecutions_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   237
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   238
apply (rule_tac x = "cex_abs h ex" in exI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   239
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   240
  (* Traces coincide *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   241
  apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   242
  apply (rule traces_coincide_abs)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   243
  apply (simp (no_asm) add: externals_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   244
  apply (auto)[1]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   245
 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   246
  (* cex_abs is execution *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   247
  apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   248
  apply (simp add: executions_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   249
  (* start state *) 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   250
  apply (rule conjI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   251
  apply (simp add: is_abstraction_def cex_abs_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   252
  (* is-execution-fragment *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   253
  apply (erule exec_frag_abstraction)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   254
  apply (simp add: reachable.reachable_0)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   255
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   256
 (* Liveness *) 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   257
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   258
 apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   259
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   260
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   261
(* FIX: NAch Traces.ML bringen *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   262
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   263
lemma implements_trans: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   264
"[| A =<| B; B =<| C|] ==> A =<| C"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   265
apply (unfold ioa_implements_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   266
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   267
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   268
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   269
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   270
subsection "Abstraction Rules for Automata"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   271
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   272
lemma AbsRuleA1: "[| inp(C)=inp(A); out(C)=out(A);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   273
                   inp(Q)=inp(P); out(Q)=out(P);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   274
                   is_abstraction h1 C A;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   275
                   A =<| Q ;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   276
                   is_abstraction h2 Q P |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   277
                ==> C =<| P"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   278
apply (drule abs_safety)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   279
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   280
apply (drule abs_safety)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   281
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   282
apply (erule implements_trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   283
apply (erule implements_trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   284
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   285
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   286
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   287
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   288
lemma AbsRuleA2: "!!LC. [| inp(C)=inp(A); out(C)=out(A);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   289
                   inp(Q)=inp(P); out(Q)=out(P);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   290
                   is_live_abstraction h1 (C,LC) (A,LA);  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   291
                   live_implements (A,LA) (Q,LQ) ;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   292
                   is_live_abstraction h2 (Q,LQ) (P,LP) |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   293
                ==> live_implements (C,LC) (P,LP)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   294
apply (drule abs_liveness)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   295
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   296
apply (drule abs_liveness)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   297
apply assumption+
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   298
apply (erule live_implements_trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   299
apply (erule live_implements_trans)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   300
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   301
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   302
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   303
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   304
declare split_paired_All [simp del]
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   305
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   306
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   307
subsection "Localizing Temporal Strengthenings and Weakenings"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   308
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   309
lemma strength_AND: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   310
"[| temp_strengthening P1 Q1 h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   311
          temp_strengthening P2 Q2 h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   312
       ==> temp_strengthening (P1 .& P2) (Q1 .& Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   313
apply (unfold temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   314
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   315
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   316
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   317
lemma strength_OR: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   318
"[| temp_strengthening P1 Q1 h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   319
          temp_strengthening P2 Q2 h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   320
       ==> temp_strengthening (P1 .| P2) (Q1 .| Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   321
apply (unfold temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   322
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   323
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   324
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   325
lemma strength_NOT: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   326
"[| temp_weakening P Q h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   327
       ==> temp_strengthening (.~ P) (.~ Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   328
apply (unfold temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   329
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   330
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   331
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   332
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   333
lemma strength_IMPLIES: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   334
"[| temp_weakening P1 Q1 h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   335
          temp_strengthening P2 Q2 h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   336
       ==> temp_strengthening (P1 .--> P2) (Q1 .--> Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   337
apply (unfold temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   338
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   339
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   340
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   341
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   342
lemma weak_AND: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   343
"[| temp_weakening P1 Q1 h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   344
          temp_weakening P2 Q2 h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   345
       ==> temp_weakening (P1 .& P2) (Q1 .& Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   346
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   347
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   348
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   349
lemma weak_OR: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   350
"[| temp_weakening P1 Q1 h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   351
          temp_weakening P2 Q2 h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   352
       ==> temp_weakening (P1 .| P2) (Q1 .| Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   353
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   354
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   355
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   356
lemma weak_NOT: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   357
"[| temp_strengthening P Q h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   358
       ==> temp_weakening (.~ P) (.~ Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   359
apply (unfold temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   360
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   361
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   362
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   363
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   364
lemma weak_IMPLIES: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   365
"[| temp_strengthening P1 Q1 h;  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   366
          temp_weakening P2 Q2 h |]  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   367
       ==> temp_weakening (P1 .--> P2) (Q1 .--> Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   368
apply (unfold temp_strengthening_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   369
apply (simp add: temp_weakening_def2)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   370
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   371
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   372
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   373
subsubsection {* Box *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   374
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   375
(* FIX: should be same as nil_is_Conc2 when all nils are turned to right side !! *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   376
lemma UU_is_Conc: "(UU = x @@ y) = (((x::'a Seq)= UU) | (x=nil & y=UU))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   377
apply (tactic {* Seq_case_simp_tac "x" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   378
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   379
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   380
lemma ex2seqConc [rule_format]:
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   381
"Finite s1 -->  
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   382
  (! ex. (s~=nil & s~=UU & ex2seq ex = s1 @@ s) --> (? ex'. s = ex2seq ex'))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   383
apply (rule impI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   384
apply (tactic {* Seq_Finite_induct_tac 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   385
apply blast
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   386
(* main case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   387
apply (tactic "clarify_tac set_cs 1")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   388
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   389
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   390
(* UU case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   391
apply (simp add: nil_is_Conc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   392
(* nil case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   393
apply (simp add: nil_is_Conc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   394
(* cons case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   395
apply (tactic {* pair_tac "aa" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   396
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   397
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   398
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   399
(* important property of ex2seq: can be shiftet, as defined "pointwise" *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   400
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   401
lemma ex2seq_tsuffix: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   402
"tsuffix s (ex2seq ex) ==> ? ex'. s = (ex2seq ex')"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   403
apply (unfold tsuffix_def suffix_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   404
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   405
apply (drule ex2seqConc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   406
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   407
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   408
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   409
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   410
(* FIX: NAch Sequence.ML bringen *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   411
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   412
lemma Mapnil: "(Map f$s = nil) = (s=nil)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   413
apply (tactic {* Seq_case_simp_tac "s" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   414
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   415
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   416
lemma MapUU: "(Map f$s = UU) = (s=UU)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   417
apply (tactic {* Seq_case_simp_tac "s" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   418
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   419
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   420
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   421
(* important property of cex_absSeq: As it is a 1to1 correspondence, 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   422
  properties carry over *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   423
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   424
lemma cex_absSeq_tsuffix: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   425
"tsuffix s t ==> tsuffix (cex_absSeq h s) (cex_absSeq h t)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   426
apply (unfold tsuffix_def suffix_def cex_absSeq_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   427
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   428
apply (simp add: Mapnil)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   429
apply (simp add: MapUU)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   430
apply (rule_tac x = "Map (% (s,a,t) . (h s,a, h t))$s1" in exI)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   431
apply (simp add: Map2Finite MapConc)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   432
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   433
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   434
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   435
lemma strength_Box: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   436
"[| temp_strengthening P Q h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   437
       ==> temp_strengthening ([] P) ([] Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   438
apply (unfold temp_strengthening_def state_strengthening_def temp_sat_def satisfies_def Box_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   439
apply (tactic "clarify_tac set_cs 1")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   440
apply (frule ex2seq_tsuffix)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   441
apply (tactic "clarify_tac set_cs 1")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   442
apply (drule_tac h = "h" in cex_absSeq_tsuffix)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   443
apply (simp add: ex2seq_abs_cex)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   444
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   445
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   446
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   447
subsubsection {* Init *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   448
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   449
lemma strength_Init: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   450
"[| state_strengthening P Q h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   451
       ==> temp_strengthening (Init P) (Init Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   452
apply (unfold temp_strengthening_def state_strengthening_def 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   453
  temp_sat_def satisfies_def Init_def unlift_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   454
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   455
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   456
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   457
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   458
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   459
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   460
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   461
subsubsection {* Next *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   462
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   463
lemma TL_ex2seq_UU: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   464
"(TL$(ex2seq (cex_abs h ex))=UU) = (TL$(ex2seq ex)=UU)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   465
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   466
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   467
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   468
apply (tactic {* Seq_case_simp_tac "s" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   469
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   470
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   471
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   472
lemma TL_ex2seq_nil: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   473
"(TL$(ex2seq (cex_abs h ex))=nil) = (TL$(ex2seq ex)=nil)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   474
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   475
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   476
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   477
apply (tactic {* Seq_case_simp_tac "s" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   478
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   479
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   480
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   481
(* FIX: put to Sequence Lemmas *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   482
lemma MapTL: "Map f$(TL$s) = TL$(Map f$s)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   483
apply (tactic {* Seq_induct_tac "s" [] 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   484
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   485
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   486
(* important property of cex_absSeq: As it is a 1to1 correspondence, 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   487
  properties carry over *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   488
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   489
lemma cex_absSeq_TL: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   490
"cex_absSeq h (TL$s) = (TL$(cex_absSeq h s))"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   491
apply (unfold cex_absSeq_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   492
apply (simp add: MapTL)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   493
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   494
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   495
(* important property of ex2seq: can be shiftet, as defined "pointwise" *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   496
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   497
lemma TLex2seq: "[| (snd ex)~=UU ; (snd ex)~=nil |] ==> (? ex'. TL$(ex2seq ex) = ex2seq ex')"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   498
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   499
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   500
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   501
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   502
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   503
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   504
 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   505
lemma ex2seqnilTL: "(TL$(ex2seq ex)~=nil) = ((snd ex)~=nil & (snd ex)~=UU)"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   506
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   507
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   508
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   509
apply (tactic {* Seq_case_simp_tac "s" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   510
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   511
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   512
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   513
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   514
lemma strength_Next: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   515
"[| temp_strengthening P Q h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   516
       ==> temp_strengthening (Next P) (Next Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   517
apply (unfold temp_strengthening_def state_strengthening_def temp_sat_def satisfies_def Next_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   518
apply simp
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   519
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   520
apply (simp add: TL_ex2seq_nil TL_ex2seq_UU)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   521
apply (simp add: TL_ex2seq_nil TL_ex2seq_UU)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   522
apply (simp add: TL_ex2seq_nil TL_ex2seq_UU)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   523
apply (simp add: TL_ex2seq_nil TL_ex2seq_UU)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   524
(* cons case *)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   525
apply (simp add: TL_ex2seq_nil TL_ex2seq_UU ex2seq_abs_cex cex_absSeq_TL [symmetric] ex2seqnilTL)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   526
apply (erule conjE)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   527
apply (drule TLex2seq)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   528
apply assumption
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   529
apply auto
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   530
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   531
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   532
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   533
text {* Localizing Temporal Weakenings     - 2 *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   534
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   535
lemma weak_Init: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   536
"[| state_weakening P Q h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   537
       ==> temp_weakening (Init P) (Init Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   538
apply (simp add: temp_weakening_def2 state_weakening_def2
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   539
  temp_sat_def satisfies_def Init_def unlift_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   540
apply (tactic "safe_tac set_cs")
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   541
apply (tactic {* pair_tac "ex" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   542
apply (tactic {* Seq_case_simp_tac "y" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   543
apply (tactic {* pair_tac "a" 1 *})
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   544
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   545
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   546
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   547
text {* Localizing Temproal Strengthenings - 3 *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   548
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   549
lemma strength_Diamond: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   550
"[| temp_strengthening P Q h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   551
       ==> temp_strengthening (<> P) (<> Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   552
apply (unfold Diamond_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   553
apply (rule strength_NOT)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   554
apply (rule weak_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   555
apply (erule weak_NOT)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   556
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   557
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   558
lemma strength_Leadsto: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   559
"[| temp_weakening P1 P2 h; 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   560
          temp_strengthening Q1 Q2 h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   561
       ==> temp_strengthening (P1 ~> Q1) (P2 ~> Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   562
apply (unfold Leadsto_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   563
apply (rule strength_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   564
apply (erule strength_IMPLIES)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   565
apply (erule strength_Diamond)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   566
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   567
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   568
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   569
text {* Localizing Temporal Weakenings - 3 *}
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   570
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   571
lemma weak_Diamond: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   572
"[| temp_weakening P Q h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   573
       ==> temp_weakening (<> P) (<> Q) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   574
apply (unfold Diamond_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   575
apply (rule weak_NOT)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   576
apply (rule strength_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   577
apply (erule strength_NOT)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   578
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   579
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   580
lemma weak_Leadsto: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   581
"[| temp_strengthening P1 P2 h; 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   582
          temp_weakening Q1 Q2 h |] 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   583
       ==> temp_weakening (P1 ~> Q1) (P2 ~> Q2) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   584
apply (unfold Leadsto_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   585
apply (rule weak_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   586
apply (erule weak_IMPLIES)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   587
apply (erule weak_Diamond)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   588
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   589
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   590
lemma weak_WF: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   591
  " !!A. [| !! s. Enabled A acts (h s) ==> Enabled C acts s|]   
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   592
    ==> temp_weakening (WF A acts) (WF C acts) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   593
apply (unfold WF_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   594
apply (rule weak_IMPLIES)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   595
apply (rule strength_Diamond)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   596
apply (rule strength_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   597
apply (rule strength_Init)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   598
apply (rule_tac [2] weak_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   599
apply (rule_tac [2] weak_Diamond)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   600
apply (rule_tac [2] weak_Init)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   601
apply (auto simp add: state_weakening_def state_strengthening_def
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   602
  xt2_def plift_def option_lift_def NOT_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   603
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   604
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   605
lemma weak_SF: 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   606
  " !!A. [| !! s. Enabled A acts (h s) ==> Enabled C acts s|]   
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   607
    ==> temp_weakening (SF A acts) (SF C acts) h"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   608
apply (unfold SF_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   609
apply (rule weak_IMPLIES)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   610
apply (rule strength_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   611
apply (rule strength_Diamond)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   612
apply (rule strength_Init)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   613
apply (rule_tac [2] weak_Box)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   614
apply (rule_tac [2] weak_Diamond)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   615
apply (rule_tac [2] weak_Init)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   616
apply (auto simp add: state_weakening_def state_strengthening_def
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   617
  xt2_def plift_def option_lift_def NOT_def)
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   618
done
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   619
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   620
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   621
lemmas weak_strength_lemmas =
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   622
  weak_OR weak_AND weak_NOT weak_IMPLIES weak_Box weak_Next weak_Init
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   623
  weak_Diamond weak_Leadsto strength_OR strength_AND strength_NOT
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   624
  strength_IMPLIES strength_Box strength_Next strength_Init
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   625
  strength_Diamond strength_Leadsto weak_WF weak_SF
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   626
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   627
ML {*
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   628
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   629
local
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   630
  val weak_strength_lemmas = thms "weak_strength_lemmas"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   631
  val state_strengthening_def = thm "state_strengthening_def"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   632
  val state_weakening_def = thm "state_weakening_def"
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   633
in
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   634
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   635
fun abstraction_tac i = 
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   636
    SELECT_GOAL (CLASIMPSET (fn (cs, ss) =>
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   637
      auto_tac (cs addSIs weak_strength_lemmas,
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   638
        ss addsimps [state_strengthening_def, state_weakening_def]))) i
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   639
end
f65265d71426 removed legacy ML scripts;
wenzelm
parents: 17233
diff changeset
   640
*}
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   641
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
   642
end