11479
|
1 |
(* Title: HOL/UNITY/State.ML
|
|
2 |
ID: $Id$
|
|
3 |
Author: Sidi O Ehmety, Computer Laboratory
|
|
4 |
Copyright 2001 University of Cambridge
|
|
5 |
|
|
6 |
Formalizes UNITY-program states.
|
|
7 |
*)
|
12195
|
8 |
AddIffs [some_assume];
|
11479
|
9 |
|
12195
|
10 |
AddIs var.intrs;
|
|
11 |
Addsimps var.intrs;
|
11479
|
12 |
|
12195
|
13 |
Goalw [st_set_def] "st_set({x:state. P(x)})";
|
|
14 |
by Auto_tac;
|
|
15 |
qed "st_set_Collect";
|
|
16 |
AddIffs [st_set_Collect];
|
11479
|
17 |
|
12195
|
18 |
Goalw [st_set_def] "st_set(0)";
|
|
19 |
by (Simp_tac 1);
|
|
20 |
qed "st_set_0";
|
|
21 |
AddIffs [st_set_0];
|
11479
|
22 |
|
12195
|
23 |
Goalw [st_set_def] "st_set(state)";
|
|
24 |
by (Simp_tac 1);
|
|
25 |
qed "st_set_state";
|
|
26 |
AddIffs [st_set_state];
|
11479
|
27 |
|
12195
|
28 |
(* Union *)
|
11479
|
29 |
|
12195
|
30 |
Goalw [st_set_def]
|
|
31 |
"st_set(A Un B) <-> st_set(A) & st_set(B)";
|
11479
|
32 |
by Auto_tac;
|
12195
|
33 |
qed "st_set_Un_iff";
|
|
34 |
AddIffs [st_set_Un_iff];
|
11479
|
35 |
|
12195
|
36 |
Goalw [st_set_def]
|
|
37 |
"st_set(Union(S)) <-> (ALL A:S. st_set(A))";
|
|
38 |
by Auto_tac;
|
|
39 |
qed "st_set_Union_iff";
|
|
40 |
AddIffs [st_set_Union_iff];
|
11479
|
41 |
|
12195
|
42 |
(* Intersection *)
|
11479
|
43 |
|
12195
|
44 |
Goalw [st_set_def]
|
|
45 |
"st_set(A) | st_set(B) ==> st_set(A Int B)";
|
|
46 |
by Auto_tac;
|
|
47 |
qed "st_set_Int";
|
|
48 |
AddSIs [st_set_Int];
|
11479
|
49 |
|
12195
|
50 |
Goalw [st_set_def, Inter_def]
|
|
51 |
"(S=0) | (EX A:S. st_set(A)) ==> st_set(Inter(S))";
|
|
52 |
by Auto_tac;
|
|
53 |
qed "st_set_Inter";
|
|
54 |
AddSIs [st_set_Inter];
|
11479
|
55 |
|
12195
|
56 |
(* Diff *)
|
|
57 |
Goalw [st_set_def]
|
|
58 |
"st_set(A) ==> st_set(A - B)";
|
11479
|
59 |
by Auto_tac;
|
12195
|
60 |
qed "st_set_DiffI";
|
|
61 |
AddSIs [st_set_DiffI];
|
11479
|
62 |
|
|
63 |
Goal "{s:state. P(s)} Int state = {s:state. P(s)}";
|
|
64 |
by Auto_tac;
|
|
65 |
qed "Collect_Int_state";
|
|
66 |
|
|
67 |
Goal "state Int {s:state. P(s)} = {s:state. P(s)}";
|
|
68 |
by Auto_tac;
|
12195
|
69 |
qed "state_Int_Collect";
|
|
70 |
AddIffs [Collect_Int_state, state_Int_Collect];
|
|
71 |
|
|
72 |
(* Introduction and destruction rules for st_set *)
|
|
73 |
|
|
74 |
Goalw [st_set_def]
|
|
75 |
"A <= state ==> st_set(A)";
|
|
76 |
by (assume_tac 1);
|
|
77 |
qed "st_setI";
|
11479
|
78 |
|
12195
|
79 |
Goalw [st_set_def]
|
|
80 |
"st_set(A) ==> A<=state";
|
|
81 |
by (assume_tac 1);
|
|
82 |
qed "st_setD";
|
|
83 |
|
|
84 |
Goalw [st_set_def]
|
|
85 |
"[| st_set(A); B<=A |] ==> st_set(B)";
|
|
86 |
by Auto_tac;
|
|
87 |
qed "st_set_subset";
|
11479
|
88 |
|
|
89 |
|
|
90 |
|