Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 类型固定点_Types_Coq - Fatal编程技术网

Types 类型固定点

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

我想在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
上定义的等价值进行比较


非常感谢所有帮助。

不可能使用术语语言(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
,人们可以很容易地推断出我需要类型的原因,允许任何可能的设置。