author | paulson <lp15@cam.ac.uk> |
Tue, 18 May 2021 20:25:08 +0100 | |
changeset 73707 | 06aeb9054c07 |
parent 67091 | 1393c2340eec |
child 80914 | d97fdabd9e2b |
permissions | -rw-r--r-- |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
1 |
(* Author: Tobias Nipkow, TU München |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
2 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
3 |
A theory of types extended with a greatest and a least element. |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
4 |
Oriented towards numeric types, hence "\<infinity>" and "-\<infinity>". |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
5 |
*) |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
6 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
7 |
theory Extended |
65366 | 8 |
imports Simps_Case_Conv |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
9 |
begin |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
10 |
|
58310 | 11 |
datatype 'a extended = Fin 'a | Pinf ("\<infinity>") | Minf ("-\<infinity>") |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
12 |
|
51357 | 13 |
|
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
14 |
instantiation extended :: (order)order |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
15 |
begin |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
16 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
17 |
fun less_eq_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> bool" where |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
18 |
"Fin x \<le> Fin y = (x \<le> y)" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
19 |
"_ \<le> Pinf = True" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
20 |
"Minf \<le> _ = True" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
21 |
"(_::'a extended) \<le> _ = False" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
22 |
|
53427 | 23 |
case_of_simps less_eq_extended_case: less_eq_extended.simps |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
24 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
25 |
definition less_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> bool" where |
67091 | 26 |
"((x::'a extended) < y) = (x \<le> y \<and> \<not> y \<le> x)" |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
27 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
28 |
instance |
53427 | 29 |
by intro_classes (auto simp: less_extended_def less_eq_extended_case split: extended.splits) |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
30 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
31 |
end |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
32 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
33 |
instance extended :: (linorder)linorder |
53427 | 34 |
by intro_classes (auto simp: less_eq_extended_case split:extended.splits) |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
35 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
36 |
lemma Minf_le[simp]: "Minf \<le> y" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
37 |
by(cases y) auto |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
38 |
lemma le_Pinf[simp]: "x \<le> Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
39 |
by(cases x) auto |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
40 |
lemma le_Minf[simp]: "x \<le> Minf \<longleftrightarrow> x = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
41 |
by(cases x) auto |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
42 |
lemma Pinf_le[simp]: "Pinf \<le> x \<longleftrightarrow> x = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
43 |
by(cases x) auto |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
44 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
45 |
lemma less_extended_simps[simp]: |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
46 |
"Fin x < Fin y = (x < y)" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
47 |
"Fin x < Pinf = True" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
48 |
"Fin x < Minf = False" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
49 |
"Pinf < h = False" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
50 |
"Minf < Fin x = True" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
51 |
"Minf < Pinf = True" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
52 |
"l < Minf = False" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
53 |
by (auto simp add: less_extended_def) |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
54 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
55 |
lemma min_extended_simps[simp]: |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
56 |
"min (Fin x) (Fin y) = Fin(min x y)" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
57 |
"min xx Pinf = xx" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
58 |
"min xx Minf = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
59 |
"min Pinf yy = yy" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
60 |
"min Minf yy = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
61 |
by (auto simp add: min_def) |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
62 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
63 |
lemma max_extended_simps[simp]: |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
64 |
"max (Fin x) (Fin y) = Fin(max x y)" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
65 |
"max xx Pinf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
66 |
"max xx Minf = xx" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
67 |
"max Pinf yy = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
68 |
"max Minf yy = yy" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
69 |
by (auto simp add: max_def) |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
70 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
71 |
|
51357 | 72 |
instantiation extended :: (zero)zero |
73 |
begin |
|
74 |
definition "0 = Fin(0::'a)" |
|
75 |
instance .. |
|
76 |
end |
|
77 |
||
55124 | 78 |
declare zero_extended_def[symmetric, code_post] |
79 |
||
51357 | 80 |
instantiation extended :: (one)one |
81 |
begin |
|
82 |
definition "1 = Fin(1::'a)" |
|
83 |
instance .. |
|
84 |
end |
|
85 |
||
55124 | 86 |
declare one_extended_def[symmetric, code_post] |
87 |
||
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
88 |
instantiation extended :: (plus)plus |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
89 |
begin |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
90 |
|
60500 | 91 |
text \<open>The following definition of of addition is totalized |
92 |
to make it asociative and commutative. Normally the sum of plus and minus infinity is undefined.\<close> |
|
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
93 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
94 |
fun plus_extended where |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
95 |
"Fin x + Fin y = Fin(x+y)" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
96 |
"Fin x + Pinf = Pinf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
97 |
"Pinf + Fin x = Pinf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
98 |
"Pinf + Pinf = Pinf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
99 |
"Minf + Fin y = Minf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
100 |
"Fin x + Minf = Minf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
101 |
"Minf + Minf = Minf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
102 |
"Minf + Pinf = Pinf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
103 |
"Pinf + Minf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
104 |
|
53427 | 105 |
case_of_simps plus_case: plus_extended.simps |
106 |
||
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
107 |
instance .. |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
108 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
109 |
end |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
110 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
111 |
|
53427 | 112 |
|
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
113 |
instance extended :: (ab_semigroup_add)ab_semigroup_add |
53427 | 114 |
by intro_classes (simp_all add: ac_simps plus_case split: extended.splits) |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
115 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
116 |
instance extended :: (ordered_ab_semigroup_add)ordered_ab_semigroup_add |
53427 | 117 |
by intro_classes (auto simp: add_left_mono plus_case split: extended.splits) |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
118 |
|
51357 | 119 |
instance extended :: (comm_monoid_add)comm_monoid_add |
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
120 |
proof |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
121 |
fix x :: "'a extended" show "0 + x = x" unfolding zero_extended_def by(cases x)auto |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
122 |
qed |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
123 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
124 |
instantiation extended :: (uminus)uminus |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
125 |
begin |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
126 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
127 |
fun uminus_extended where |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
128 |
"- (Fin x) = Fin (- x)" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
129 |
"- Pinf = Minf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
130 |
"- Minf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
131 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
132 |
instance .. |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
133 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
134 |
end |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
135 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
136 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
137 |
instantiation extended :: (ab_group_add)minus |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
138 |
begin |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
139 |
definition "x - y = x + -(y::'a extended)" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
140 |
instance .. |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
141 |
end |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
142 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
143 |
lemma minus_extended_simps[simp]: |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
144 |
"Fin x - Fin y = Fin(x - y)" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
145 |
"Fin x - Pinf = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
146 |
"Fin x - Minf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
147 |
"Pinf - Fin y = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
148 |
"Pinf - Minf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
149 |
"Minf - Fin y = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
150 |
"Minf - Pinf = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
151 |
"Minf - Minf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
152 |
"Pinf - Pinf = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
153 |
by (simp_all add: minus_extended_def) |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
154 |
|
51357 | 155 |
|
60500 | 156 |
text\<open>Numerals:\<close> |
51357 | 157 |
|
158 |
instance extended :: ("{ab_semigroup_add,one}")numeral .. |
|
159 |
||
55124 | 160 |
lemma Fin_numeral[code_post]: "Fin(numeral w) = numeral w" |
51357 | 161 |
apply (induct w rule: num_induct) |
162 |
apply (simp only: numeral_One one_extended_def) |
|
163 |
apply (simp only: numeral_inc one_extended_def plus_extended.simps(1)[symmetric]) |
|
164 |
done |
|
165 |
||
55124 | 166 |
lemma Fin_neg_numeral[code_post]: "Fin (- numeral w) = - numeral w" |
54489
03ff4d1e6784
eliminiated neg_numeral in favour of - (numeral _)
haftmann
parents:
53427
diff
changeset
|
167 |
by (simp only: Fin_numeral uminus_extended.simps[symmetric]) |
51358 | 168 |
|
51357 | 169 |
|
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
170 |
instantiation extended :: (lattice)bounded_lattice |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
171 |
begin |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
172 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
173 |
definition "bot = Minf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
174 |
definition "top = Pinf" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
175 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
176 |
fun inf_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> 'a extended" where |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
177 |
"inf_extended (Fin i) (Fin j) = Fin (inf i j)" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
178 |
"inf_extended a Minf = Minf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
179 |
"inf_extended Minf a = Minf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
180 |
"inf_extended Pinf a = a" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
181 |
"inf_extended a Pinf = a" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
182 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
183 |
fun sup_extended :: "'a extended \<Rightarrow> 'a extended \<Rightarrow> 'a extended" where |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
184 |
"sup_extended (Fin i) (Fin j) = Fin (sup i j)" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
185 |
"sup_extended a Pinf = Pinf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
186 |
"sup_extended Pinf a = Pinf" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
187 |
"sup_extended Minf a = a" | |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
188 |
"sup_extended a Minf = a" |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
189 |
|
53427 | 190 |
case_of_simps inf_extended_case: inf_extended.simps |
191 |
case_of_simps sup_extended_case: sup_extended.simps |
|
192 |
||
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
193 |
instance |
53427 | 194 |
by (intro_classes) (auto simp: inf_extended_case sup_extended_case less_eq_extended_case |
195 |
bot_extended_def top_extended_def split: extended.splits) |
|
51338
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
196 |
end |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
197 |
|
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
198 |
end |
054d1653950f
New theory of infinity-extended types; should replace Extended_xyz eventually
nipkow
parents:
diff
changeset
|
199 |