| author | wenzelm | 
| Sat, 10 Aug 2024 12:12:53 +0200 | |
| changeset 80678 | c5c9b4470d06 | 
| 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  |