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