src/HOL/Library/Nat_Infinity.thy
changeset 37765 26bdfb7b680b
parent 35028 108662d50512
child 38167 ab528533db92
equal deleted inserted replaced
37764:3489daf839d5 37765:26bdfb7b680b
   124 
   124 
   125 instantiation inat :: comm_monoid_add
   125 instantiation inat :: comm_monoid_add
   126 begin
   126 begin
   127 
   127 
   128 definition
   128 definition
   129   [code del]: "m + n = (case m of \<infinity> \<Rightarrow> \<infinity> | Fin m \<Rightarrow> (case n of \<infinity> \<Rightarrow> \<infinity> | Fin n \<Rightarrow> Fin (m + n)))"
   129   "m + n = (case m of \<infinity> \<Rightarrow> \<infinity> | Fin m \<Rightarrow> (case n of \<infinity> \<Rightarrow> \<infinity> | Fin n \<Rightarrow> Fin (m + n)))"
   130 
   130 
   131 lemma plus_inat_simps [simp, code]:
   131 lemma plus_inat_simps [simp, code]:
   132   "Fin m + Fin n = Fin (m + n)"
   132   "Fin m + Fin n = Fin (m + n)"
   133   "\<infinity> + q = \<infinity>"
   133   "\<infinity> + q = \<infinity>"
   134   "q + \<infinity> = \<infinity>"
   134   "q + \<infinity> = \<infinity>"
   175 
   175 
   176 instantiation inat :: comm_semiring_1
   176 instantiation inat :: comm_semiring_1
   177 begin
   177 begin
   178 
   178 
   179 definition
   179 definition
   180   times_inat_def [code del]:
   180   times_inat_def:
   181   "m * n = (case m of \<infinity> \<Rightarrow> if n = 0 then 0 else \<infinity> | Fin m \<Rightarrow>
   181   "m * n = (case m of \<infinity> \<Rightarrow> if n = 0 then 0 else \<infinity> | Fin m \<Rightarrow>
   182     (case n of \<infinity> \<Rightarrow> if m = 0 then 0 else \<infinity> | Fin n \<Rightarrow> Fin (m * n)))"
   182     (case n of \<infinity> \<Rightarrow> if m = 0 then 0 else \<infinity> | Fin n \<Rightarrow> Fin (m * n)))"
   183 
   183 
   184 lemma times_inat_simps [simp, code]:
   184 lemma times_inat_simps [simp, code]:
   185   "Fin m * Fin n = Fin (m * n)"
   185   "Fin m * Fin n = Fin (m * n)"
   236 
   236 
   237 instantiation inat :: linordered_ab_semigroup_add
   237 instantiation inat :: linordered_ab_semigroup_add
   238 begin
   238 begin
   239 
   239 
   240 definition
   240 definition
   241   [code del]: "m \<le> n = (case n of Fin n1 \<Rightarrow> (case m of Fin m1 \<Rightarrow> m1 \<le> n1 | \<infinity> \<Rightarrow> False)
   241   "m \<le> n = (case n of Fin n1 \<Rightarrow> (case m of Fin m1 \<Rightarrow> m1 \<le> n1 | \<infinity> \<Rightarrow> False)
   242     | \<infinity> \<Rightarrow> True)"
   242     | \<infinity> \<Rightarrow> True)"
   243 
   243 
   244 definition
   244 definition
   245   [code del]: "m < n = (case m of Fin m1 \<Rightarrow> (case n of Fin n1 \<Rightarrow> m1 < n1 | \<infinity> \<Rightarrow> True)
   245   "m < n = (case m of Fin m1 \<Rightarrow> (case n of Fin n1 \<Rightarrow> m1 < n1 | \<infinity> \<Rightarrow> True)
   246     | \<infinity> \<Rightarrow> False)"
   246     | \<infinity> \<Rightarrow> False)"
   247 
   247 
   248 lemma inat_ord_simps [simp]:
   248 lemma inat_ord_simps [simp]:
   249   "Fin m \<le> Fin n \<longleftrightarrow> m \<le> n"
   249   "Fin m \<le> Fin n \<longleftrightarrow> m \<le> n"
   250   "Fin m < Fin n \<longleftrightarrow> m < n"
   250   "Fin m < Fin n \<longleftrightarrow> m < n"