鉴于以下假设:
Variable A : finType.
Variable B : finType.
Variable C : finType.记录的定义为:
Record example := Example {
example_A : A;
example_B : B;
example_C : C;
}.从直觉上看,似乎也必须以finType为例。
查看其他代码库,我看到人们使用表单的构造来派生只有一个非验证术语的记录的finType。
Definition <record>_subType := Eval hnf in [subtype for <record-accessor>].
Definition <record>_finMixin := Eval hnf in [finMixin of <record> by <:].但是在这种情况下,记录中有多个字段。
是否有自动为记录派生fintype的方法,如果没有,如何为记录派生fintype?
发布于 2018-07-25 15:01:19
通过显示您的类型是实现该接口的其他类型的撤回,可以导出数学组件中的许多接口实现。在您的示例中,我们只需将记录转换为元组。
From mathcomp Require Import
ssreflect ssrfun ssrbool ssrnat eqtype seq choice fintype.
Variables A B C : finType.
Record example := Example {
example_A : A;
example_B : B;
example_C : C
}.
Definition prod_of_example e :=
let: Example a b c := e in (a, b, c).
Definition example_of_prod p :=
let: (a, b, c) := p in Example a b c.
Lemma prod_of_exampleK : cancel prod_of_example example_of_prod.
Proof. by case. Qed.
Definition example_eqMixin :=
CanEqMixin prod_of_exampleK.
Canonical example_eqType :=
Eval hnf in EqType example example_eqMixin.
Definition example_choiceMixin :=
CanChoiceMixin prod_of_exampleK.
Canonical example_choiceType :=
Eval hnf in ChoiceType example example_choiceMixin.
Definition example_countMixin :=
CanCountMixin prod_of_exampleK.
Canonical example_countType :=
Eval hnf in CountType example example_countMixin.
Definition example_finMixin :=
CanFinMixin prod_of_exampleK.
Canonical example_finType :=
Eval hnf in FinType example example_finMixin.在这个片段的末尾,example被声明为一个finType。(请注意,eqType、choiceType等的所有其他声明也是必要的,因为finType是这些声明的子类。)
https://stackoverflow.com/questions/51516954
复制相似问题