equal
deleted
inserted
replaced
1885 lemma subst_equals: |
1885 lemma subst_equals: |
1886 assumes "t = s" and "u = t" |
1886 assumes "t = s" and "u = t" |
1887 shows "u = s" |
1887 shows "u = s" |
1888 using assms(2,1) by (rule trans) |
1888 using assms(2,1) by (rule trans) |
1889 |
1889 |
|
1890 locale nat_arith |
|
1891 begin |
|
1892 |
|
1893 lemma add1: "(A::'a::comm_monoid_add) \<equiv> k + a \<Longrightarrow> A + b \<equiv> k + (a + b)" |
|
1894 by (simp only: ac_simps) |
|
1895 |
|
1896 lemma add2: "(B::'a::comm_monoid_add) \<equiv> k + b \<Longrightarrow> a + B \<equiv> k + (a + b)" |
|
1897 by (simp only: ac_simps) |
|
1898 |
|
1899 lemma suc1: "A == k + a \<Longrightarrow> Suc A \<equiv> k + Suc a" |
|
1900 by (simp only: add_Suc_right) |
|
1901 |
|
1902 lemma rule0: "(a::'a::comm_monoid_add) \<equiv> a + 0" |
|
1903 by (simp only: add_0_right) |
|
1904 |
|
1905 end |
|
1906 |
1890 ML_file \<open>Tools/nat_arith.ML\<close> |
1907 ML_file \<open>Tools/nat_arith.ML\<close> |
1891 |
1908 |
1892 simproc_setup nateq_cancel_sums |
1909 simproc_setup nateq_cancel_sums |
1893 ("(l::nat) + m = n" | "(l::nat) = m + n" | "Suc m = n" | "m = Suc n") = |
1910 ("(l::nat) + m = n" | "(l::nat) = m + n" | "Suc m = n" | "m = Suc n") = |
1894 \<open>fn phi => try o Nat_Arith.cancel_eq_conv\<close> |
1911 \<open>fn phi => try o Nat_Arith.cancel_eq_conv\<close> |