| author | wenzelm | 
| Tue, 27 Jan 2009 12:59:38 +0100 | |
| changeset 29639 | b9a7ea6c6da7 | 
| parent 25135 | 4f8176c940cf | 
| child 30607 | c3d1590debd8 | 
| permissions | -rw-r--r-- | 
| 6470 | 1  | 
(* Title: HOLCF/IOA/TrivEx.thy  | 
2  | 
ID: $Id$  | 
|
| 12218 | 3  | 
Author: Olaf Müller  | 
| 6470 | 4  | 
*)  | 
5  | 
||
| 17244 | 6  | 
header {* Trivial Abstraction Example with fairness *}
 | 
7  | 
||
8  | 
theory TrivEx2  | 
|
9  | 
imports IOA Abstraction  | 
|
10  | 
begin  | 
|
| 6470 | 11  | 
|
12  | 
datatype action = INC  | 
|
13  | 
||
| 
25135
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
14  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
15  | 
C_asig :: "action signature" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
16  | 
  "C_asig = ({},{INC},{})"
 | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
17  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
18  | 
C_trans :: "(action, nat)transition set" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
19  | 
"C_trans =  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
20  | 
   {tr. let s = fst(tr);
 | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
21  | 
t = snd(snd(tr))  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
22  | 
in case fst(snd(tr))  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
23  | 
of  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
24  | 
INC => t = Suc(s)}"  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
25  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
26  | 
C_ioa :: "(action, nat)ioa" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
27  | 
  "C_ioa = (C_asig, {0}, C_trans,{},{})"
 | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
28  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
29  | 
C_live_ioa :: "(action, nat)live_ioa" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
30  | 
  "C_live_ioa = (C_ioa, WF C_ioa {INC})"
 | 
| 6470 | 31  | 
|
| 
25135
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
32  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
33  | 
A_asig :: "action signature" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
34  | 
  "A_asig = ({},{INC},{})"
 | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
35  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
36  | 
A_trans :: "(action, bool)transition set" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
37  | 
"A_trans =  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
38  | 
   {tr. let s = fst(tr);
 | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
39  | 
t = snd(snd(tr))  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
40  | 
in case fst(snd(tr))  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
41  | 
of  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
42  | 
INC => t = True}"  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
43  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
44  | 
A_ioa :: "(action, bool)ioa" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
45  | 
  "A_ioa = (A_asig, {False}, A_trans,{},{})"
 | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
46  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
47  | 
A_live_ioa :: "(action, bool)live_ioa" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
48  | 
  "A_live_ioa = (A_ioa, WF A_ioa {INC})"
 | 
| 6470 | 49  | 
|
| 
25135
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
50  | 
definition  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
51  | 
h_abs :: "nat => bool" where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
52  | 
"h_abs n = (n~=0)"  | 
| 6470 | 53  | 
|
| 
25135
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
54  | 
axiomatization where  | 
| 
 
4f8176c940cf
modernized specifications ('definition', 'axiomatization');
 
wenzelm 
parents: 
19740 
diff
changeset
 | 
55  | 
  MC_result: "validLIOA (A_ioa,WF A_ioa {INC}) (<>[] <%(b,a,c). b>)"
 | 
| 6470 | 56  | 
|
| 19740 | 57  | 
|
58  | 
lemma h_abs_is_abstraction:  | 
|
59  | 
"is_abstraction h_abs C_ioa A_ioa"  | 
|
60  | 
apply (unfold is_abstraction_def)  | 
|
61  | 
apply (rule conjI)  | 
|
62  | 
txt {* start states *}
 | 
|
63  | 
apply (simp (no_asm) add: h_abs_def starts_of_def C_ioa_def A_ioa_def)  | 
|
64  | 
txt {* step case *}
 | 
|
65  | 
apply (rule allI)+  | 
|
66  | 
apply (rule imp_conj_lemma)  | 
|
67  | 
apply (simp (no_asm) add: trans_of_def C_ioa_def A_ioa_def C_trans_def A_trans_def)  | 
|
68  | 
apply (induct_tac "a")  | 
|
69  | 
apply (simp (no_asm) add: h_abs_def)  | 
|
70  | 
done  | 
|
71  | 
||
72  | 
||
73  | 
lemma Enabled_implication:  | 
|
74  | 
    "!!s. Enabled A_ioa {INC} (h_abs s) ==> Enabled C_ioa {INC} s"
 | 
|
75  | 
apply (unfold Enabled_def enabled_def h_abs_def A_ioa_def C_ioa_def A_trans_def  | 
|
76  | 
C_trans_def trans_of_def)  | 
|
77  | 
apply auto  | 
|
78  | 
done  | 
|
79  | 
||
80  | 
||
81  | 
lemma h_abs_is_liveabstraction:  | 
|
82  | 
"is_live_abstraction h_abs (C_ioa, WF C_ioa {INC}) (A_ioa, WF A_ioa {INC})"
 | 
|
83  | 
apply (unfold is_live_abstraction_def)  | 
|
84  | 
apply auto  | 
|
85  | 
txt {* is_abstraction *}
 | 
|
86  | 
apply (rule h_abs_is_abstraction)  | 
|
87  | 
txt {* temp_weakening *}
 | 
|
88  | 
apply (tactic "abstraction_tac 1")  | 
|
89  | 
apply (erule Enabled_implication)  | 
|
90  | 
done  | 
|
91  | 
||
92  | 
||
93  | 
lemma TrivEx2_abstraction:  | 
|
94  | 
"validLIOA C_live_ioa (<>[] <%(n,a,m). n~=0>)"  | 
|
95  | 
apply (unfold C_live_ioa_def)  | 
|
96  | 
apply (rule AbsRuleT2)  | 
|
97  | 
apply (rule h_abs_is_liveabstraction)  | 
|
98  | 
apply (rule MC_result)  | 
|
99  | 
apply (tactic "abstraction_tac 1")  | 
|
100  | 
apply (simp add: h_abs_def)  | 
|
101  | 
done  | 
|
| 17244 | 102  | 
|
103  | 
end  |