Types 类型固定点
我想在Coq中创建一个函数(Types 类型固定点,types,coq,Types,Coq,我想在Coq中创建一个函数(fixpoint,具体来说),它接受两种类型作为输入,并告知它们是否相同。此函数的签名可以如下所示 Fixpoint areSame (X1 X2 : Type) : bool 请让我知道这是否可能 我创建一个自定义数据类型,如下所示 Inductive State : Type := | state : forall X:Type, X -> State. 现在我想比较任意两个给定的字符串。 假设我想比较两种状态,如下所示: state bool tr
fixpoint
,具体来说),它接受两种类型作为输入,并告知它们是否相同。此函数的签名可以如下所示
Fixpoint areSame (X1 X2 : Type) : bool
请让我知道这是否可能
我创建一个自定义数据类型,如下所示
Inductive State : Type :=
| state : forall X:Type, X -> State.
现在我想比较任意两个给定的字符串。
假设我想比较两种状态,如下所示:
state bool true , state bool false
为此,我必须首先确认这两个状态都是用类型bool
定义的,然后将值与bool
上定义的等价值进行比较
非常感谢所有帮助。不可能使用术语语言(Gallina)这样做,因为术语
类型是开放的,因此例如,您无法在其元素上进行模式匹配
我认为解决您问题的方法是定义状态类型描述的归纳数据类型,以及它们在类型方面的解释:
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
.
我之所以使用state:forall X:Type,X->state.
是因为state中包含了任意类型的实例。一开始的根本问题是找到一个集合的一般表示,因此我有归纳类型集{X:Type}:=|cset:(X->bool)->类型集。
所以基本上要创建任何集合,我需要一个签名的确定函数状态->bool
,人们可以很容易地推断出我需要类型的原因,允许任何可能的设置。