equal
deleted
inserted
replaced
1 (* Title: HOL/Library/Code_Target_Nat.thy |
1 (* Title: HOL/Library/Code_Target_Nat.thy |
2 Author: Stefan Berghofer, Florian Haftmann, TU Muenchen |
2 Author: Florian Haftmann, TU Muenchen |
3 *) |
3 *) |
4 |
4 |
5 header {* Implementation of natural numbers by target-language integers *} |
5 header {* Implementation of natural numbers by target-language integers *} |
6 |
6 |
7 theory Code_Target_Nat |
7 theory Code_Target_Nat |
8 imports Main Code_Numeral_Types Code_Binary_Nat |
8 imports Code_Abstract_Nat Code_Numeral_Types |
9 begin |
9 begin |
10 |
10 |
11 subsection {* Implementation for @{typ nat} *} |
11 subsection {* Implementation for @{typ nat} *} |
12 |
12 |
13 definition Nat :: "integer \<Rightarrow> nat" |
13 definition Nat :: "integer \<Rightarrow> nat" |
50 |
50 |
51 lemma [code abstract]: |
51 lemma [code abstract]: |
52 "integer_of_nat 1 = 1" |
52 "integer_of_nat 1 = 1" |
53 by (simp add: integer_eq_iff integer_of_nat_def) |
53 by (simp add: integer_eq_iff integer_of_nat_def) |
54 |
54 |
|
55 lemma [code]: |
|
56 "Suc n = n + 1" |
|
57 by simp |
|
58 |
55 lemma [code abstract]: |
59 lemma [code abstract]: |
56 "integer_of_nat (m + n) = of_nat m + of_nat n" |
60 "integer_of_nat (m + n) = of_nat m + of_nat n" |
57 by (simp add: integer_eq_iff integer_of_nat_def) |
61 by (simp add: integer_eq_iff integer_of_nat_def) |
58 |
|
59 lemma [code abstract]: |
|
60 "integer_of_nat (Code_Binary_Nat.dup n) = Code_Numeral_Types.dup (of_nat n)" |
|
61 by (simp add: integer_eq_iff Code_Binary_Nat.dup_def integer_of_nat_def) |
|
62 |
|
63 lemma [code, code del]: |
|
64 "Code_Binary_Nat.sub = Code_Binary_Nat.sub" .. |
|
65 |
62 |
66 lemma [code abstract]: |
63 lemma [code abstract]: |
67 "integer_of_nat (m - n) = max 0 (of_nat m - of_nat n)" |
64 "integer_of_nat (m - n) = max 0 (of_nat m - of_nat n)" |
68 by (simp add: integer_eq_iff integer_of_nat_def) |
65 by (simp add: integer_eq_iff integer_of_nat_def) |
69 |
66 |