equal
deleted
inserted
replaced
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 |