src/HOL/Code_Numeral.thy
changeset 58379 c044539a2bda
parent 58377 c6f93b8d2d8e
child 58390 b74d8470b98e
equal deleted inserted replaced
58378:cf6f16bc11a7 58379:c044539a2bda
   807   fixes m :: natural
   807   fixes m :: natural
   808   assumes "\<And>n. m = of_nat n \<Longrightarrow> P"
   808   assumes "\<And>n. m = of_nat n \<Longrightarrow> P"
   809   shows P
   809   shows P
   810   using assms by transfer blast
   810   using assms by transfer blast
   811 
   811 
       
   812 instantiation natural :: size
       
   813 begin
       
   814 
       
   815 definition size_natural :: "natural \<Rightarrow> nat" where
       
   816   [simp, code]: "size_natural = nat_of_natural"
       
   817 
       
   818 instance ..
       
   819 
       
   820 end
       
   821 
   812 lemma natural_decr [termination_simp]:
   822 lemma natural_decr [termination_simp]:
   813   "n \<noteq> 0 \<Longrightarrow> nat_of_natural n - Nat.Suc 0 < nat_of_natural n"
   823   "n \<noteq> 0 \<Longrightarrow> nat_of_natural n - Nat.Suc 0 < nat_of_natural n"
   814   by transfer simp
   824   by transfer simp
   815 
   825 
   816 lemma natural_zero_minus_one:
   826 lemma natural_zero_minus_one: "(0::natural) - 1 = 0"
   817   "(0::natural) - 1 = 0"
   827   by (rule zero_diff)
   818   by simp
   828 
   819 
   829 lemma Suc_natural_minus_one: "Suc n - 1 = n"
   820 lemma Suc_natural_minus_one:
       
   821   "Suc n - 1 = n"
       
   822   by transfer simp
   830   by transfer simp
   823 
   831 
   824 hide_const (open) Suc
   832 hide_const (open) Suc
   825 
   833 
   826 
   834 
   896 
   904 
   897 lemma [code]:
   905 lemma [code]:
   898   "HOL.equal m n \<longleftrightarrow> HOL.equal (integer_of_natural m) (integer_of_natural n)"
   906   "HOL.equal m n \<longleftrightarrow> HOL.equal (integer_of_natural m) (integer_of_natural n)"
   899   by transfer (simp add: equal)
   907   by transfer (simp add: equal)
   900 
   908 
   901 lemma [code nbe]:
   909 lemma [code nbe]: "HOL.equal n (n::natural) \<longleftrightarrow> True"
   902   "HOL.equal n (n::natural) \<longleftrightarrow> True"
   910   by (rule equal_class.equal_refl)
   903   by (simp add: equal)
   911 
   904 
   912 lemma [code]: "m \<le> n \<longleftrightarrow> integer_of_natural m \<le> integer_of_natural n"
   905 lemma [code]:
   913   by transfer simp
   906   "m \<le> n \<longleftrightarrow> integer_of_natural m \<le> integer_of_natural n"
   914 
   907   by transfer simp
   915 lemma [code]: "m < n \<longleftrightarrow> integer_of_natural m < integer_of_natural n"
   908 
       
   909 lemma [code]:
       
   910   "m < n \<longleftrightarrow> integer_of_natural m < integer_of_natural n"
       
   911   by transfer simp
   916   by transfer simp
   912 
   917 
   913 hide_const (open) Nat
   918 hide_const (open) Nat
   914 
   919 
   915 lifting_update integer.lifting
   920 lifting_update integer.lifting
   921 code_reflect Code_Numeral
   926 code_reflect Code_Numeral
   922   datatypes natural = _
   927   datatypes natural = _
   923   functions integer_of_natural natural_of_integer
   928   functions integer_of_natural natural_of_integer
   924 
   929 
   925 end
   930 end
   926