author | nipkow |
Fri, 17 Oct 1997 15:23:14 +0200 | |
changeset 3918 | 94e0fdcb7b91 |
parent 3521 | bdc51b4c6050 |
child 4098 | 71e05eb27fb6 |
permissions | -rw-r--r-- |
3071 | 1 |
(* Title: HOLCF/IOA/meta_theory/RefMappings.ML |
3275 | 2 |
ID: $Id$ |
3071 | 3 |
Author: Olaf Mueller |
4 |
Copyright 1996 TU Muenchen |
|
5 |
||
6 |
Refinement Mappings in HOLCF/IOA |
|
7 |
*) |
|
8 |
||
9 |
||
10 |
||
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
11 |
(* ---------------------------------------------------------------------------- *) |
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
12 |
section "laststate"; |
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
13 |
(* ---------------------------------------------------------------------------- *) |
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
14 |
|
3071 | 15 |
goal thy "laststate (s,UU) = s"; |
16 |
by (simp_tac (!simpset addsimps [laststate_def]) 1); |
|
17 |
qed"laststate_UU"; |
|
18 |
||
19 |
goal thy "laststate (s,nil) = s"; |
|
20 |
by (simp_tac (!simpset addsimps [laststate_def]) 1); |
|
21 |
qed"laststate_nil"; |
|
22 |
||
23 |
goal thy "!! ex. Finite ex ==> laststate (s,at>>ex) = laststate (snd at,ex)"; |
|
24 |
by (simp_tac (!simpset addsimps [laststate_def]) 1); |
|
25 |
by (case_tac "ex=nil" 1); |
|
26 |
by (Asm_simp_tac 1); |
|
27 |
by (Asm_simp_tac 1); |
|
3457 | 28 |
by (dtac (Finite_Last1 RS mp) 1); |
29 |
by (assume_tac 1); |
|
3071 | 30 |
by (def_tac 1); |
31 |
qed"laststate_cons"; |
|
32 |
||
33 |
Addsimps [laststate_UU,laststate_nil,laststate_cons]; |
|
34 |
||
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
35 |
goal thy "!!ex. Finite ex ==> (! s. ? u. laststate (s,ex)=u)"; |
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
36 |
by (Seq_Finite_induct_tac 1); |
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
37 |
qed"exists_laststate"; |
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
38 |
|
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
39 |
|
3071 | 40 |
(* ---------------------------------------------------------------------------- *) |
41 |
||
42 |
section "transitions and moves"; |
|
43 |
||
44 |
||
45 |
goal thy"!!f. s -a--A-> t ==> ? ex. move A ex s a t"; |
|
46 |
||
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
47 |
by (res_inst_tac [("x","(a,t)>>nil")] exI 1); |
3071 | 48 |
by (asm_full_simp_tac (!simpset addsimps [move_def]) 1); |
49 |
qed"transition_is_ex"; |
|
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
50 |
|
3071 | 51 |
|
52 |
goal thy"!!f. (~a:ext A) & s=t ==> ? ex. move A ex s a t"; |
|
53 |
||
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
54 |
by (res_inst_tac [("x","nil")] exI 1); |
3071 | 55 |
by (asm_full_simp_tac (!simpset addsimps [move_def]) 1); |
56 |
qed"nothing_is_ex"; |
|
57 |
||
58 |
||
59 |
goal thy"!!f. (s -a--A-> s') & (s' -a'--A-> s'') & (~a':ext A) \ |
|
60 |
\ ==> ? ex. move A ex s a s''"; |
|
61 |
||
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
62 |
by (res_inst_tac [("x","(a,s')>>(a',s'')>>nil")] exI 1); |
3071 | 63 |
by (asm_full_simp_tac (!simpset addsimps [move_def]) 1); |
64 |
qed"ei_transitions_are_ex"; |
|
65 |
||
66 |
||
67 |
goal thy |
|
68 |
"!!f. (s1 -a1--A-> s2) & (s2 -a2--A-> s3) & (s3 -a3--A-> s4) &\ |
|
69 |
\ (~a2:ext A) & (~a3:ext A) ==> \ |
|
70 |
\ ? ex. move A ex s1 a1 s4"; |
|
71 |
||
3433
2de17c994071
added deadlock freedom, polished definitions and proofs
mueller
parents:
3275
diff
changeset
|
72 |
by (res_inst_tac [("x","(a1,s2)>>(a2,s3)>>(a3,s4)>>nil")] exI 1); |
3071 | 73 |
by (asm_full_simp_tac (!simpset addsimps [move_def]) 1); |
74 |
qed"eii_transitions_are_ex"; |
|
75 |
||
76 |
||
77 |
(* ---------------------------------------------------------------------------- *) |
|
78 |
||
79 |
section "weak_ref_map and ref_map"; |
|
80 |
||
81 |
||
82 |
goalw thy [is_weak_ref_map_def,is_ref_map_def] |
|
83 |
"!!f. [| ext C = ext A; \ |
|
84 |
\ is_weak_ref_map f C A |] ==> is_ref_map f C A"; |
|
85 |
by (safe_tac set_cs); |
|
86 |
by (case_tac "a:ext A" 1); |
|
87 |
by (rtac transition_is_ex 1); |
|
88 |
by (Asm_simp_tac 1); |
|
89 |
by (rtac nothing_is_ex 1); |
|
90 |
by (Asm_simp_tac 1); |
|
91 |
qed"weak_ref_map2ref_map"; |
|
92 |
||
93 |
||
94 |
val prems = goal HOL.thy "(P ==> Q-->R) ==> P&Q --> R"; |
|
3521 | 95 |
by(fast_tac (!claset addDs prems) 1); |
96 |
val lemma = result(); |
|
97 |
||
3071 | 98 |
|
99 |
goal thy "!!f.[| is_weak_ref_map f C A |]\ |
|
100 |
\ ==> (is_weak_ref_map f (rename C g) (rename A g))"; |
|
101 |
by (asm_full_simp_tac (!simpset addsimps [is_weak_ref_map_def]) 1); |
|
102 |
by (rtac conjI 1); |
|
103 |
(* 1: start states *) |
|
3521 | 104 |
by (asm_full_simp_tac (!simpset addsimps [rename_def,rename_set_def,starts_of_def]) 1); |
3071 | 105 |
(* 2: reachable transitions *) |
106 |
by (REPEAT (rtac allI 1)); |
|
3521 | 107 |
by (rtac lemma 1); |
108 |
by (simp_tac (!simpset addsimps [rename_def,rename_set_def]) 1); |
|
3071 | 109 |
by (asm_full_simp_tac (!simpset addsimps [externals_def,asig_inputs_def, |
110 |
asig_outputs_def,asig_of_def,trans_of_def]) 1); |
|
111 |
by (safe_tac (!claset)); |
|
3457 | 112 |
by (stac expand_if 1); |
3071 | 113 |
by (rtac conjI 1); |
114 |
by (rtac impI 1); |
|
115 |
by (etac disjE 1); |
|
116 |
by (etac exE 1); |
|
117 |
by (etac conjE 1); |
|
118 |
(* x is input *) |
|
119 |
by (dtac sym 1); |
|
120 |
by (dtac sym 1); |
|
121 |
by (Asm_full_simp_tac 1); |
|
122 |
by (REPEAT (hyp_subst_tac 1)); |
|
123 |
by (forward_tac [reachable_rename] 1); |
|
124 |
by (Asm_full_simp_tac 1); |
|
125 |
(* x is output *) |
|
126 |
by (etac exE 1); |
|
127 |
by (etac conjE 1); |
|
128 |
by (dtac sym 1); |
|
129 |
by (dtac sym 1); |
|
130 |
by (Asm_full_simp_tac 1); |
|
131 |
by (REPEAT (hyp_subst_tac 1)); |
|
132 |
by (forward_tac [reachable_rename] 1); |
|
133 |
by (Asm_full_simp_tac 1); |
|
134 |
(* x is internal *) |
|
135 |
by (simp_tac (!simpset addcongs [conj_cong]) 1); |
|
136 |
by (rtac impI 1); |
|
137 |
by (etac conjE 1); |
|
138 |
by (forward_tac [reachable_rename] 1); |
|
139 |
by (Auto_tac()); |
|
140 |
qed"rename_through_pmap"; |
|
141 |
||
142 |