关于coq的很基本的问题。如何定义以下两种归纳类型?
类型1包含:o fo,fo,ffo...k,sk,ssk,ssk...注意这里的f也可以表征为o的自然数指数。
类型2包含相同的内容,但现在我们也可以有fsffsk和sfso这样的术语。
如果我对你的第一种类型理解正确的话,你可以通过结合Coq标准库中定义的简单类型来表示它。
Definition t1 : Type := nat + nat.
这个... +
类型上的运算符是两个类型的不相干联合。 我们的想法是,元素 inl n
,注入到联合体的左边,代表字符串。fff...o
,与 n
的出现 f
而元素 inr n
,它被注入到联合体的右边,代表字符串 sss...k
,与 n
的出现 s
.
我不明白第二种类型的模式。你真的想写 fsffsk
而不是 fsfsfsk
?
你真的需要把type2的定义建立在type1的基础上吗?因为实际上只是一个简单的定义。
Inductive type2 : Type :=
| o : type2
| k : type2
| f : type2 -> type2
| s : type2 -> type2
.
然后定义像:
Definition typeExample : type2 := f (s (f (s (s (f (s (k))))))).