src/HOL/Nat.thy
changeset 70490 c42a0a0a9a8d
parent 70365 4df0628e8545
child 71404 f2b783abfbe7
equal deleted inserted replaced
70489:12d1e6e2c1d0 70490:c42a0a0a9a8d
  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>