equal
deleted
inserted
replaced
4 *) |
4 *) |
5 |
5 |
6 header {* Natural numbers with infinity *} |
6 header {* Natural numbers with infinity *} |
7 |
7 |
8 theory Nat_Infinity |
8 theory Nat_Infinity |
9 imports Main |
9 imports PreList |
10 begin |
10 begin |
11 |
11 |
12 subsection "Definitions" |
12 subsection "Definitions" |
13 |
13 |
14 text {* |
14 text {* |
23 Infty ("\<infinity>") |
23 Infty ("\<infinity>") |
24 |
24 |
25 notation (HTML output) |
25 notation (HTML output) |
26 Infty ("\<infinity>") |
26 Infty ("\<infinity>") |
27 |
27 |
28 instance inat :: "{ord, zero}" .. |
|
29 |
|
30 definition |
28 definition |
31 iSuc :: "inat => inat" where |
29 iSuc :: "inat => inat" where |
32 "iSuc i = (case i of Fin n => Fin (Suc n) | \<infinity> => \<infinity>)" |
30 "iSuc i = (case i of Fin n => Fin (Suc n) | \<infinity> => \<infinity>)" |
33 |
31 |
34 defs (overloaded) |
32 instantiation inat :: "{ord, zero}" |
|
33 begin |
|
34 |
|
35 definition |
35 Zero_inat_def: "0 == Fin 0" |
36 Zero_inat_def: "0 == Fin 0" |
|
37 |
|
38 definition |
36 iless_def: "m < n == |
39 iless_def: "m < n == |
37 case m of Fin m1 => (case n of Fin n1 => m1 < n1 | \<infinity> => True) |
40 case m of Fin m1 => (case n of Fin n1 => m1 < n1 | \<infinity> => True) |
38 | \<infinity> => False" |
41 | \<infinity> => False" |
|
42 |
|
43 definition |
39 ile_def: "(m::inat) \<le> n == \<not> (n < m)" |
44 ile_def: "(m::inat) \<le> n == \<not> (n < m)" |
|
45 |
|
46 instance .. |
|
47 |
|
48 end |
40 |
49 |
41 lemmas inat_defs = Zero_inat_def iSuc_def iless_def ile_def |
50 lemmas inat_defs = Zero_inat_def iSuc_def iless_def ile_def |
42 lemmas inat_splits = inat.split inat.split_asm |
51 lemmas inat_splits = inat.split inat.split_asm |
43 |
52 |
44 text {* |
53 text {* |