| author | Cezary Kaliszyk <kaliszyk@in.tum.de> | 
| Tue, 27 Oct 2009 17:08:47 +0100 | |
| changeset 209 | 1e8e1b736586 | 
| parent 188 | b8485573548d | 
| child 217 | 9cc87d02190a | 
| permissions | -rw-r--r-- | 
| 0 | 1  | 
theory QuotScript  | 
2  | 
imports Main  | 
|
3  | 
begin  | 
|
4  | 
||
5  | 
definition  | 
|
6  | 
"EQUIV E \<equiv> \<forall>x y. E x y = (E x = E y)"  | 
|
7  | 
||
8  | 
definition  | 
|
9  | 
"REFL E \<equiv> \<forall>x. E x x"  | 
|
10  | 
||
11  | 
definition  | 
|
12  | 
"SYM E \<equiv> \<forall>x y. E x y \<longrightarrow> E y x"  | 
|
13  | 
||
14  | 
definition  | 
|
15  | 
"TRANS E \<equiv> \<forall>x y z. E x y \<and> E y z \<longrightarrow> E x z"  | 
|
16  | 
||
17  | 
lemma EQUIV_REFL_SYM_TRANS:  | 
|
18  | 
shows "EQUIV E = (REFL E \<and> SYM E \<and> TRANS E)"  | 
|
19  | 
unfolding EQUIV_def REFL_def SYM_def TRANS_def expand_fun_eq  | 
|
20  | 
by (blast)  | 
|
21  | 
||
22  | 
definition  | 
|
23  | 
"PART_EQUIV E \<equiv> (\<exists>x. E x x) \<and> (\<forall>x y. E x y = (E x x \<and> E y y \<and> (E x = E y)))"  | 
|
24  | 
||
25  | 
lemma EQUIV_IMP_PART_EQUIV:  | 
|
26  | 
assumes a: "EQUIV E"  | 
|
27  | 
shows "PART_EQUIV E"  | 
|
28  | 
using a unfolding EQUIV_def PART_EQUIV_def  | 
|
29  | 
by auto  | 
|
30  | 
||
31  | 
definition  | 
|
32  | 
"QUOTIENT E Abs Rep \<equiv> (\<forall>a. Abs (Rep a) = a) \<and>  | 
|
33  | 
(\<forall>a. E (Rep a) (Rep a)) \<and>  | 
|
34  | 
(\<forall>r s. E r s = (E r r \<and> E s s \<and> (Abs r = Abs s)))"  | 
|
35  | 
||
36  | 
lemma QUOTIENT_ABS_REP:  | 
|
37  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
38  | 
shows "Abs (Rep a) = a"  | 
|
39  | 
using a unfolding QUOTIENT_def  | 
|
40  | 
by simp  | 
|
41  | 
||
42  | 
lemma QUOTIENT_REP_REFL:  | 
|
43  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
44  | 
shows "E (Rep a) (Rep a)"  | 
|
45  | 
using a unfolding QUOTIENT_def  | 
|
46  | 
by blast  | 
|
47  | 
||
48  | 
lemma QUOTIENT_REL:  | 
|
49  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
50  | 
shows " E r s = (E r r \<and> E s s \<and> (Abs r = Abs s))"  | 
|
51  | 
using a unfolding QUOTIENT_def  | 
|
52  | 
by blast  | 
|
53  | 
||
54  | 
lemma QUOTIENT_REL_ABS:  | 
|
55  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
56  | 
shows "E r s \<Longrightarrow> Abs r = Abs s"  | 
|
57  | 
using a unfolding QUOTIENT_def  | 
|
58  | 
by blast  | 
|
59  | 
||
60  | 
lemma QUOTIENT_REL_ABS_EQ:  | 
|
61  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
62  | 
shows "E r r \<Longrightarrow> E s s \<Longrightarrow> E r s = (Abs r = Abs s)"  | 
|
63  | 
using a unfolding QUOTIENT_def  | 
|
64  | 
by blast  | 
|
65  | 
||
66  | 
lemma QUOTIENT_REL_REP:  | 
|
67  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
68  | 
shows "E (Rep a) (Rep b) = (a = b)"  | 
|
69  | 
using a unfolding QUOTIENT_def  | 
|
70  | 
by metis  | 
|
71  | 
||
72  | 
lemma QUOTIENT_REP_ABS:  | 
|
73  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
74  | 
shows "E r r \<Longrightarrow> E (Rep (Abs r)) r"  | 
|
75  | 
using a unfolding QUOTIENT_def  | 
|
76  | 
by blast  | 
|
77  | 
||
78  | 
lemma IDENTITY_EQUIV:  | 
|
79  | 
shows "EQUIV (op =)"  | 
|
80  | 
unfolding EQUIV_def  | 
|
81  | 
by auto  | 
|
82  | 
||
83  | 
lemma IDENTITY_QUOTIENT:  | 
|
| 
126
 
9cb8f9a59402
Partial simplification of the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
113 
diff
changeset
 | 
84  | 
shows "QUOTIENT (op =) id id"  | 
| 
 
9cb8f9a59402
Partial simplification of the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
113 
diff
changeset
 | 
85  | 
unfolding QUOTIENT_def id_def  | 
| 0 | 86  | 
by blast  | 
87  | 
||
88  | 
lemma QUOTIENT_SYM:  | 
|
89  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
90  | 
shows "SYM E"  | 
|
91  | 
using a unfolding QUOTIENT_def SYM_def  | 
|
92  | 
by metis  | 
|
93  | 
||
94  | 
lemma QUOTIENT_TRANS:  | 
|
95  | 
assumes a: "QUOTIENT E Abs Rep"  | 
|
96  | 
shows "TRANS E"  | 
|
97  | 
using a unfolding QUOTIENT_def TRANS_def  | 
|
98  | 
by metis  | 
|
99  | 
||
100  | 
fun  | 
|
| 
93
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
101  | 
prod_rel  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
102  | 
where  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
103  | 
"prod_rel r1 r2 = (\<lambda>(a,b) (c,d). r1 a c \<and> r2 b d)"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
104  | 
|
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
105  | 
fun  | 
| 
112
 
0d6d37d0589d
Progressing with the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
96 
diff
changeset
 | 
106  | 
fun_map  | 
| 0 | 107  | 
where  | 
108  | 
"fun_map f g h x = g (h (f x))"  | 
|
109  | 
||
| 
112
 
0d6d37d0589d
Progressing with the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
96 
diff
changeset
 | 
110  | 
|
| 0 | 111  | 
abbreviation  | 
| 
112
 
0d6d37d0589d
Progressing with the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
96 
diff
changeset
 | 
112  | 
fun_map_syn (infixr "--->" 55)  | 
| 0 | 113  | 
where  | 
| 
112
 
0d6d37d0589d
Progressing with the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
96 
diff
changeset
 | 
114  | 
"f ---> g \<equiv> fun_map f g"  | 
| 0 | 115  | 
|
116  | 
lemma FUN_MAP_I:  | 
|
| 
126
 
9cb8f9a59402
Partial simplification of the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
113 
diff
changeset
 | 
117  | 
shows "(id ---> id) = id"  | 
| 
 
9cb8f9a59402
Partial simplification of the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
113 
diff
changeset
 | 
118  | 
by (simp add: expand_fun_eq id_def)  | 
| 0 | 119  | 
|
120  | 
lemma IN_FUN:  | 
|
121  | 
shows "x \<in> ((f ---> g) s) = g (f x \<in> s)"  | 
|
122  | 
by (simp add: mem_def)  | 
|
123  | 
||
124  | 
fun  | 
|
125  | 
FUN_REL  | 
|
126  | 
where  | 
|
127  | 
"FUN_REL E1 E2 f g = (\<forall>x y. E1 x y \<longrightarrow> E2 (f x) (g y))"  | 
|
128  | 
||
129  | 
abbreviation  | 
|
| 
173
 
7cf227756e2a
Finally completely lift the previously lifted theorems + clean some old stuff
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
172 
diff
changeset
 | 
130  | 
  FUN_REL_syn ("_ ===> _")
 | 
| 0 | 131  | 
where  | 
132  | 
"E1 ===> E2 \<equiv> FUN_REL E1 E2"  | 
|
133  | 
||
134  | 
lemma FUN_REL_EQ:  | 
|
135  | 
"(op =) ===> (op =) = (op =)"  | 
|
136  | 
by (simp add: expand_fun_eq)  | 
|
137  | 
||
138  | 
lemma FUN_QUOTIENT:  | 
|
139  | 
assumes q1: "QUOTIENT R1 abs1 rep1"  | 
|
140  | 
and q2: "QUOTIENT R2 abs2 rep2"  | 
|
141  | 
shows "QUOTIENT (R1 ===> R2) (rep1 ---> abs2) (abs1 ---> rep2)"  | 
|
142  | 
proof -  | 
|
143  | 
have "\<forall>a. (rep1 ---> abs2) ((abs1 ---> rep2) a) = a"  | 
|
144  | 
apply(simp add: expand_fun_eq)  | 
|
145  | 
using q1 q2  | 
|
146  | 
apply(simp add: QUOTIENT_def)  | 
|
147  | 
done  | 
|
148  | 
moreover  | 
|
149  | 
have "\<forall>a. (R1 ===> R2) ((abs1 ---> rep2) a) ((abs1 ---> rep2) a)"  | 
|
150  | 
apply(auto)  | 
|
151  | 
using q1 q2 unfolding QUOTIENT_def  | 
|
152  | 
apply(metis)  | 
|
153  | 
done  | 
|
154  | 
moreover  | 
|
155  | 
have "\<forall>r s. (R1 ===> R2) r s = ((R1 ===> R2) r r \<and> (R1 ===> R2) s s \<and>  | 
|
156  | 
(rep1 ---> abs2) r = (rep1 ---> abs2) s)"  | 
|
157  | 
apply(auto simp add: expand_fun_eq)  | 
|
158  | 
using q1 q2 unfolding QUOTIENT_def  | 
|
159  | 
apply(metis)  | 
|
160  | 
using q1 q2 unfolding QUOTIENT_def  | 
|
161  | 
apply(metis)  | 
|
162  | 
using q1 q2 unfolding QUOTIENT_def  | 
|
163  | 
apply(metis)  | 
|
164  | 
using q1 q2 unfolding QUOTIENT_def  | 
|
165  | 
apply(metis)  | 
|
166  | 
done  | 
|
167  | 
ultimately  | 
|
168  | 
show "QUOTIENT (R1 ===> R2) (rep1 ---> abs2) (abs1 ---> rep2)"  | 
|
169  | 
unfolding QUOTIENT_def by blast  | 
|
170  | 
qed  | 
|
171  | 
||
172  | 
definition  | 
|
173  | 
Respects  | 
|
174  | 
where  | 
|
175  | 
"Respects R x \<equiv> (R x x)"  | 
|
176  | 
||
177  | 
lemma IN_RESPECTS:  | 
|
178  | 
shows "(x \<in> Respects R) = R x x"  | 
|
179  | 
unfolding mem_def Respects_def by simp  | 
|
180  | 
||
181  | 
lemma RESPECTS_THM:  | 
|
182  | 
shows "Respects (R1 ===> R2) f = (\<forall>x y. R1 x y \<longrightarrow> R2 (f x) (f y))"  | 
|
183  | 
unfolding Respects_def  | 
|
184  | 
by (simp add: expand_fun_eq)  | 
|
185  | 
||
186  | 
lemma RESPECTS_MP:  | 
|
187  | 
assumes a: "Respects (R1 ===> R2) f"  | 
|
188  | 
and b: "R1 x y"  | 
|
189  | 
shows "R2 (f x) (f y)"  | 
|
190  | 
using a b unfolding Respects_def  | 
|
191  | 
by simp  | 
|
192  | 
||
193  | 
lemma RESPECTS_REP_ABS:  | 
|
194  | 
assumes a: "QUOTIENT R1 Abs1 Rep1"  | 
|
195  | 
and b: "Respects (R1 ===> R2) f"  | 
|
196  | 
and c: "R1 x x"  | 
|
197  | 
shows "R2 (f (Rep1 (Abs1 x))) (f x)"  | 
|
198  | 
using a b[simplified RESPECTS_THM] c unfolding QUOTIENT_def  | 
|
199  | 
by blast  | 
|
200  | 
||
201  | 
lemma RESPECTS_o:  | 
|
202  | 
assumes a: "Respects (R2 ===> R3) f"  | 
|
203  | 
and b: "Respects (R1 ===> R2) g"  | 
|
204  | 
shows "Respects (R1 ===> R3) (f o g)"  | 
|
205  | 
using a b unfolding Respects_def  | 
|
206  | 
by simp  | 
|
207  | 
||
208  | 
(*  | 
|
209  | 
definition  | 
|
210  | 
"RES_EXISTS_EQUIV R P \<equiv> (\<exists>x \<in> Respects R. P x) \<and>  | 
|
211  | 
(\<forall>x\<in> Respects R. \<forall>y\<in> Respects R. P x \<and> P y \<longrightarrow> R x y)"  | 
|
212  | 
*)  | 
|
213  | 
||
214  | 
lemma FUN_REL_EQ_REL:  | 
|
215  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
216  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
217  | 
shows "(R1 ===> R2) f g = ((Respects (R1 ===> R2) f) \<and> (Respects (R1 ===> R2) g)  | 
|
218  | 
\<and> ((Rep1 ---> Abs2) f = (Rep1 ---> Abs2) g))"  | 
|
219  | 
using FUN_QUOTIENT[OF q1 q2] unfolding Respects_def QUOTIENT_def expand_fun_eq  | 
|
220  | 
by blast  | 
|
221  | 
||
222  | 
(* q1 and q2 not used; see next lemma *)  | 
|
223  | 
lemma FUN_REL_MP:  | 
|
224  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
225  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
226  | 
shows "(R1 ===> R2) f g \<Longrightarrow> R1 x y \<Longrightarrow> R2 (f x) (g y)"  | 
|
227  | 
by simp  | 
|
228  | 
||
229  | 
lemma FUN_REL_IMP:  | 
|
230  | 
shows "(R1 ===> R2) f g \<Longrightarrow> R1 x y \<Longrightarrow> R2 (f x) (g y)"  | 
|
231  | 
by simp  | 
|
232  | 
||
233  | 
lemma FUN_REL_EQUALS:  | 
|
234  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
235  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
236  | 
and r1: "Respects (R1 ===> R2) f"  | 
|
237  | 
and r2: "Respects (R1 ===> R2) g"  | 
|
238  | 
shows "((Rep1 ---> Abs2) f = (Rep1 ---> Abs2) g) = (\<forall>x y. R1 x y \<longrightarrow> R2 (f x) (g y))"  | 
|
239  | 
apply(rule_tac iffI)  | 
|
240  | 
using FUN_QUOTIENT[OF q1 q2] r1 r2 unfolding QUOTIENT_def Respects_def  | 
|
241  | 
apply(metis FUN_REL_IMP)  | 
|
242  | 
using r1 unfolding Respects_def expand_fun_eq  | 
|
243  | 
apply(simp (no_asm_use))  | 
|
244  | 
apply(metis QUOTIENT_REL[OF q2] QUOTIENT_REL_REP[OF q1])  | 
|
245  | 
done  | 
|
246  | 
||
247  | 
(* ask Peter: FUN_REL_IMP used twice *)  | 
|
248  | 
lemma FUN_REL_IMP2:  | 
|
249  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
250  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
251  | 
and r1: "Respects (R1 ===> R2) f"  | 
|
252  | 
and r2: "Respects (R1 ===> R2) g"  | 
|
253  | 
and a: "(Rep1 ---> Abs2) f = (Rep1 ---> Abs2) g"  | 
|
254  | 
shows "R1 x y \<Longrightarrow> R2 (f x) (g y)"  | 
|
255  | 
using q1 q2 r1 r2 a  | 
|
256  | 
by (simp add: FUN_REL_EQUALS)  | 
|
257  | 
||
258  | 
lemma EQUALS_PRS:  | 
|
259  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
260  | 
shows "(x = y) = R (Rep x) (Rep y)"  | 
|
261  | 
by (simp add: QUOTIENT_REL_REP[OF q])  | 
|
262  | 
||
263  | 
lemma EQUALS_RSP:  | 
|
264  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
265  | 
and a: "R x1 x2" "R y1 y2"  | 
|
266  | 
shows "R x1 y1 = R x2 y2"  | 
|
267  | 
using QUOTIENT_SYM[OF q] QUOTIENT_TRANS[OF q] unfolding SYM_def TRANS_def  | 
|
268  | 
using a by blast  | 
|
269  | 
||
270  | 
lemma LAMBDA_PRS:  | 
|
271  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
272  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
273  | 
shows "(\<lambda>x. f x) = (Rep1 ---> Abs2) (\<lambda>x. Rep2 (f (Abs1 x)))"  | 
|
274  | 
unfolding expand_fun_eq  | 
|
275  | 
using QUOTIENT_ABS_REP[OF q1] QUOTIENT_ABS_REP[OF q2]  | 
|
276  | 
by simp  | 
|
277  | 
||
278  | 
lemma LAMBDA_PRS1:  | 
|
279  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
280  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
281  | 
shows "(\<lambda>x. f x) = (Rep1 ---> Abs2) (\<lambda>x. (Abs1 ---> Rep2) f x)"  | 
|
282  | 
unfolding expand_fun_eq  | 
|
283  | 
by (subst LAMBDA_PRS[OF q1 q2]) (simp)  | 
|
284  | 
||
285  | 
(* Ask Peter: assumption q1 and q2 not used and lemma is the 'identity' *)  | 
|
286  | 
lemma LAMBDA_RSP:  | 
|
287  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
288  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
289  | 
and a: "(R1 ===> R2) f1 f2"  | 
|
290  | 
shows "(R1 ===> R2) (\<lambda>x. f1 x) (\<lambda>y. f2 y)"  | 
|
291  | 
by (rule a)  | 
|
292  | 
||
293  | 
(* ASK Peter about next four lemmas in quotientScript  | 
|
294  | 
lemma ABSTRACT_PRS:  | 
|
295  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
296  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
297  | 
shows "f = (Rep1 ---> Abs2) ???"  | 
|
298  | 
*)  | 
|
299  | 
||
300  | 
lemma LAMBDA_REP_ABS_RSP:  | 
|
301  | 
assumes r1: "\<And>r r'. R1 r r' \<Longrightarrow>R1 r (Rep1 (Abs1 r'))"  | 
|
302  | 
and r2: "\<And>r r'. R2 r r' \<Longrightarrow>R2 r (Rep2 (Abs2 r'))"  | 
|
303  | 
shows "(R1 ===> R2) f1 f2 \<Longrightarrow> (R1 ===> R2) f1 ((Abs1 ---> Rep2) ((Rep1 ---> Abs2) f2))"  | 
|
304  | 
using r1 r2 by auto  | 
|
305  | 
||
306  | 
lemma REP_ABS_RSP:  | 
|
307  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
308  | 
and a: "R x1 x2"  | 
|
309  | 
shows "R x1 (Rep (Abs x2))"  | 
|
| 
113
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
310  | 
and "R (Rep (Abs x1)) x2"  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
311  | 
proof -  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
312  | 
show "R x1 (Rep (Abs x2))"  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
313  | 
using q a by (metis QUOTIENT_REL[OF q] QUOTIENT_ABS_REP[OF q] QUOTIENT_REP_REFL[OF q])  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
314  | 
next  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
315  | 
show "R (Rep (Abs x1)) x2"  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
316  | 
using q a by (metis QUOTIENT_REL[OF q] QUOTIENT_ABS_REP[OF q] QUOTIENT_REP_REFL[OF q] QUOTIENT_SYM[of q])  | 
| 
 
e3a963e6418b
Symmetric version of REP_ABS_RSP
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
112 
diff
changeset
 | 
317  | 
qed  | 
| 0 | 318  | 
|
319  | 
(* ----------------------------------------------------- *)  | 
|
320  | 
(* Quantifiers: FORALL, EXISTS, EXISTS_UNIQUE, *)  | 
|
321  | 
(* RES_FORALL, RES_EXISTS, RES_EXISTS_EQUIV *)  | 
|
322  | 
(* ----------------------------------------------------- *)  | 
|
323  | 
||
324  | 
(* what is RES_FORALL *)  | 
|
325  | 
(*--`!R (abs:'a -> 'b) rep. QUOTIENT R abs rep ==>  | 
|
326  | 
!f. $! f = RES_FORALL (respects R) ((abs --> I) f)`--*)  | 
|
327  | 
(*as peter here *)  | 
|
328  | 
||
329  | 
(* bool theory: COND, LET *)  | 
|
330  | 
||
331  | 
lemma IF_PRS:  | 
|
332  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
333  | 
shows "If a b c = Abs (If a (Rep b) (Rep c))"  | 
|
334  | 
using QUOTIENT_ABS_REP[OF q] by auto  | 
|
335  | 
||
336  | 
(* ask peter: no use of q *)  | 
|
337  | 
lemma IF_RSP:  | 
|
338  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
339  | 
and a: "a1 = a2" "R b1 b2" "R c1 c2"  | 
|
340  | 
shows "R (If a1 b1 c1) (If a2 b2 c2)"  | 
|
341  | 
using a by auto  | 
|
342  | 
||
343  | 
lemma LET_PRS:  | 
|
344  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
345  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
346  | 
shows "Let x f = Abs2 (Let (Rep1 x) ((Abs1 ---> Rep2) f))"  | 
|
347  | 
using QUOTIENT_ABS_REP[OF q1] QUOTIENT_ABS_REP[OF q2] by auto  | 
|
348  | 
||
349  | 
lemma LET_RSP:  | 
|
350  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
351  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
352  | 
and a1: "(R1 ===> R2) f g"  | 
|
353  | 
and a2: "R1 x y"  | 
|
354  | 
shows "R2 (Let x f) (Let y g)"  | 
|
355  | 
using FUN_REL_MP[OF q1 q2 a1] a2  | 
|
356  | 
by auto  | 
|
357  | 
||
358  | 
||
359  | 
(* ask peter what are literal_case *)  | 
|
360  | 
(* literal_case_PRS *)  | 
|
361  | 
(* literal_case_RSP *)  | 
|
362  | 
||
363  | 
||
364  | 
(* FUNCTION APPLICATION *)  | 
|
365  | 
||
366  | 
lemma APPLY_PRS:  | 
|
367  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
368  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
369  | 
shows "f x = Abs2 (((Abs1 ---> Rep2) f) (Rep1 x))"  | 
|
370  | 
using QUOTIENT_ABS_REP[OF q1] QUOTIENT_ABS_REP[OF q2] by auto  | 
|
371  | 
||
372  | 
(* ask peter: no use of q1 q2 *)  | 
|
373  | 
lemma APPLY_RSP:  | 
|
374  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
375  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
376  | 
and a: "(R1 ===> R2) f g" "R1 x y"  | 
|
377  | 
shows "R2 (f x) (g y)"  | 
|
378  | 
using a by (rule FUN_REL_IMP)  | 
|
379  | 
||
380  | 
||
381  | 
(* combinators: I, K, o, C, W *)  | 
|
382  | 
||
383  | 
lemma I_PRS:  | 
|
384  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
| 
126
 
9cb8f9a59402
Partial simplification of the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
113 
diff
changeset
 | 
385  | 
shows "id e = Abs (id (Rep e))"  | 
| 0 | 386  | 
using QUOTIENT_ABS_REP[OF q] by auto  | 
387  | 
||
388  | 
lemma I_RSP:  | 
|
389  | 
assumes q: "QUOTIENT R Abs Rep"  | 
|
390  | 
and a: "R e1 e2"  | 
|
| 
126
 
9cb8f9a59402
Partial simplification of the proof
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
113 
diff
changeset
 | 
391  | 
shows "R (id e1) (id e2)"  | 
| 0 | 392  | 
using a by auto  | 
393  | 
||
394  | 
lemma o_PRS:  | 
|
395  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
396  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
397  | 
and q3: "QUOTIENT R3 Abs3 Rep3"  | 
|
398  | 
shows "f o g = (Rep1 ---> Abs3) (((Abs2 ---> Rep3) f) o ((Abs1 ---> Rep2) g))"  | 
|
399  | 
using QUOTIENT_ABS_REP[OF q1] QUOTIENT_ABS_REP[OF q2] QUOTIENT_ABS_REP[OF q3]  | 
|
400  | 
unfolding o_def expand_fun_eq  | 
|
401  | 
by simp  | 
|
402  | 
||
403  | 
lemma o_RSP:  | 
|
404  | 
assumes q1: "QUOTIENT R1 Abs1 Rep1"  | 
|
405  | 
and q2: "QUOTIENT R2 Abs2 Rep2"  | 
|
406  | 
and q3: "QUOTIENT R3 Abs3 Rep3"  | 
|
407  | 
and a1: "(R2 ===> R3) f1 f2"  | 
|
408  | 
and a2: "(R1 ===> R2) g1 g2"  | 
|
409  | 
shows "(R1 ===> R3) (f1 o g1) (f2 o g2)"  | 
|
410  | 
using a1 a2 unfolding o_def expand_fun_eq  | 
|
411  | 
by (auto)  | 
|
412  | 
||
| 
96
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
413  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
414  | 
(* TODO: Put the following lemmas in proper places *)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
415  | 
|
| 
93
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
416  | 
lemma equiv_res_forall:  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
417  | 
fixes P :: "'a \<Rightarrow> bool"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
418  | 
assumes a: "EQUIV E"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
419  | 
shows "Ball (Respects E) P = (All P)"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
420  | 
using a by (metis EQUIV_def IN_RESPECTS a)  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
421  | 
|
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
422  | 
lemma equiv_res_exists:  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
423  | 
fixes P :: "'a \<Rightarrow> bool"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
424  | 
assumes a: "EQUIV E"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
425  | 
shows "Bex (Respects E) P = (Ex P)"  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
426  | 
using a by (metis EQUIV_def IN_RESPECTS a)  | 
| 
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
427  | 
|
| 
96
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
428  | 
lemma FORALL_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
429  | 
assumes a: "!x :: 'a. (P x --> Q x)"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
430  | 
and b: "All P"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
431  | 
shows "All Q"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
432  | 
using a b by (metis)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
433  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
434  | 
lemma EXISTS_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
435  | 
assumes a: "!x :: 'a. (P x --> Q x)"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
436  | 
and b: "Ex P"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
437  | 
shows "Ex Q"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
438  | 
using a b by (metis)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
439  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
440  | 
lemma RES_FORALL_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
441  | 
assumes a: "!x :: 'a. (R x --> P x --> Q x)"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
442  | 
and b: "Ball R P"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
443  | 
shows "Ball R Q"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
444  | 
using a b by (metis COMBC_def Collect_def Collect_mem_eq)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
445  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
446  | 
lemma RES_EXISTS_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
447  | 
assumes a: "!x :: 'a. (R x --> P x --> Q x)"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
448  | 
and b: "Bex R P"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
449  | 
shows "Bex R Q"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
450  | 
using a b by (metis COMBC_def Collect_def Collect_mem_eq)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
451  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
452  | 
lemma LEFT_RES_FORALL_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
453  | 
assumes a: "!x. (R x \<and> (Q x --> P x))"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
454  | 
shows "Ball R Q ==> All P"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
455  | 
using a  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
456  | 
apply (metis COMBC_def Collect_def Collect_mem_eq a)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
457  | 
done  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
458  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
459  | 
lemma RIGHT_RES_FORALL_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
460  | 
assumes a: "!x :: 'a. (R x --> P x --> Q x)"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
461  | 
shows "All P ==> Ball R Q"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
462  | 
using a  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
463  | 
apply (metis COMBC_def Collect_def Collect_mem_eq a)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
464  | 
done  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
465  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
466  | 
lemma LEFT_RES_EXISTS_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
467  | 
assumes a: "!x :: 'a. (R x --> Q x --> P x)"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
468  | 
shows "Bex R Q ==> Ex P"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
469  | 
using a by (metis COMBC_def Collect_def Collect_mem_eq)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
470  | 
|
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
471  | 
lemma RIGHT_RES_EXISTS_REGULAR:  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
472  | 
assumes a: "!x :: 'a. (R x \<and> (P x --> Q x))"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
473  | 
shows "Ex P \<Longrightarrow> Bex R Q"  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
474  | 
using a by (metis COMBC_def Collect_def Collect_mem_eq)  | 
| 
 
4da714704611
A number of lemmas for REGULARIZE_TAC and regularizing card1.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
95 
diff
changeset
 | 
475  | 
|
| 162 | 476  | 
(* TODO: Add similar *)  | 
| 
153
 
0288dd5b7ed4
The problems with 'abs' term.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
126 
diff
changeset
 | 
477  | 
lemma RES_FORALL_RSP:  | 
| 
 
0288dd5b7ed4
The problems with 'abs' term.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
126 
diff
changeset
 | 
478  | 
shows "\<And>f g. (R ===> (op =)) f g ==>  | 
| 
 
0288dd5b7ed4
The problems with 'abs' term.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
126 
diff
changeset
 | 
479  | 
(Ball (Respects R) f = Ball (Respects R) g)"  | 
| 155 | 480  | 
apply (simp add: FUN_REL.simps Ball_def IN_RESPECTS)  | 
481  | 
done  | 
|
| 
153
 
0288dd5b7ed4
The problems with 'abs' term.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
126 
diff
changeset
 | 
482  | 
|
| 
171
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
483  | 
lemma RES_EXISTS_RSP:  | 
| 
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
484  | 
shows "\<And>f g. (R ===> (op =)) f g ==>  | 
| 
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
485  | 
(Bex (Respects R) f = Bex (Respects R) g)"  | 
| 
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
486  | 
apply (simp add: FUN_REL.simps Bex_def IN_RESPECTS)  | 
| 
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
487  | 
done  | 
| 
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
488  | 
|
| 
188
 
b8485573548d
Finished COND_PRS proof.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
187 
diff
changeset
 | 
489  | 
|
| 162 | 490  | 
lemma FORALL_PRS:  | 
491  | 
assumes a: "QUOTIENT R absf repf"  | 
|
| 
183
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
492  | 
shows "All f = Ball (Respects R) ((absf ---> id) f)"  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
493  | 
using a  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
494  | 
unfolding QUOTIENT_def  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
495  | 
by (metis IN_RESPECTS fun_map.simps id_apply)  | 
| 162 | 496  | 
|
| 
171
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
497  | 
lemma EXISTS_PRS:  | 
| 
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
498  | 
assumes a: "QUOTIENT R absf repf"  | 
| 
183
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
499  | 
shows "Ex f = Bex (Respects R) ((absf ---> id) f)"  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
500  | 
using a  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
501  | 
unfolding QUOTIENT_def  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
502  | 
by (metis COMBC_def Collect_def Collect_mem_eq IN_RESPECTS fun_map.simps id_apply mem_def)  | 
| 187 | 503  | 
|
504  | 
lemma COND_PRS:  | 
|
505  | 
assumes a: "QUOTIENT R absf repf"  | 
|
506  | 
shows "(if a then b else c) = absf (if a then repf b else repf c)"  | 
|
| 
188
 
b8485573548d
Finished COND_PRS proof.
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
187 
diff
changeset
 | 
507  | 
using a unfolding QUOTIENT_def by auto  | 
| 187 | 508  | 
|
509  | 
(* These are the fixed versions, general ones need to be proved. *)  | 
|
510  | 
lemma ho_all_prs:  | 
|
| 
183
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
511  | 
shows "op = ===> op = ===> op = All All"  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
512  | 
by auto  | 
| 
171
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
513  | 
|
| 
183
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
514  | 
lemma ho_ex_prs:  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
515  | 
shows "op = ===> op = ===> op = Ex Ex"  | 
| 
 
6acf9e001038
proved the two lemmas in QuotScript (reformulated them without leading forall)
 
Christian Urban <urbanc@in.tum.de> 
parents: 
173 
diff
changeset
 | 
516  | 
by auto  | 
| 
171
 
13aab4c59096
More infrastructure for automatic lifting of theorems lifted before
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
166 
diff
changeset
 | 
517  | 
|
| 
93
 
ec29be471518
Manually regularized list_induct2
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
0 
diff
changeset
 | 
518  | 
end  | 
| 
95
 
8c3a35da4560
Proving the proper RepAbs version
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
93 
diff
changeset
 | 
519  |