gpt4 book ai didi

coq - Coq 中归纳集的归纳子集

转载 作者:行者123 更新时间:2023-12-02 09:28:47 28 4
gpt4 key购买 nike

我有一个用三个构造函数构建的归纳集:

Inductive MF : Set :=
| D : MF
| cn : MF -> MF -> MF
| dn : Z -> MF -> MF.

我想以某种方式定义一个新的归纳集 B,使得 B 是 MF 的子集,仅包含从 D 和 dn 获得的元素。此外,如果需要,B 中的所有内容都应解释为 MF 类型。

我尝试先定义 B,然后定义 MF,如下所示:

Inductive B : Set :=
| D : B
| dn : Z -> B -> B.

Inductive MF : Set :=
| m : B -> MF
| cn : MF -> MF -> MF
| Dn : Z -> MF -> MF.
Axiom m_inj : forall (a b : B), m a = m b -> a = b.
Coercion m : B >-> MF.
Axiom dnDn : forall (a : B)(i : Z), (m (dn i a)) = (Dn i (m a)).

这里的问题是我必须构造函数(dn 和 Dn),它们应该可以与 B 中的元素互换。这在进一步的开发中给我带来了很多问题,我必须不断添加公理才能获得预期行为。

最佳答案

请注意,您必须证明 isB mf 在您的设置中享有证明无关性,否则 Coq 将不知道投影 mf 是单射的。通常,您希望 MF 中的相等性来暗示子类型 B 中的相等性。

我建议采用以下变体:

Require Import Bool ZArith Eqdep_dec.

Inductive MF : Set :=
| D : MF
| cn : MF -> MF -> MF
| dn : Z -> MF -> MF.

Inductive isB : MF -> Prop :=
| DIsOK : isB D
| dnIsOK : forall z mf, isB mf -> isB (dn z mf).

Fixpoint isBb (mf : MF) : bool :=
match mf with
| D => true
| dn _ mf => isBb mf
| _ => false
end.

Lemma mfP mf : reflect (isB mf) (isBb mf).
Proof.
apply iff_reflect; split.
+ elim mf; auto; simpl; intros mf1 ihmf1 mf2 ihmf2.
- now intros hisB; inversion hisB.
- now inversion ihmf2; rewrite mf2.
+ now elim mf; simpl; try repeat (auto||constructor||congruence).
Qed.

Record B := mkB
{ mf : MF
; prf : isBb mf = true
}.

Coercion mf : B >-> MF.

(* From http://cstheory.stackexchange.com/questions/5158/prove-proof-irrelevance-in-coq *)
Theorem bool_pirrel : forall (b : bool) (p1 p2 : b = true), p1 = p2.
Proof.
intros; apply Eqdep_dec.eq_proofs_unicity; intros.
now destruct (Bool.bool_dec x y); tauto.
Qed.

Lemma valB b1 b2 : mf b1 = mf b2 -> b1 = b2.
Proof.
destruct b1, b2; simpl; intros ->.
now rewrite (bool_pirrel (isBb mf1) prf0 prf1).
Qed.

math-comp 库对 bool 谓词的子类型提供了强大而系统的支持,如果您发现自己正在处理许多子类型,您可能想尝试一下。

关于coq - Coq 中归纳集的归纳子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35290012/

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