| author | haftmann | 
| Thu, 26 Jun 2008 10:06:54 +0200 | |
| changeset 27367 | a75d71c73362 | 
| parent 27105 | 5f139027c365 | 
| child 27435 | b3f8e9bdf9a7 | 
| permissions | -rw-r--r-- | 
| 10751 | 1  | 
(* Title : HyperNat.thy  | 
2  | 
Author : Jacques D. Fleuriot  | 
|
3  | 
Copyright : 1998 University of Cambridge  | 
|
| 14415 | 4  | 
|
5  | 
Converted to Isar and polished by lcp  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
6  | 
*)  | 
| 10751 | 7  | 
|
| 17433 | 8  | 
header{*Hypernatural numbers*}
 | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
9  | 
|
| 15131 | 10  | 
theory HyperNat  | 
| 25601 | 11  | 
imports StarDef  | 
| 15131 | 12  | 
begin  | 
| 10751 | 13  | 
|
| 17299 | 14  | 
types hypnat = "nat star"  | 
| 10751 | 15  | 
|
| 19380 | 16  | 
abbreviation  | 
| 
21404
 
eb85850d3eb7
more robust syntax for definition/abbreviation/notation;
 
wenzelm 
parents: 
20740 
diff
changeset
 | 
17  | 
hypnat_of_nat :: "nat => nat star" where  | 
| 19380 | 18  | 
"hypnat_of_nat == star_of"  | 
| 10751 | 19  | 
|
| 
21847
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
20  | 
definition  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
21  | 
hSuc :: "hypnat => hypnat" where  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
22  | 
hSuc_def [transfer_unfold]: "hSuc = *f* Suc"  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
23  | 
|
| 17433 | 24  | 
subsection{*Properties Transferred from Naturals*}
 | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
25  | 
|
| 
21847
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
26  | 
lemma hSuc_not_zero [iff]: "\<And>m. hSuc m \<noteq> 0"  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
27  | 
by transfer (rule Suc_not_Zero)  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
28  | 
|
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
29  | 
lemma zero_not_hSuc [iff]: "\<And>m. 0 \<noteq> hSuc m"  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
30  | 
by transfer (rule Zero_not_Suc)  | 
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
31  | 
|
| 
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
32  | 
lemma hSuc_hSuc_eq [iff]: "\<And>m n. (hSuc m = hSuc n) = (m = n)"  | 
| 
27105
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
33  | 
by transfer (rule nat.inject)  | 
| 
21847
 
59a68ed9f2f2
redefine hSuc as *f* Suc, and move to HyperNat.thy
 
huffman 
parents: 
21787 
diff
changeset
 | 
34  | 
|
| 
21865
 
55cc354fd2d9
moved several theorems; rearranged theory dependencies
 
huffman 
parents: 
21864 
diff
changeset
 | 
35  | 
lemma zero_less_hSuc [iff]: "\<And>n. 0 < hSuc n"  | 
| 
 
55cc354fd2d9
moved several theorems; rearranged theory dependencies
 
huffman 
parents: 
21864 
diff
changeset
 | 
36  | 
by transfer (rule zero_less_Suc)  | 
| 
 
55cc354fd2d9
moved several theorems; rearranged theory dependencies
 
huffman 
parents: 
21864 
diff
changeset
 | 
37  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
38  | 
lemma hypnat_minus_zero [simp]: "!!z. z - z = (0::hypnat)"  | 
| 17299 | 39  | 
by transfer (rule diff_self_eq_0)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
40  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
41  | 
lemma hypnat_diff_0_eq_0 [simp]: "!!n. (0::hypnat) - n = 0"  | 
| 17299 | 42  | 
by transfer (rule diff_0_eq_0)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
43  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
44  | 
lemma hypnat_add_is_0 [iff]: "!!m n. (m+n = (0::hypnat)) = (m=0 & n=0)"  | 
| 17299 | 45  | 
by transfer (rule add_is_0)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
46  | 
|
| 17299 | 47  | 
lemma hypnat_diff_diff_left: "!!i j k. (i::hypnat) - j - k = i - (j+k)"  | 
48  | 
by transfer (rule diff_diff_left)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
49  | 
|
| 17299 | 50  | 
lemma hypnat_diff_commute: "!!i j k. (i::hypnat) - j - k = i-k-j"  | 
51  | 
by transfer (rule diff_commute)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
52  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
53  | 
lemma hypnat_diff_add_inverse [simp]: "!!m n. ((n::hypnat) + m) - n = m"  | 
| 17299 | 54  | 
by transfer (rule diff_add_inverse)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
55  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
56  | 
lemma hypnat_diff_add_inverse2 [simp]: "!!m n. ((m::hypnat) + n) - n = m"  | 
| 17299 | 57  | 
by transfer (rule diff_add_inverse2)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
58  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
59  | 
lemma hypnat_diff_cancel [simp]: "!!k m n. ((k::hypnat) + m) - (k+n) = m - n"  | 
| 17299 | 60  | 
by transfer (rule diff_cancel)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
61  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
62  | 
lemma hypnat_diff_cancel2 [simp]: "!!k m n. ((m::hypnat) + k) - (n+k) = m - n"  | 
| 17299 | 63  | 
by transfer (rule diff_cancel2)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
64  | 
|
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
65  | 
lemma hypnat_diff_add_0 [simp]: "!!m n. (n::hypnat) - (n+m) = (0::hypnat)"  | 
| 17299 | 66  | 
by transfer (rule diff_add_0)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
67  | 
|
| 17299 | 68  | 
lemma hypnat_diff_mult_distrib: "!!k m n. ((m::hypnat) - n) * k = (m * k) - (n * k)"  | 
69  | 
by transfer (rule diff_mult_distrib)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
70  | 
|
| 17299 | 71  | 
lemma hypnat_diff_mult_distrib2: "!!k m n. (k::hypnat) * (m - n) = (k * m) - (k * n)"  | 
72  | 
by transfer (rule diff_mult_distrib2)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
73  | 
|
| 17299 | 74  | 
lemma hypnat_le_zero_cancel [iff]: "!!n. (n \<le> (0::hypnat)) = (n = 0)"  | 
75  | 
by transfer (rule le_0_eq)  | 
|
| 
14420
 
4e72cd222e0b
converted Hyperreal/HTranscendental to Isar script
 
paulson 
parents: 
14415 
diff
changeset
 | 
76  | 
|
| 17299 | 77  | 
lemma hypnat_mult_is_0 [simp]: "!!m n. (m*n = (0::hypnat)) = (m=0 | n=0)"  | 
78  | 
by transfer (rule mult_is_0)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
79  | 
|
| 17299 | 80  | 
lemma hypnat_diff_is_0_eq [simp]: "!!m n. ((m::hypnat) - n = 0) = (m \<le> n)"  | 
81  | 
by transfer (rule diff_is_0_eq)  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
82  | 
|
| 17299 | 83  | 
lemma hypnat_not_less0 [iff]: "!!n. ~ n < (0::hypnat)"  | 
84  | 
by transfer (rule not_less0)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
85  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
86  | 
lemma hypnat_less_one [iff]:  | 
| 17299 | 87  | 
"!!n. (n < (1::hypnat)) = (n=0)"  | 
88  | 
by transfer (rule less_one)  | 
|
89  | 
||
90  | 
lemma hypnat_add_diff_inverse: "!!m n. ~ m<n ==> n+(m-n) = (m::hypnat)"  | 
|
91  | 
by transfer (rule add_diff_inverse)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
92  | 
|
| 17299 | 93  | 
lemma hypnat_le_add_diff_inverse [simp]: "!!m n. n \<le> m ==> n+(m-n) = (m::hypnat)"  | 
94  | 
by transfer (rule le_add_diff_inverse)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
95  | 
|
| 17299 | 96  | 
lemma hypnat_le_add_diff_inverse2 [simp]: "!!m n. n\<le>m ==> (m-n)+n = (m::hypnat)"  | 
97  | 
by transfer (rule le_add_diff_inverse2)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
98  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
99  | 
declare hypnat_le_add_diff_inverse2 [OF order_less_imp_le]  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
100  | 
|
| 17299 | 101  | 
lemma hypnat_le0 [iff]: "!!n. (0::hypnat) \<le> n"  | 
102  | 
by transfer (rule le0)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
103  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
104  | 
lemma hypnat_le_add1 [simp]: "!!x n. (x::hypnat) \<le> x + n"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
105  | 
by transfer (rule le_add1)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
106  | 
|
| 17299 | 107  | 
lemma hypnat_add_self_le [simp]: "!!x n. (x::hypnat) \<le> n + x"  | 
108  | 
by transfer (rule le_add2)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
109  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
110  | 
lemma hypnat_add_one_self_less [simp]: "(x::hypnat) < x + (1::hypnat)"  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
111  | 
by (insert add_strict_left_mono [OF zero_less_one], auto)  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
112  | 
|
| 17433 | 113  | 
lemma hypnat_neq0_conv [iff]: "!!n. (n \<noteq> 0) = (0 < (n::hypnat))"  | 
114  | 
by transfer (rule neq0_conv)  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
115  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
116  | 
lemma hypnat_gt_zero_iff: "((0::hypnat) < n) = ((1::hypnat) \<le> n)"  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
117  | 
by (auto simp add: linorder_not_less [symmetric])  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
118  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
119  | 
lemma hypnat_gt_zero_iff2: "(0 < n) = (\<exists>m. n = m + (1::hypnat))"  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
120  | 
apply safe  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
121  | 
apply (rule_tac x = "n - (1::hypnat) " in exI)  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
122  | 
apply (simp add: hypnat_gt_zero_iff)  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
123  | 
apply (insert add_le_less_mono [OF _ zero_less_one, of 0], auto)  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
124  | 
done  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
125  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
126  | 
lemma hypnat_add_self_not_less: "~ (x + y < (x::hypnat))"  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
127  | 
by (simp add: linorder_not_le [symmetric] add_commute [of x])  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
128  | 
|
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
129  | 
lemma hypnat_diff_split:  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
130  | 
"P(a - b::hypnat) = ((a<b --> P 0) & (ALL d. a = b + d --> P d))"  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
131  | 
    -- {* elimination of @{text -} on @{text hypnat} *}
 | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
132  | 
proof (cases "a<b" rule: case_split)  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
133  | 
case True  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
134  | 
thus ?thesis  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
135  | 
by (auto simp add: hypnat_add_self_not_less order_less_imp_le  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
136  | 
hypnat_diff_is_0_eq [THEN iffD2])  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
137  | 
next  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
138  | 
case False  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
139  | 
thus ?thesis  | 
| 14468 | 140  | 
by (auto simp add: linorder_not_less dest: order_le_less_trans)  | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
141  | 
qed  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
142  | 
|
| 17433 | 143  | 
subsection{*Properties of the set of embedded natural numbers*}
 | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
144  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
145  | 
lemma of_nat_eq_star_of [simp]: "of_nat = star_of"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
146  | 
proof  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
147  | 
fix n :: nat  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
148  | 
show "of_nat n = star_of n" by transfer simp  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
149  | 
qed  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
150  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
151  | 
lemma Nats_eq_Standard: "(Nats :: nat star set) = Standard"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
152  | 
by (auto simp add: Nats_def Standard_def)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
153  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
154  | 
lemma hypnat_of_nat_mem_Nats [simp]: "hypnat_of_nat n \<in> Nats"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
155  | 
by (simp add: Nats_eq_Standard)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
156  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
157  | 
lemma hypnat_of_nat_one [simp]: "hypnat_of_nat (Suc 0) = (1::hypnat)"  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
158  | 
by transfer simp  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
159  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
160  | 
lemma hypnat_of_nat_Suc [simp]:  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
161  | 
"hypnat_of_nat (Suc n) = hypnat_of_nat n + (1::hypnat)"  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
162  | 
by transfer simp  | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
163  | 
|
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
164  | 
lemma of_nat_eq_add [rule_format]:  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
165  | 
"\<forall>d::hypnat. of_nat m = of_nat n + d --> d \<in> range of_nat"  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
166  | 
apply (induct n)  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
167  | 
apply (auto simp add: add_assoc)  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
168  | 
apply (case_tac x)  | 
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
169  | 
apply (auto simp add: add_commute [of 1])  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
170  | 
done  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
171  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
172  | 
lemma Nats_diff [simp]: "[|a \<in> Nats; b \<in> Nats|] ==> (a-b :: hypnat) \<in> Nats"  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
173  | 
by (simp add: Nats_eq_Standard)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
174  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
175  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
176  | 
subsection{*Infinite Hypernatural Numbers -- @{term HNatInfinite}*}
 | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
177  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
178  | 
definition  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
179  | 
(* the set of infinite hypernatural numbers *)  | 
| 
21404
 
eb85850d3eb7
more robust syntax for definition/abbreviation/notation;
 
wenzelm 
parents: 
20740 
diff
changeset
 | 
180  | 
HNatInfinite :: "hypnat set" where  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
181  | 
  "HNatInfinite = {n. n \<notin> Nats}"
 | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
182  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
183  | 
lemma Nats_not_HNatInfinite_iff: "(x \<in> Nats) = (x \<notin> HNatInfinite)"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
184  | 
by (simp add: HNatInfinite_def)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
185  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
186  | 
lemma HNatInfinite_not_Nats_iff: "(x \<in> HNatInfinite) = (x \<notin> Nats)"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
187  | 
by (simp add: HNatInfinite_def)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
188  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
189  | 
lemma star_of_neq_HNatInfinite: "N \<in> HNatInfinite \<Longrightarrow> star_of n \<noteq> N"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
190  | 
by (auto simp add: HNatInfinite_def Nats_eq_Standard)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
191  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
192  | 
lemma star_of_Suc_lessI:  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
193  | 
"\<And>N. \<lbrakk>star_of n < N; star_of (Suc n) \<noteq> N\<rbrakk> \<Longrightarrow> star_of (Suc n) < N"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
194  | 
by transfer (rule Suc_lessI)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
195  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
196  | 
lemma star_of_less_HNatInfinite:  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
197  | 
assumes N: "N \<in> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
198  | 
shows "star_of n < N"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
199  | 
proof (induct n)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
200  | 
case 0  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
201  | 
from N have "star_of 0 \<noteq> N" by (rule star_of_neq_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
202  | 
thus "star_of 0 < N" by simp  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
203  | 
next  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
204  | 
case (Suc n)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
205  | 
from N have "star_of (Suc n) \<noteq> N" by (rule star_of_neq_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
206  | 
with Suc show "star_of (Suc n) < N" by (rule star_of_Suc_lessI)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
207  | 
qed  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
208  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
209  | 
lemma star_of_le_HNatInfinite: "N \<in> HNatInfinite \<Longrightarrow> star_of n \<le> N"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
210  | 
by (rule star_of_less_HNatInfinite [THEN order_less_imp_le])  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
211  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
212  | 
subsubsection {* Closure Rules *}
 | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
213  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
214  | 
lemma Nats_less_HNatInfinite: "\<lbrakk>x \<in> Nats; y \<in> HNatInfinite\<rbrakk> \<Longrightarrow> x < y"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
215  | 
by (auto simp add: Nats_def star_of_less_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
216  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
217  | 
lemma Nats_le_HNatInfinite: "\<lbrakk>x \<in> Nats; y \<in> HNatInfinite\<rbrakk> \<Longrightarrow> x \<le> y"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
218  | 
by (rule Nats_less_HNatInfinite [THEN order_less_imp_le])  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
219  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
220  | 
lemma zero_less_HNatInfinite: "x \<in> HNatInfinite \<Longrightarrow> 0 < x"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
221  | 
by (simp add: Nats_less_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
222  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
223  | 
lemma one_less_HNatInfinite: "x \<in> HNatInfinite \<Longrightarrow> 1 < x"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
224  | 
by (simp add: Nats_less_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
225  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
226  | 
lemma one_le_HNatInfinite: "x \<in> HNatInfinite \<Longrightarrow> 1 \<le> x"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
227  | 
by (simp add: Nats_le_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
228  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
229  | 
lemma zero_not_mem_HNatInfinite [simp]: "0 \<notin> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
230  | 
by (simp add: HNatInfinite_def)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
231  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
232  | 
lemma Nats_downward_closed:  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
233  | 
"\<lbrakk>x \<in> Nats; (y::hypnat) \<le> x\<rbrakk> \<Longrightarrow> y \<in> Nats"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
234  | 
apply (simp only: linorder_not_less [symmetric])  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
235  | 
apply (erule contrapos_np)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
236  | 
apply (drule HNatInfinite_not_Nats_iff [THEN iffD2])  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
237  | 
apply (erule (1) Nats_less_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
238  | 
done  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
239  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
240  | 
lemma HNatInfinite_upward_closed:  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
241  | 
"\<lbrakk>x \<in> HNatInfinite; x \<le> y\<rbrakk> \<Longrightarrow> y \<in> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
242  | 
apply (simp only: HNatInfinite_not_Nats_iff)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
243  | 
apply (erule contrapos_nn)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
244  | 
apply (erule (1) Nats_downward_closed)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
245  | 
done  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
246  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
247  | 
lemma HNatInfinite_add: "x \<in> HNatInfinite \<Longrightarrow> x + y \<in> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
248  | 
apply (erule HNatInfinite_upward_closed)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
249  | 
apply (rule hypnat_le_add1)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
250  | 
done  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
251  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
252  | 
lemma HNatInfinite_add_one: "x \<in> HNatInfinite \<Longrightarrow> x + 1 \<in> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
253  | 
by (rule HNatInfinite_add)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
254  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
255  | 
lemma HNatInfinite_diff:  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
256  | 
"\<lbrakk>x \<in> HNatInfinite; y \<in> Nats\<rbrakk> \<Longrightarrow> x - y \<in> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
257  | 
apply (frule (1) Nats_le_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
258  | 
apply (simp only: HNatInfinite_not_Nats_iff)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
259  | 
apply (erule contrapos_nn)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
260  | 
apply (drule (1) Nats_add, simp)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
261  | 
done  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
262  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
263  | 
lemma HNatInfinite_is_Suc: "x \<in> HNatInfinite ==> \<exists>y. x = y + (1::hypnat)"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
264  | 
apply (rule_tac x = "x - (1::hypnat) " in exI)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
265  | 
apply (simp add: Nats_le_HNatInfinite)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
266  | 
done  | 
| 17433 | 267  | 
|
268  | 
||
269  | 
subsection{*Existence of an infinite hypernatural number*}
 | 
|
270  | 
||
| 19765 | 271  | 
definition  | 
| 17433 | 272  | 
(* omega is in fact an infinite hypernatural number = [<1,2,3,...>] *)  | 
| 
21404
 
eb85850d3eb7
more robust syntax for definition/abbreviation/notation;
 
wenzelm 
parents: 
20740 
diff
changeset
 | 
273  | 
whn :: hypnat where  | 
| 19765 | 274  | 
hypnat_omega_def: "whn = star_n (%n::nat. n)"  | 
| 17433 | 275  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
276  | 
lemma hypnat_of_nat_neq_whn: "hypnat_of_nat n \<noteq> whn"  | 
| 
21855
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
277  | 
by (simp add: hypnat_omega_def star_of_def star_n_eq_iff)  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
278  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
279  | 
lemma whn_neq_hypnat_of_nat: "whn \<noteq> hypnat_of_nat n"  | 
| 
21855
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
280  | 
by (simp add: hypnat_omega_def star_of_def star_n_eq_iff)  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
281  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
282  | 
lemma whn_not_Nats [simp]: "whn \<notin> Nats"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
283  | 
by (simp add: Nats_def image_def whn_neq_hypnat_of_nat)  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
284  | 
|
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
285  | 
lemma HNatInfinite_whn [simp]: "whn \<in> HNatInfinite"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
286  | 
by (simp add: HNatInfinite_def)  | 
| 17433 | 287  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
288  | 
lemma lemma_unbounded_set [simp]: "{n::nat. m < n} \<in> FreeUltrafilterNat"
 | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
289  | 
apply (insert finite_atMost [of m])  | 
| 
21855
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
290  | 
apply (simp add: atMost_def)  | 
| 
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
291  | 
apply (drule FreeUltrafilterNat.finite)  | 
| 
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
292  | 
apply (drule FreeUltrafilterNat.not_memD)  | 
| 
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
293  | 
apply (simp add: Collect_neg_eq [symmetric] linorder_not_le)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
294  | 
done  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
295  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
296  | 
lemma Compl_Collect_le: "- {n::nat. N \<le> n} = {n. n < N}"
 | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
297  | 
by (simp add: Collect_neg_eq [symmetric] linorder_not_le)  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
298  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
299  | 
lemma hypnat_of_nat_eq:  | 
| 
17318
 
bc1c75855f3d
starfun, starset, and other functions on NS types are now polymorphic;
 
huffman 
parents: 
17299 
diff
changeset
 | 
300  | 
"hypnat_of_nat m = star_n (%n::nat. m)"  | 
| 
17429
 
e8d6ed3aacfe
merged Transfer.thy and StarType.thy into StarDef.thy; renamed Ifun2_of to starfun2; cleaned up
 
huffman 
parents: 
17332 
diff
changeset
 | 
301  | 
by (simp add: star_of_def)  | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
302  | 
|
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
303  | 
lemma SHNat_eq: "Nats = {n. \<exists>N. n = hypnat_of_nat N}"
 | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
304  | 
by (simp add: Nats_def image_def)  | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
305  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
306  | 
lemma Nats_less_whn: "n \<in> Nats \<Longrightarrow> n < whn"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
307  | 
by (simp add: Nats_less_HNatInfinite)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
308  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
309  | 
lemma Nats_le_whn: "n \<in> Nats \<Longrightarrow> n \<le> whn"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
310  | 
by (simp add: Nats_le_HNatInfinite)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
311  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
312  | 
lemma hypnat_of_nat_less_whn [simp]: "hypnat_of_nat n < whn"  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
313  | 
by (simp add: Nats_less_whn)  | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
314  | 
|
| 
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
315  | 
lemma hypnat_of_nat_le_whn [simp]: "hypnat_of_nat n \<le> whn"  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
316  | 
by (simp add: Nats_le_whn)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
317  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
318  | 
lemma hypnat_zero_less_hypnat_omega [simp]: "0 < whn"  | 
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
319  | 
by (simp add: Nats_less_whn)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
320  | 
|
| 
20740
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
321  | 
lemma hypnat_one_less_hypnat_omega [simp]: "1 < whn"  | 
| 
 
5a103b43da5a
reorganized HNatInfinite proofs; simplified and renamed some lemmas
 
huffman 
parents: 
20730 
diff
changeset
 | 
322  | 
by (simp add: Nats_less_whn)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
323  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
324  | 
|
| 17433 | 325  | 
subsubsection{*Alternative characterization of the set of infinite hypernaturals*}
 | 
| 15070 | 326  | 
|
327  | 
text{* @{term "HNatInfinite = {N. \<forall>n \<in> Nats. n < N}"}*}
 | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
328  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
329  | 
(*??delete? similar reasoning in hypnat_omega_gt_SHNat above*)  | 
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
330  | 
lemma HNatInfinite_FreeUltrafilterNat_lemma:  | 
| 
27105
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
331  | 
  assumes "\<forall>N::nat. {n. f n \<noteq> N} \<in> FreeUltrafilterNat"
 | 
| 
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
332  | 
  shows "{n. N < f n} \<in> FreeUltrafilterNat"
 | 
| 
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
333  | 
apply (induct N)  | 
| 
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
334  | 
using assms  | 
| 25162 | 335  | 
apply (drule_tac x = 0 in spec, simp)  | 
| 
27105
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
336  | 
using assms  | 
| 
 
5f139027c365
slightly tuning of some proofs involving case distinction and induction on natural numbers and similar
 
haftmann 
parents: 
25601 
diff
changeset
 | 
337  | 
apply (drule_tac x = "Suc N" in spec)  | 
| 
21855
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
338  | 
apply (elim ultra, auto)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
339  | 
done  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
340  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
341  | 
lemma HNatInfinite_iff: "HNatInfinite = {N. \<forall>n \<in> Nats. n < N}"
 | 
| 
21855
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
342  | 
apply (safe intro!: Nats_less_HNatInfinite)  | 
| 
 
74909ecaf20a
remove ultra tactic and redundant FreeUltrafilterNat lemmas
 
huffman 
parents: 
21847 
diff
changeset
 | 
343  | 
apply (auto simp add: HNatInfinite_def)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
344  | 
done  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
345  | 
|
| 
14378
 
69c4d5997669
generic of_nat and of_int functions, and generalization of iszero
 
paulson 
parents: 
14371 
diff
changeset
 | 
346  | 
|
| 17433 | 347  | 
subsubsection{*Alternative Characterization of @{term HNatInfinite} using 
 | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
348  | 
Free Ultrafilter*}  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
349  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
350  | 
lemma HNatInfinite_FreeUltrafilterNat:  | 
| 
20552
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
351  | 
     "star_n X \<in> HNatInfinite ==> \<forall>u. {n. u < X n}:  FreeUltrafilterNat"
 | 
| 
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
352  | 
apply (auto simp add: HNatInfinite_iff SHNat_eq)  | 
| 
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
353  | 
apply (drule_tac x="star_of u" in spec, simp)  | 
| 
21865
 
55cc354fd2d9
moved several theorems; rearranged theory dependencies
 
huffman 
parents: 
21864 
diff
changeset
 | 
354  | 
apply (simp add: star_of_def star_less_def starP2_star_n)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
355  | 
done  | 
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
356  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
357  | 
lemma FreeUltrafilterNat_HNatInfinite:  | 
| 
20552
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
358  | 
     "\<forall>u. {n. u < X n}:  FreeUltrafilterNat ==> star_n X \<in> HNatInfinite"
 | 
| 
21865
 
55cc354fd2d9
moved several theorems; rearranged theory dependencies
 
huffman 
parents: 
21864 
diff
changeset
 | 
359  | 
by (auto simp add: star_less_def starP2_star_n HNatInfinite_iff SHNat_eq hypnat_of_nat_eq)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
360  | 
|
| 
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
361  | 
lemma HNatInfinite_FreeUltrafilterNat_iff:  | 
| 
20552
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
362  | 
     "(star_n X \<in> HNatInfinite) = (\<forall>u. {n. u < X n}:  FreeUltrafilterNat)"
 | 
| 
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
363  | 
by (rule iffI [OF HNatInfinite_FreeUltrafilterNat  | 
| 
 
2c31dd358c21
generalized types of many constants to work over arbitrary vector spaces;
 
huffman 
parents: 
19765 
diff
changeset
 | 
364  | 
FreeUltrafilterNat_HNatInfinite])  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
365  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
366  | 
subsection {* Embedding of the Hypernaturals into other types *}
 | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
367  | 
|
| 19765 | 368  | 
definition  | 
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
369  | 
of_hypnat :: "hypnat \<Rightarrow> 'a::semiring_1_cancel star" where  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
370  | 
of_hypnat_def [transfer_unfold]: "of_hypnat = *f* of_nat"  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
371  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
372  | 
lemma of_hypnat_0 [simp]: "of_hypnat 0 = 0"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
373  | 
by transfer (rule of_nat_0)  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
374  | 
|
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
375  | 
lemma of_hypnat_1 [simp]: "of_hypnat 1 = 1"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
376  | 
by transfer (rule of_nat_1)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
377  | 
|
| 
23431
 
25ca91279a9b
change simp rules for of_nat to work like int did previously (reorient of_nat_Suc, remove of_nat_mult [simp]); preserve original variable names in legacy int theorems
 
huffman 
parents: 
21865 
diff
changeset
 | 
378  | 
lemma of_hypnat_hSuc: "\<And>m. of_hypnat (hSuc m) = 1 + of_hypnat m"  | 
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
379  | 
by transfer (rule of_nat_Suc)  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
380  | 
|
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
381  | 
lemma of_hypnat_add [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
382  | 
"\<And>m n. of_hypnat (m + n) = of_hypnat m + of_hypnat n"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
383  | 
by transfer (rule of_nat_add)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
384  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
385  | 
lemma of_hypnat_mult [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
386  | 
"\<And>m n. of_hypnat (m * n) = of_hypnat m * of_hypnat n"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
387  | 
by transfer (rule of_nat_mult)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
388  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
389  | 
lemma of_hypnat_less_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
390  | 
"\<And>m n. (of_hypnat m < (of_hypnat n::'a::ordered_semidom star)) = (m < n)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
391  | 
by transfer (rule of_nat_less_iff)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
392  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
393  | 
lemma of_hypnat_0_less_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
394  | 
"\<And>n. (0 < (of_hypnat n::'a::ordered_semidom star)) = (0 < n)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
395  | 
by transfer (rule of_nat_0_less_iff)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
396  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
397  | 
lemma of_hypnat_less_0_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
398  | 
"\<And>m. \<not> (of_hypnat m::'a::ordered_semidom star) < 0"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
399  | 
by transfer (rule of_nat_less_0_iff)  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
400  | 
|
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
401  | 
lemma of_hypnat_le_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
402  | 
"\<And>m n. (of_hypnat m \<le> (of_hypnat n::'a::ordered_semidom star)) = (m \<le> n)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
403  | 
by transfer (rule of_nat_le_iff)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
404  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
405  | 
lemma of_hypnat_0_le_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
406  | 
"\<And>n. 0 \<le> (of_hypnat n::'a::ordered_semidom star)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
407  | 
by transfer (rule of_nat_0_le_iff)  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
408  | 
|
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
409  | 
lemma of_hypnat_le_0_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
410  | 
"\<And>m. ((of_hypnat m::'a::ordered_semidom star) \<le> 0) = (m = 0)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
411  | 
by transfer (rule of_nat_le_0_iff)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
412  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
413  | 
lemma of_hypnat_eq_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
414  | 
"\<And>m n. (of_hypnat m = (of_hypnat n::'a::ordered_semidom star)) = (m = n)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
415  | 
by transfer (rule of_nat_eq_iff)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
416  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
417  | 
lemma of_hypnat_eq_0_iff [simp]:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
418  | 
"\<And>m. ((of_hypnat m::'a::ordered_semidom star) = 0) = (m = 0)"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
419  | 
by transfer (rule of_nat_eq_0_iff)  | 
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
420  | 
|
| 
21864
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
421  | 
lemma HNatInfinite_of_hypnat_gt_zero:  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
422  | 
"N \<in> HNatInfinite \<Longrightarrow> (0::'a::ordered_semidom star) < of_hypnat N"  | 
| 
 
2ecfd8985982
hypreal_of_hypnat abbreviates more general of_hypnat
 
huffman 
parents: 
21855 
diff
changeset
 | 
423  | 
by (rule ccontr, simp add: linorder_not_less)  | 
| 
14420
 
4e72cd222e0b
converted Hyperreal/HTranscendental to Isar script
 
paulson 
parents: 
14415 
diff
changeset
 | 
424  | 
|
| 
14371
 
c78c7da09519
Conversion of HyperNat to Isar format and its declaration as a semiring
 
paulson 
parents: 
13487 
diff
changeset
 | 
425  | 
end  |