author | Cezary Kaliszyk <kaliszyk@in.tum.de> |
Mon, 26 Oct 2009 19:35:30 +0100 | |
changeset 196 | 9163c0f9830d |
parent 195 | 72165b83b9d6 |
child 197 | c0f2db9a243b |
permissions | -rw-r--r-- |
181
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
1 |
theory IntEx |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
2 |
imports QuotMain |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
3 |
begin |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
4 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
5 |
fun |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
6 |
intrel :: "(nat \<times> nat) \<Rightarrow> (nat \<times> nat) \<Rightarrow> bool" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
7 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
8 |
"intrel (x, y) (u, v) = (x + v = u + y)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
9 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
10 |
quotient my_int = "nat \<times> nat" / intrel |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
11 |
apply(unfold EQUIV_def) |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
12 |
apply(auto simp add: mem_def expand_fun_eq) |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
13 |
done |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
14 |
|
184
f3c192574d2a
added "print_quotients" command to th ekeyword file
Christian Urban <urbanc@in.tum.de>
parents:
181
diff
changeset
|
15 |
print_quotients |
f3c192574d2a
added "print_quotients" command to th ekeyword file
Christian Urban <urbanc@in.tum.de>
parents:
181
diff
changeset
|
16 |
|
181
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
17 |
typ my_int |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
18 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
19 |
local_setup {* |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
20 |
make_const_def @{binding "ZERO"} @{term "(0::nat, 0::nat)"} NoSyn @{typ "nat \<times> nat"} @{typ "my_int"} #> snd |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
21 |
*} |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
22 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
23 |
term ZERO |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
24 |
thm ZERO_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
25 |
|
193 | 26 |
(* |
27 |
quotient_def (with my_int) |
|
28 |
ZERO :: "my_int" |
|
29 |
where |
|
30 |
"ZERO \<equiv> (0::nat, 0::nat)" |
|
31 |
*) |
|
32 |
||
181
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
33 |
local_setup {* |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
34 |
make_const_def @{binding ONE} @{term "(1::nat, 0::nat)"} NoSyn @{typ "nat \<times> nat"} @{typ "my_int"} #> snd |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
35 |
*} |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
36 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
37 |
term ONE |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
38 |
thm ONE_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
39 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
40 |
fun |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
41 |
my_plus :: "(nat \<times> nat) \<Rightarrow> (nat \<times> nat) \<Rightarrow> (nat \<times> nat)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
42 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
43 |
"my_plus (x, y) (u, v) = (x + u, y + v)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
44 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
45 |
local_setup {* |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
46 |
make_const_def @{binding PLUS} @{term "my_plus"} NoSyn @{typ "nat \<times> nat"} @{typ "my_int"} #> snd |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
47 |
*} |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
48 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
49 |
term PLUS |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
50 |
thm PLUS_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
51 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
52 |
fun |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
53 |
my_neg :: "(nat \<times> nat) \<Rightarrow> (nat \<times> nat)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
54 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
55 |
"my_neg (x, y) = (y, x)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
56 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
57 |
local_setup {* |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
58 |
make_const_def @{binding NEG} @{term "my_neg"} NoSyn @{typ "nat \<times> nat"} @{typ "my_int"} #> snd |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
59 |
*} |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
60 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
61 |
term NEG |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
62 |
thm NEG_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
63 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
64 |
definition |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
65 |
MINUS :: "my_int \<Rightarrow> my_int \<Rightarrow> my_int" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
66 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
67 |
"MINUS z w = PLUS z (NEG w)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
68 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
69 |
fun |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
70 |
my_mult :: "(nat \<times> nat) \<Rightarrow> (nat \<times> nat) \<Rightarrow> (nat \<times> nat)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
71 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
72 |
"my_mult (x, y) (u, v) = (x*u + y*v, x*v + y*u)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
73 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
74 |
local_setup {* |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
75 |
make_const_def @{binding MULT} @{term "my_mult"} NoSyn @{typ "nat \<times> nat"} @{typ "my_int"} #> snd |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
76 |
*} |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
77 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
78 |
term MULT |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
79 |
thm MULT_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
80 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
81 |
(* NOT SURE WETHER THIS DEFINITION IS CORRECT *) |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
82 |
fun |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
83 |
my_le :: "(nat \<times> nat) \<Rightarrow> (nat \<times> nat) \<Rightarrow> bool" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
84 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
85 |
"my_le (x, y) (u, v) = (x+v \<le> u+y)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
86 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
87 |
local_setup {* |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
88 |
make_const_def @{binding LE} @{term "my_le"} NoSyn @{typ "nat \<times> nat"} @{typ "my_int"} #> snd |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
89 |
*} |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
90 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
91 |
term LE |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
92 |
thm LE_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
93 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
94 |
definition |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
95 |
LESS :: "my_int \<Rightarrow> my_int \<Rightarrow> bool" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
96 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
97 |
"LESS z w = (LE z w \<and> z \<noteq> w)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
98 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
99 |
term LESS |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
100 |
thm LESS_def |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
101 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
102 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
103 |
definition |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
104 |
ABS :: "my_int \<Rightarrow> my_int" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
105 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
106 |
"ABS i = (if (LESS i ZERO) then (NEG i) else i)" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
107 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
108 |
definition |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
109 |
SIGN :: "my_int \<Rightarrow> my_int" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
110 |
where |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
111 |
"SIGN i = (if i = ZERO then ZERO else if (LESS ZERO i) then ONE else (NEG ONE))" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
112 |
|
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
113 |
lemma plus_sym_pre: |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
114 |
shows "intrel (my_plus a b) (my_plus b a)" |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
115 |
sorry |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
116 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
117 |
lemma equiv_intrel: "EQUIV intrel" |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
118 |
sorry |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
119 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
120 |
lemma intrel_refl: "intrel a a" |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
121 |
sorry |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
122 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
123 |
lemma ho_plus_rsp : "IntEx.intrel ===> IntEx.intrel ===> IntEx.intrel my_plus my_plus" |
192
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
124 |
by (simp) |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
125 |
|
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
126 |
ML {* val consts = [@{const_name "my_plus"}] *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
127 |
ML {* val rty = @{typ "nat \<times> nat"} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
128 |
ML {* val qty = @{typ "my_int"} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
129 |
ML {* val rel = @{term "intrel"} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
130 |
ML {* val rel_eqv = @{thm equiv_intrel} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
131 |
ML {* val rel_refl = @{thm intrel_refl} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
132 |
ML {* val quot = @{thm QUOTIENT_my_int} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
133 |
ML {* val rsp_thms = @{thms ho_plus_rsp} @ @{thms ho_all_prs ho_ex_prs} *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
134 |
ML {* val trans2 = @{thm QUOT_TYPE_I_my_int.R_trans2} *} |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
135 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
136 |
ML {* val t_a = atomize_thm @{thm plus_sym_pre} *} |
192
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
137 |
ML {* val t_r = regularize t_a rty rel rel_eqv @{context} *} |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
138 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
139 |
ML {* val (g, thm, othm) = |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
140 |
Toplevel.program (fn () => |
192
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
141 |
repabs_eq @{context} t_r consts rty qty |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
142 |
quot rel_refl trans2 |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
143 |
rsp_thms |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
144 |
) |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
145 |
*} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
146 |
ML {* |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
147 |
val t_t2 = |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
148 |
Toplevel.program (fn () => |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
149 |
repabs_eq2 @{context} (g, thm, othm) |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
150 |
) |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
151 |
*} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
152 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
153 |
ML {* |
192
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
154 |
fun make_simp_lam_prs_thm lthy quot_thm typ = |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
155 |
let |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
156 |
val (_, [lty, rty]) = dest_Type typ; |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
157 |
val thy = ProofContext.theory_of lthy; |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
158 |
val (lcty, rcty) = (ctyp_of thy lty, ctyp_of thy rty) |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
159 |
val inst = [SOME lcty, NONE, SOME rcty]; |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
160 |
val lpi = Drule.instantiate' inst [] @{thm LAMBDA_PRS}; |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
161 |
val tac = |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
162 |
(compose_tac (false, @{thm LAMBDA_PRS}, 2)) THEN_ALL_NEW |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
163 |
(quotient_tac quot_thm); |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
164 |
val t = Goal.prove lthy [] [] (concl_of lpi) (fn _ => tac 1); |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
165 |
val ts = @{thm HOL.sym} OF [t] |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
166 |
in |
194
03c03e88efa9
Simplifying Int and Working on map
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
192
diff
changeset
|
167 |
MetaSimplifier.rewrite_rule [@{thm eq_reflection} OF @{thms id_apply}] ts |
192
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
168 |
end |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
169 |
*} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
170 |
|
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
171 |
|
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
172 |
ML {* val abs = findabs rty (prop_of (atomize_thm @{thm plus_sym_pre})) *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
173 |
ML {* val simp_lam_prs_thms = map (make_simp_lam_prs_thm @{context} quot) abs *} |
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
174 |
|
a296bf1a3b09
Simplifying code in int
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
191
diff
changeset
|
175 |
ML {* |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
176 |
fun simp_lam_prs lthy thm = |
194
03c03e88efa9
Simplifying Int and Working on map
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
192
diff
changeset
|
177 |
simp_lam_prs lthy (eqsubst_thm lthy simp_lam_prs_thms thm) |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
178 |
handle _ => thm |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
179 |
*} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
180 |
ML {* t_t2 *} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
181 |
ML {* val t_l = simp_lam_prs @{context} t_t2 *} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
182 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
183 |
ML {* |
196 | 184 |
fun simp_allex_prs lthy quot thm = |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
185 |
let |
196 | 186 |
val rwf = @{thm FORALL_PRS} OF [quot]; |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
187 |
val rwfs = @{thm "HOL.sym"} OF [rwf]; |
196 | 188 |
val rwe = @{thm EXISTS_PRS} OF [quot]; |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
189 |
val rwes = @{thm "HOL.sym"} OF [rwe] |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
190 |
in |
196 | 191 |
(simp_allex_prs lthy quot (eqsubst_thm lthy [rwfs, rwes] thm)) |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
192 |
end |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
193 |
handle _ => thm |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
194 |
*} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
195 |
|
196 | 196 |
ML {* val t_a = simp_allex_prs @{context} quot t_l *} |
191
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
197 |
|
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
198 |
ML {* val t_defs = @{thms PLUS_def} *} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
199 |
ML {* val t_defs_sym = add_lower_defs @{context} t_defs *} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
200 |
ML {* val t_d = MetaSimplifier.rewrite_rule t_defs_sym t_a *} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
201 |
ML {* val t_r = MetaSimplifier.rewrite_rule @{thms QUOT_TYPE_I_my_int.REPS_same} t_d *} |
b97f3f5fbc18
Symmetry of integer addition
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
184
diff
changeset
|
202 |
ML {* ObjectLogic.rulify t_r *} |
181
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
203 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
204 |
lemma |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
205 |
fixes i j k::"my_int" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
206 |
shows "(PLUS (PLUS i j) k) = (PLUS i (PLUS j k))" |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
207 |
apply(unfold PLUS_def) |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
208 |
apply(simp add: expand_fun_eq) |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
209 |
sorry |
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
210 |
|
3e53081ad53a
added another example file about integers (see HOL/Int.thy)
Christian Urban <urbanc@in.tum.de>
parents:
diff
changeset
|
211 |