我想在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
上定义的等价进行比较。
非常感谢所有帮助。
答案 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
.