src/HOL/Nat.thy
changeset 25559 f14305fb698c
parent 25534 d0b74fdd6067
child 25563 cab4f808f791
equal deleted inserted replaced
25558:5c317e8f5673 25559:f14305fb698c
  1155   @{text semiring_1}: @{term of_nat} *}
  1155   @{text semiring_1}: @{term of_nat} *}
  1156 
  1156 
  1157 context semiring_1
  1157 context semiring_1
  1158 begin
  1158 begin
  1159 
  1159 
  1160 definition
  1160 primrec
  1161   of_nat_def: "of_nat = nat_rec 0 (\<lambda>_. (op +) 1)"
  1161   of_nat :: "nat \<Rightarrow> 'a"
  1162 
  1162 where
  1163 lemma of_nat_simps [simp, code]:
  1163   of_nat_0:     "of_nat 0 = 0"
  1164   shows of_nat_0:   "of_nat 0 = 0"
  1164   | of_nat_Suc: "of_nat (Suc m) = 1 + of_nat m"
  1165     and of_nat_Suc: "of_nat (Suc m) = 1 + of_nat m"
       
  1166   unfolding of_nat_def by simp_all
       
  1167 
  1165 
  1168 lemma of_nat_1 [simp]: "of_nat 1 = 1"
  1166 lemma of_nat_1 [simp]: "of_nat 1 = 1"
  1169   by simp
  1167   by simp
  1170 
  1168 
  1171 lemma of_nat_add [simp]: "of_nat (m + n) = of_nat m + of_nat n"
  1169 lemma of_nat_add [simp]: "of_nat (m + n) = of_nat m + of_nat n"
  1452   "Nats = range of_nat"
  1450   "Nats = range of_nat"
  1453 
  1451 
  1454 notation (xsymbols)
  1452 notation (xsymbols)
  1455   Nats  ("\<nat>")
  1453   Nats  ("\<nat>")
  1456 
  1454 
  1457 end
       
  1458 
       
  1459 context semiring_1
       
  1460 begin
       
  1461 
       
  1462 lemma of_nat_in_Nats [simp]: "of_nat n \<in> \<nat>"
  1455 lemma of_nat_in_Nats [simp]: "of_nat n \<in> \<nat>"
  1463   by (simp add: Nats_def)
  1456   by (simp add: Nats_def)
  1464 
  1457 
  1465 lemma Nats_0 [simp]: "0 \<in> \<nat>"
  1458 lemma Nats_0 [simp]: "0 \<in> \<nat>"
  1466 apply (simp add: Nats_def)
  1459 apply (simp add: Nats_def)
  1489 end
  1482 end
  1490 
  1483 
  1491 
  1484 
  1492 text {* the lattice order on @{typ nat} *}
  1485 text {* the lattice order on @{typ nat} *}
  1493 
  1486 
  1494 instance nat :: distrib_lattice
  1487 instantiation nat :: distrib_lattice
       
  1488 begin
       
  1489 
       
  1490 definition
  1495   "(inf \<Colon> nat \<Rightarrow> nat \<Rightarrow> nat) = min"
  1491   "(inf \<Colon> nat \<Rightarrow> nat \<Rightarrow> nat) = min"
       
  1492 
       
  1493 definition
  1496   "(sup \<Colon> nat \<Rightarrow> nat \<Rightarrow> nat) = max"
  1494   "(sup \<Colon> nat \<Rightarrow> nat \<Rightarrow> nat) = max"
  1497   by intro_classes
  1495 
  1498     (simp_all add: inf_nat_def sup_nat_def)
  1496 instance by intro_classes
       
  1497   (simp_all add: inf_nat_def sup_nat_def)
       
  1498 
       
  1499 end
  1499 
  1500 
  1500 
  1501 
  1501 subsection {* legacy bindings *}
  1502 subsection {* legacy bindings *}
  1502 
  1503 
  1503 ML
  1504 ML