| author | krauss | 
| Tue, 02 Aug 2011 10:03:12 +0200 | |
| changeset 44011 | f67c93f52d13 | 
| parent 43787 | 5be84619e4d4 | 
| child 44633 | 8a2fd7418435 | 
| permissions | -rw-r--r-- | 
| 17322 | 1  | 
(* Title: HOL/Import/HOLLightCompat.thy  | 
| 41589 | 2  | 
Author: Steven Obua and Sebastian Skalberg, TU Muenchen  | 
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
3  | 
Author: Cezary Kaliszyk  | 
| 17322 | 4  | 
*)  | 
5  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
6  | 
theory HOLLightCompat  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
7  | 
imports Main Fact Parity "~~/src/HOL/Library/Infinite_Set"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
8  | 
HOLLightList HOLLightReal HOLLightInt HOL4Setup  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
9  | 
begin  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
10  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
11  | 
(* list *)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
12  | 
lemmas [hol4rew] = list_el_def member_def list_mem_def  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
13  | 
(* int *)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
14  | 
lemmas [hol4rew] = int_coprime.simps int_gcd.simps hl_mod_def hl_div_def int_mod_def eqeq_def  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
15  | 
(* real *)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
16  | 
lemma [hol4rew]:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
17  | 
"real (0::nat) = 0" "real (1::nat) = 1" "real (2::nat) = 2"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
18  | 
by simp_all  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
19  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
20  | 
lemma one:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
21  | 
"\<forall>v. v = ()"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
22  | 
by simp  | 
| 17322 | 23  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
24  | 
lemma num_Axiom:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
25  | 
"\<forall>e f. \<exists>!fn. fn 0 = e \<and> (\<forall>n. fn (Suc n) = f (fn n) n)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
26  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
27  | 
apply (rule_tac a="nat_rec e (%n e. f e n)" in ex1I)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
28  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
29  | 
apply (simp add: fun_eq_iff)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
30  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
31  | 
apply (induct_tac xa)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
32  | 
apply simp_all  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
33  | 
done  | 
| 17322 | 34  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
35  | 
lemma SUC_INJ:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
36  | 
"\<forall>m n. Suc m = Suc n \<longleftrightarrow> m = n"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
37  | 
by auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
38  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
39  | 
lemma PAIR:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
40  | 
"(fst x, snd x) = x"  | 
| 17322 | 41  | 
by simp  | 
42  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
43  | 
lemma EXISTS_UNIQUE_THM:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
44  | 
"(Ex1 P) = (Ex P & (\<forall>x y. P x & P y --> (x = y)))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
45  | 
by auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
46  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
47  | 
lemma DEF__star_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
48  | 
"op * = (SOME mult. (\<forall>n. mult 0 n = 0) \<and> (\<forall>m n. mult (Suc m) n = mult m n + n))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
49  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
50  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
51  | 
apply (rule ext)+  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
52  | 
apply (induct_tac x)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
53  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
54  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
55  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
56  | 
lemma DEF__slash__backslash_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
57  | 
"(t1 \<and> t2) = ((\<lambda>f. f t1 t2 :: bool) = (\<lambda>f. f True True))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
58  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
59  | 
by (intro iffI, simp_all) (erule allE[of _ "(%a b. a \<and> b)"], simp)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
60  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
61  | 
lemma DEF__lessthan__equal_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
62  | 
"op \<le> = (SOME u. (\<forall>m. u m 0 = (m = 0)) \<and> (\<forall>m n. u m (Suc n) = (m = Suc n \<or> u m n)))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
63  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
64  | 
apply auto[1]  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
65  | 
apply (simp add: fun_eq_iff)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
66  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
67  | 
apply (induct_tac xa)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
68  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
69  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
70  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
71  | 
lemma DEF__lessthan_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
72  | 
"op < = (SOME u. (\<forall>m. u m 0 = False) \<and> (\<forall>m n. u m (Suc n) = (m = n \<or> u m n)))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
73  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
74  | 
apply auto[1]  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
75  | 
apply (simp add: fun_eq_iff)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
76  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
77  | 
apply (induct_tac xa)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
78  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
79  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
80  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
81  | 
lemma DEF__greaterthan__equal_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
82  | 
"(op \<ge>) = (%u ua. ua \<le> u)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
83  | 
by (simp)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
84  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
85  | 
lemma DEF__greaterthan_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
86  | 
"(op >) = (%u ua. ua < u)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
87  | 
by (simp)  | 
| 17322 | 88  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
89  | 
lemma DEF__equal__equal__greaterthan_:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
90  | 
"(t1 \<longrightarrow> t2) = ((t1 \<and> t2) = t1)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
91  | 
by auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
92  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
93  | 
lemma DEF_WF:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
94  | 
"wfP = (\<lambda>u. \<forall>P. (\<exists>x. P x) \<longrightarrow> (\<exists>x. P x \<and> (\<forall>y. u y x \<longrightarrow> \<not> P y)))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
95  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
96  | 
apply (intro allI, rule, intro allI impI, elim exE)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
97  | 
apply (drule_tac wfE_min[to_pred, unfolded mem_def])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
98  | 
apply assumption  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
99  | 
prefer 2  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
100  | 
apply assumption  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
101  | 
apply auto[1]  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
102  | 
apply (intro wfI_min[to_pred, unfolded mem_def])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
103  | 
apply (drule_tac x="Q" in spec)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
104  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
105  | 
apply (rule_tac x="xb" in bexI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
106  | 
apply (auto simp add: mem_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
107  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
108  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
109  | 
lemma DEF_UNIV: "UNIV = (%x. True)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
110  | 
by (auto simp add: mem_def)  | 
| 17322 | 111  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
112  | 
lemma DEF_UNIONS:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
113  | 
  "Sup = (\<lambda>u. {ua. \<exists>x. (\<exists>ua. ua \<in> u \<and> x \<in> ua) \<and> ua = x})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
114  | 
by (simp add: fun_eq_iff Collect_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
115  | 
(metis UnionE complete_lattice_class.Sup_upper mem_def predicate1D)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
116  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
117  | 
lemma DEF_UNION:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
118  | 
  "op \<union> = (\<lambda>u ua. {ub. \<exists>x. (x \<in> u \<or> x \<in> ua) \<and> ub = x})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
119  | 
by (auto simp add: mem_def fun_eq_iff Collect_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
120  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
121  | 
lemma DEF_SUBSET: "op \<subseteq> = (\<lambda>u ua. \<forall>x. x \<in> u \<longrightarrow> x \<in> ua)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
122  | 
by (metis set_rev_mp subsetI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
123  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
124  | 
lemma DEF_SND:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
125  | 
"snd = (\<lambda>p. SOME x. EX y. p = (y, x))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
126  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
127  | 
by (rule someI2) (auto intro: snd_conv[symmetric] someI2)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
128  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
129  | 
definition [simp, hol4rew]: "SETSPEC x P y \<longleftrightarrow> P & x = y"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
130  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
131  | 
lemma DEF_PSUBSET: "op \<subset> = (\<lambda>u ua. u \<subseteq> ua & u \<noteq> ua)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
132  | 
by (auto simp add: mem_def fun_eq_iff)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
133  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
134  | 
definition [hol4rew]: "Pred n = n - (Suc 0)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
135  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
136  | 
lemma DEF_PRE: "Pred = (SOME PRE. PRE 0 = 0 & (\<forall>n. PRE (Suc n) = n))"  | 
| 17322 | 137  | 
apply (rule some_equality[symmetric])  | 
138  | 
apply (simp add: Pred_def)  | 
|
139  | 
apply (rule ext)  | 
|
140  | 
apply (induct_tac x)  | 
|
141  | 
apply (auto simp add: Pred_def)  | 
|
142  | 
done  | 
|
143  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
144  | 
lemma DEF_ONE_ONE:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
145  | 
"inj = (\<lambda>u. \<forall>x1 x2. u x1 = u x2 \<longrightarrow> x1 = x2)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
146  | 
by (simp add: inj_on_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
147  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
148  | 
definition ODD'[hol4rew]: "(ODD :: nat \<Rightarrow> bool) = odd"  | 
| 17322 | 149  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
150  | 
lemma DEF_ODD:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
151  | 
"odd = (SOME ODD. ODD 0 = False \<and> (\<forall>n. ODD (Suc n) = (\<not> ODD n)))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
152  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
153  | 
apply simp  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
154  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
155  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
156  | 
apply (induct_tac x)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
157  | 
apply simp_all  | 
| 17322 | 158  | 
done  | 
159  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
160  | 
definition [hol4rew, simp]: "NUMERAL (x :: nat) = x"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
161  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
162  | 
lemma DEF_MOD:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
163  | 
"op mod = (SOME r. \<forall>m n. if n = (0 :: nat) then m div n = 0 \<and>  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
164  | 
r m n = m else m = m div n * n + r m n \<and> r m n < n)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
165  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
166  | 
apply (auto simp add: fun_eq_iff)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
167  | 
apply (case_tac "xa = 0")  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
168  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
169  | 
apply (drule_tac x="x" in spec)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
170  | 
apply (drule_tac x="xa" in spec)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
171  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
172  | 
by (metis mod_less mod_mult_self2 nat_add_commute nat_mult_commute)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
173  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
174  | 
definition "MEASURE = (%u x y. (u x :: nat) < u y)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
175  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
176  | 
lemma [hol4rew]:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
177  | 
"MEASURE u = (%a b. measure u (a, b))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
178  | 
unfolding MEASURE_def measure_def fun_eq_iff inv_image_def Collect_def  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
179  | 
by simp  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
180  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
181  | 
definition  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
182  | 
"LET f s = f s"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
183  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
184  | 
lemma [hol4rew]:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
185  | 
"LET f s = Let s f"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
186  | 
by (simp add: LET_def Let_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
187  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
188  | 
lemma DEF_INTERS:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
189  | 
  "Inter = (\<lambda>u. {ua. \<exists>x. (\<forall>ua. ua \<in> u \<longrightarrow> x \<in> ua) \<and> ua = x})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
190  | 
by (auto simp add: fun_eq_iff mem_def Collect_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
191  | 
(metis InterD InterI mem_def)+  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
192  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
193  | 
lemma DEF_INTER:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
194  | 
  "op \<inter> = (\<lambda>u ua. {ub. \<exists>x. (x \<in> u \<and> x \<in> ua) \<and> ub = x})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
195  | 
by (auto simp add: mem_def fun_eq_iff Collect_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
196  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
197  | 
lemma DEF_INSERT:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
198  | 
"insert = (%u ua y. y \<in> ua | y = u)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
199  | 
unfolding mem_def fun_eq_iff insert_code by blast  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
200  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
201  | 
lemma DEF_IMAGE:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
202  | 
  "op ` = (\<lambda>u ua. {ub. \<exists>y. (\<exists>x. x \<in> ua \<and> y = u x) \<and> ub = y})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
203  | 
by (simp add: fun_eq_iff image_def Bex_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
204  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
205  | 
lemma DEF_GSPEC:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
206  | 
"Collect = (\<lambda>u. u)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
207  | 
by (simp add: Collect_def ext)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
208  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
209  | 
lemma DEF_GEQ:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
210  | 
"(op =) = (op =)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
211  | 
by simp  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
212  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
213  | 
lemma DEF_GABS:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
214  | 
"Eps = Eps"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
215  | 
by simp  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
216  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
217  | 
lemma DEF_FST:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
218  | 
"fst = (%p. SOME x. EX y. p = (x, y))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
219  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
220  | 
by (rule someI2) (auto intro: fst_conv[symmetric] someI2)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
221  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
222  | 
lemma DEF_FINITE:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
223  | 
  "finite = (\<lambda>a. \<forall>FP. (\<forall>a. a = {} \<or> (\<exists>x s. a = insert x s \<and> FP s) \<longrightarrow> FP a) \<longrightarrow> FP a)"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
224  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
225  | 
apply (intro allI iffI impI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
226  | 
apply (erule finite_induct)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
227  | 
apply auto[2]  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
228  | 
apply (drule_tac x="finite" in spec)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
229  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
230  | 
apply (metis Collect_def Collect_empty_eq finite.emptyI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
231  | 
by (metis (no_types) finite.insertI predicate1I sup.commute sup_absorb1)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
232  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
233  | 
lemma DEF_FACT:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
234  | 
"fact = (SOME FACT. FACT 0 = 1 & (\<forall>n. FACT (Suc n) = Suc n * FACT n))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
235  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
236  | 
apply (simp_all)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
237  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
238  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
239  | 
apply (induct_tac x)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
240  | 
apply simp_all  | 
| 17322 | 241  | 
done  | 
242  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
243  | 
lemma DEF_EXP:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
244  | 
"power = (SOME EXP. (\<forall>m. EXP m 0 = 1) \<and> (\<forall>m n. EXP m (Suc n) = m * EXP m n))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
245  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
246  | 
apply (simp_all)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
247  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
248  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
249  | 
apply (induct_tac xa)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
250  | 
apply simp_all  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
251  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
252  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
253  | 
lemma DEF_EVEN:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
254  | 
"even = (SOME EVEN. EVEN 0 = True \<and> (\<forall>n. EVEN (Suc n) = (\<not> EVEN n)))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
255  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
256  | 
apply simp  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
257  | 
unfolding fun_eq_iff  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
258  | 
apply (intro allI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
259  | 
apply (induct_tac x)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
260  | 
apply simp_all  | 
| 17322 | 261  | 
done  | 
262  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
263  | 
lemma DEF_EMPTY: "{} = (%x. False)"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
264  | 
unfolding fun_eq_iff empty_def  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
265  | 
by auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
266  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
267  | 
lemma DEF_DIV:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
268  | 
"op div = (SOME q. \<exists>r. \<forall>m n. if n = (0 :: nat) then q m n = 0 \<and> r m n = m  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
269  | 
else m = q m n * n + r m n \<and> r m n < n)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
270  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
271  | 
apply (rule_tac x="op mod" in exI)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
272  | 
apply (auto simp add: fun_eq_iff)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
273  | 
apply (case_tac "xa = 0")  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
274  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
275  | 
apply (drule_tac x="x" in spec)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
276  | 
apply (drule_tac x="xa" in spec)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
277  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
278  | 
by (metis div_mult_self2 gr_implies_not0 mod_div_trivial mod_less  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
279  | 
nat_add_commute nat_mult_commute plus_nat.add_0)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
280  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
281  | 
definition [hol4rew]: "DISJOINT a b \<longleftrightarrow> a \<inter> b = {}"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
282  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
283  | 
lemma DEF_DISJOINT:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
284  | 
  "DISJOINT = (%u ua. u \<inter> ua = {})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
285  | 
by (auto simp add: DISJOINT_def_raw)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
286  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
287  | 
lemma DEF_DIFF:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
288  | 
  "op - = (\<lambda>u ua. {ub. \<exists>x. (x \<in> u \<and> x \<notin> ua) \<and> ub = x})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
289  | 
by (simp add: fun_eq_iff Collect_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
290  | 
(metis DiffE DiffI mem_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
291  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
292  | 
definition [hol4rew]: "DELETE s e = s - {e}"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
293  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
294  | 
lemma DEF_DELETE:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
295  | 
  "DELETE = (\<lambda>u ua. {ub. \<exists>y. (y \<in> u \<and> y \<noteq> ua) \<and> ub = y})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
296  | 
by (auto simp add: DELETE_def_raw)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
297  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
298  | 
lemma COND_DEF:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
299  | 
"(if b then t else f) = (SOME x. (b = True \<longrightarrow> x = t) \<and> (b = False \<longrightarrow> x = f))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
300  | 
by auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
301  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
302  | 
definition [simp]: "NUMERAL_BIT1 n = n + (n + Suc 0)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
303  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
304  | 
lemma BIT1_DEF:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
305  | 
"NUMERAL_BIT1 = (%u. Suc (2 * u))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
306  | 
by (auto)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
307  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
308  | 
definition [simp]: "NUMERAL_BIT0 (n :: nat) = n + n"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
309  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
310  | 
lemma BIT0_DEF:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
311  | 
"NUMERAL_BIT0 = (SOME BIT0. BIT0 0 = 0 \<and> (\<forall>n. BIT0 (Suc n) = Suc (Suc (BIT0 n))))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
312  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
313  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
314  | 
apply (rule ext)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
315  | 
apply (induct_tac x)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
316  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
317  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
318  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
319  | 
lemma [hol4rew]:  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
320  | 
"NUMERAL_BIT0 n = 2 * n"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
321  | 
"NUMERAL_BIT1 n = 2 * n + 1"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
322  | 
"2 * 0 = (0 :: nat)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
323  | 
"2 * 1 = (2 :: nat)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
324  | 
"0 + 1 = (1 :: nat)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
325  | 
by simp_all  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
326  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
327  | 
lemma DEF_MINUS: "op - = (SOME sub. (\<forall>m. sub m 0 = m) & (\<forall>m n. sub m (Suc n) = sub m n - Suc 0))"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
328  | 
apply (rule some_equality[symmetric])  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
329  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
330  | 
apply (rule ext)+  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
331  | 
apply (induct_tac xa)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
332  | 
apply auto  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
333  | 
done  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
334  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
335  | 
lemma DEF_PLUS: "op + = (SOME add. (\<forall>n. add 0 n = n) & (\<forall>m n. add (Suc m) n = Suc (add m n)))"  | 
| 17322 | 336  | 
apply (rule some_equality[symmetric])  | 
337  | 
apply auto  | 
|
338  | 
apply (rule ext)+  | 
|
339  | 
apply (induct_tac x)  | 
|
340  | 
apply auto  | 
|
341  | 
done  | 
|
342  | 
||
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
343  | 
lemmas [hol4rew] = id_apply  | 
| 17322 | 344  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
345  | 
lemma DEF_CHOICE: "Eps = (%u. SOME x. x \<in> u)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
346  | 
by (simp add: mem_def)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
347  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
348  | 
definition dotdot :: "nat => nat => nat => bool"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
349  | 
  where "dotdot == %(u::nat) ua::nat. {ub::nat. EX x::nat. (u <= x & x <= ua) & ub = x}"
 | 
| 17322 | 350  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
351  | 
lemma DEF__dot__dot_: "dotdot = (%u ua. {ub. EX x. (u <= x & x <= ua) & ub = x})"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
352  | 
by (simp add: dotdot_def)  | 
| 17322 | 353  | 
|
| 
43787
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
354  | 
lemma [hol4rew]: "dotdot a b = {a..b}"
 | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
355  | 
unfolding fun_eq_iff atLeastAtMost_def atLeast_def atMost_def dotdot_def  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
356  | 
by (simp add: Collect_conj_eq)  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
357  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
358  | 
definition [hol4rew,simp]: "INFINITE S \<longleftrightarrow> \<not> finite S"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
359  | 
|
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
360  | 
lemma DEF_INFINITE: "INFINITE = (\<lambda>u. \<not>finite u)"  | 
| 
 
5be84619e4d4
Update HOLLightCompat
 
Cezary Kaliszyk <kaliszyk@in.tum.de> 
parents: 
41589 
diff
changeset
 | 
361  | 
by (simp add: INFINITE_def_raw)  | 
| 17322 | 362  | 
|
363  | 
end  |