8890
|
1 |
theory NatClass = FOL:;
|
|
2 |
|
|
3 |
consts
|
|
4 |
zero :: 'a ("0")
|
|
5 |
Suc :: "'a \\<Rightarrow> 'a"
|
|
6 |
rec :: "'a \\<Rightarrow> 'a \\<Rightarrow> ('a \\<Rightarrow> 'a \\<Rightarrow> 'a) \\<Rightarrow> 'a";
|
|
7 |
|
|
8 |
axclass
|
|
9 |
nat < "term"
|
|
10 |
induct: "P(0) \\<Longrightarrow> (\\<And>x. P(x) \\<Longrightarrow> P(Suc(x))) \\<Longrightarrow> P(n)"
|
|
11 |
Suc_inject: "Suc(m) = Suc(n) \\<Longrightarrow> m = n"
|
|
12 |
Suc_neq_0: "Suc(m) = 0 \\<Longrightarrow> R"
|
|
13 |
rec_0: "rec(0, a, f) = a"
|
|
14 |
rec_Suc: "rec(Suc(m), a, f) = f(m, rec(m, a, f))";
|
|
15 |
|
|
16 |
constdefs
|
|
17 |
add :: "'a::nat \\<Rightarrow> 'a \\<Rightarrow> 'a" (infixl "+" 60)
|
|
18 |
"m + n \\<equiv> rec(m, n, \\<lambda>x y. Suc(y))";
|
|
19 |
|
|
20 |
end; |