equal
deleted
inserted
replaced
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 |
|