src/HOL/Library/Code_Target_Nat.thy
changeset 51113 222fb6cb2c3e
parent 51095 7ae79f2e3cc7
child 51114 3e913a575dc6
equal deleted inserted replaced
51112:da97167e03f7 51113:222fb6cb2c3e
     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