如何在Coq中比较相同Set的两个元素(相等)?

时间:2017-09-22 10:09:58

标签: coq

Inductive ty: Set :=
| I
| O.

Definition f (x: ty) (y: ty): nat :=
  if x = y then 0 else 1.

我希望函数f比较两个类型ty的术语,但它不能编译,我看到了这个错误:

  

术语x = y的类型Prop不是(共同)归纳类型。

2 个答案:

答案 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