gpt4 book ai didi

coq - 在 coq 中导出记录的规范结构 (ssreflect)

转载 作者:行者123 更新时间:2023-12-02 20:34:56 26 4
gpt4 key购买 nike

考虑到以下假设:

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?

最佳答案

数学组件中的许多接口(interface)实现可以通过显示您的类型是实现该接口(interface)的其他类型的缩回来派生。在您的示例中,我们只需将记录转换为元组。

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。 (请注意,eqTypechoiceType 等的所有其他声明也是必要的,因为 finType 是它们的子类。)

关于coq - 在 coq 中导出记录的规范结构 (ssreflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51516954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com