| author | blanchet | 
| Thu, 06 Dec 2012 11:25:10 +0100 | |
| changeset 50389 | ad0ac9112d2c | 
| parent 50023 | 28f3263d4d1b | 
| child 51095 | 7ae79f2e3cc7 | 
| permissions | -rw-r--r-- | 
| 
50023
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
1  | 
(* Title: HOL/Library/Code_Target_Nat.thy  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
2  | 
Author: Stefan Berghofer, Florian Haftmann, TU Muenchen  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
3  | 
*)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
4  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
5  | 
header {* Implementation of natural numbers by target-language integers *}
 | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
6  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
7  | 
theory Code_Target_Nat  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
8  | 
imports Main Code_Numeral_Types Code_Binary_Nat  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
9  | 
begin  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
10  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
11  | 
subsection {* Implementation for @{typ nat} *}
 | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
12  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
13  | 
definition Nat :: "integer \<Rightarrow> nat"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
14  | 
where  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
15  | 
"Nat = nat_of_integer"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
16  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
17  | 
definition integer_of_nat :: "nat \<Rightarrow> integer"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
18  | 
where  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
19  | 
[code_abbrev]: "integer_of_nat = of_nat"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
20  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
21  | 
lemma int_of_integer_integer_of_nat [simp]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
22  | 
"int_of_integer (integer_of_nat n) = of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
23  | 
by (simp add: integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
24  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
25  | 
lemma [code_unfold]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
26  | 
"Int.nat (int_of_integer k) = nat_of_integer k"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
27  | 
by (simp add: nat_of_integer_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
28  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
29  | 
lemma [code abstype]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
30  | 
"Code_Target_Nat.Nat (integer_of_nat n) = n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
31  | 
by (simp add: Nat_def integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
32  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
33  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
34  | 
"integer_of_nat (nat_of_integer k) = max 0 k"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
35  | 
by (simp add: integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
36  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
37  | 
lemma [code_abbrev]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
38  | 
"nat_of_integer (Code_Numeral_Types.Pos k) = nat_of_num k"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
39  | 
by (simp add: nat_of_integer_def nat_of_num_numeral)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
40  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
41  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
42  | 
"integer_of_nat (nat_of_num n) = integer_of_num n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
43  | 
by (simp add: integer_eq_iff integer_of_num_def nat_of_num_numeral)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
44  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
45  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
46  | 
"integer_of_nat 0 = 0"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
47  | 
by (simp add: integer_eq_iff integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
48  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
49  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
50  | 
"integer_of_nat 1 = 1"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
51  | 
by (simp add: integer_eq_iff integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
52  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
53  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
54  | 
"integer_of_nat (m + n) = of_nat m + of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
55  | 
by (simp add: integer_eq_iff integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
56  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
57  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
58  | 
"integer_of_nat (Code_Binary_Nat.dup n) = Code_Numeral_Types.dup (of_nat n)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
59  | 
by (simp add: integer_eq_iff Code_Binary_Nat.dup_def integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
60  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
61  | 
lemma [code, code del]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
62  | 
"Code_Binary_Nat.sub = Code_Binary_Nat.sub" ..  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
63  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
64  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
65  | 
"integer_of_nat (m - n) = max 0 (of_nat m - of_nat n)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
66  | 
by (simp add: integer_eq_iff integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
67  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
68  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
69  | 
"integer_of_nat (m * n) = of_nat m * of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
70  | 
by (simp add: integer_eq_iff of_nat_mult integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
71  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
72  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
73  | 
"integer_of_nat (m div n) = of_nat m div of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
74  | 
by (simp add: integer_eq_iff zdiv_int integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
75  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
76  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
77  | 
"integer_of_nat (m mod n) = of_nat m mod of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
78  | 
by (simp add: integer_eq_iff zmod_int integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
79  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
80  | 
lemma [code]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
81  | 
"Divides.divmod_nat m n = (m div n, m mod n)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
82  | 
by (simp add: prod_eq_iff)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
83  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
84  | 
lemma [code]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
85  | 
"HOL.equal m n = HOL.equal (of_nat m :: integer) (of_nat n)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
86  | 
by (simp add: equal integer_eq_iff)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
87  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
88  | 
lemma [code]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
89  | 
"m \<le> n \<longleftrightarrow> (of_nat m :: integer) \<le> of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
90  | 
by simp  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
91  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
92  | 
lemma [code]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
93  | 
"m < n \<longleftrightarrow> (of_nat m :: integer) < of_nat n"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
94  | 
by simp  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
95  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
96  | 
lemma num_of_nat_code [code]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
97  | 
"num_of_nat = num_of_integer \<circ> of_nat"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
98  | 
by (simp add: fun_eq_iff num_of_integer_def integer_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
99  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
100  | 
lemma (in semiring_1) of_nat_code:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
101  | 
"of_nat n = (if n = 0 then 0  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
102  | 
else let  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
103  | 
(m, q) = divmod_nat n 2;  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
104  | 
m' = 2 * of_nat m  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
105  | 
in if q = 0 then m' else m' + 1)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
106  | 
proof -  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
107  | 
from mod_div_equality have *: "of_nat n = of_nat (n div 2 * 2 + n mod 2)" by simp  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
108  | 
show ?thesis  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
109  | 
by (simp add: Let_def divmod_nat_div_mod mod_2_not_eq_zero_eq_one_nat  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
110  | 
of_nat_add [symmetric])  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
111  | 
(simp add: * mult_commute of_nat_mult add_commute)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
112  | 
qed  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
113  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
114  | 
declare of_nat_code [code]  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
115  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
116  | 
definition int_of_nat :: "nat \<Rightarrow> int" where  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
117  | 
[code_abbrev]: "int_of_nat = of_nat"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
118  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
119  | 
lemma [code]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
120  | 
"int_of_nat n = int_of_integer (of_nat n)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
121  | 
by (simp add: int_of_nat_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
122  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
123  | 
lemma [code abstract]:  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
124  | 
"integer_of_nat (nat k) = max 0 (integer_of_int k)"  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
125  | 
by (simp add: integer_of_nat_def of_int_of_nat max_def)  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
126  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
127  | 
code_modulename SML  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
128  | 
Code_Target_Nat Arith  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
129  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
130  | 
code_modulename OCaml  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
131  | 
Code_Target_Nat Arith  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
132  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
133  | 
code_modulename Haskell  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
134  | 
Code_Target_Nat Arith  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
135  | 
|
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
136  | 
end  | 
| 
 
28f3263d4d1b
refined stack of library theories implementing int and/or nat by target language numerals
 
haftmann 
parents:  
diff
changeset
 | 
137  |