src/HOL/Nat.thy
changeset 36176 3fe7e97ccca8
parent 35828 46cfc4b8112e
child 36977 71c8973a604b
equal deleted inserted replaced
36175:5cec4ca719d1 36176:3fe7e97ccca8
   173   show "0 + n = n" by simp
   173   show "0 + n = n" by simp
   174 qed
   174 qed
   175 
   175 
   176 end
   176 end
   177 
   177 
   178 hide (open) fact add_0 add_0_right diff_0
   178 hide_fact (open) add_0 add_0_right diff_0
   179 
   179 
   180 instantiation nat :: comm_semiring_1_cancel
   180 instantiation nat :: comm_semiring_1_cancel
   181 begin
   181 begin
   182 
   182 
   183 definition
   183 definition
  1210 lemma [code]:
  1210 lemma [code]:
  1211   "funpow 0 f = id"
  1211   "funpow 0 f = id"
  1212   "funpow (Suc n) f = f o funpow n f"
  1212   "funpow (Suc n) f = f o funpow n f"
  1213   unfolding funpow_code_def by simp_all
  1213   unfolding funpow_code_def by simp_all
  1214 
  1214 
  1215 hide (open) const funpow
  1215 hide_const (open) funpow
  1216 
  1216 
  1217 lemma funpow_add:
  1217 lemma funpow_add:
  1218   "f ^^ (m + n) = f ^^ m \<circ> f ^^ n"
  1218   "f ^^ (m + n) = f ^^ m \<circ> f ^^ n"
  1219   by (induct m) simp_all
  1219   by (induct m) simp_all
  1220 
  1220 
  1502 text {* Simplification of relational expressions involving subtraction *}
  1502 text {* Simplification of relational expressions involving subtraction *}
  1503 
  1503 
  1504 lemma diff_diff_eq: "[| k \<le> m;  k \<le> (n::nat) |] ==> ((m-k) - (n-k)) = (m-n)"
  1504 lemma diff_diff_eq: "[| k \<le> m;  k \<le> (n::nat) |] ==> ((m-k) - (n-k)) = (m-n)"
  1505 by (simp split add: nat_diff_split)
  1505 by (simp split add: nat_diff_split)
  1506 
  1506 
  1507 hide (open) fact diff_diff_eq
  1507 hide_fact (open) diff_diff_eq
  1508 
  1508 
  1509 lemma eq_diff_iff: "[| k \<le> m;  k \<le> (n::nat) |] ==> (m-k = n-k) = (m=n)"
  1509 lemma eq_diff_iff: "[| k \<le> m;  k \<le> (n::nat) |] ==> (m-k = n-k) = (m=n)"
  1510 by (auto split add: nat_diff_split)
  1510 by (auto split add: nat_diff_split)
  1511 
  1511 
  1512 lemma less_diff_iff: "[| k \<le> m;  k \<le> (n::nat) |] ==> (m-k < n-k) = (m<n)"
  1512 lemma less_diff_iff: "[| k \<le> m;  k \<le> (n::nat) |] ==> (m-k < n-k) = (m<n)"