Inductive ty: Set :=
| I
| O.
Definition f (x: ty) (y: ty): nat :=
if x = y then 0 else 1.
我希望函数f
比较两个类型ty
的术语,但它不能编译,我看到了这个错误:
术语
x = y
的类型Prop
不是(共同)归纳类型。
答案 0 :(得分:3)
您需要证明ty
的相等性是可判定的(可以使用decide equality
自动完成),然后在if ... then ... else ...
语句中使用该定义。具体地:
Inductive ty: Set :=
| I
| O.
Definition ty_eq_dec : forall (x y : ty), { x = y } + { x <> y }.
Proof.
decide equality.
Defined.
Definition f (x: ty) (y: ty): nat :=
if ty_eq_dec x y then 0 else 1.
答案 1 :(得分:1)
您可以使用match
来比较归纳数据类型的元素。
Definition f x y := match x,y with I, I | O, O => 0 | _,_ => 1 end.
decide equality
是一种更为通用的策略,适用于无限集,但很高兴知道正在进行实际工作的是match
。