类型上的Fixpoint

时间:2014-02-16 14:28:41

标签: types coq

我想在Coq中创建一个函数(fixpoint是特定的),它将两种类型作为输入并告诉它们是否相同。该函数的签名可以作为

给出
Fixpoint areSame (X1 X2 : Type) : bool

如果有可能,请告诉我。

我创建了一个自定义数据类型,如下所示

Inductive State : Type :=
  | state : forall X:Type, X -> State.

现在我要比较任何两个给定的字符串。 让我们说我想比较形成如下的两个状态,

state bool true , state bool false

为了做到这一点,我必须首先确认两个状态都是使用bool类型定义的,然后将值与bool上定义的等价进行比较。

非常感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

在术语语言(Gallina)中不可能这样做,因为术语Type是开放的,因此例如你不能对其元素进行模式匹配。


我相信你的问题的解决方案是定义状态类型描述的归纳数据类型,以及它们在Type方面的解释:

Inductive StateType : Type :=
| Bool
.

Definition typeOfStateType (t : StateType) : Type :=
  match t with
  | Bool -> bool
  end.

Inductive State : Type :=
| state : forall (st : StateType), typeOfStateType st -> State
.