【问题标题】:Solve Proof with Circular Symmetry in Coq在 Coq 中用圆对称求解证明
【发布时间】:2019-02-05 15:37:23
【问题描述】:

我正在使用结构同余进行证明,其定义与此示例非常相似:

Require Import Nat.
Require Import Omega.

Inductive expr :=
  | Const : nat -> expr
  | Add : expr -> expr -> expr.


Reserved Notation "e1 === e2" (at level 80).
Inductive expr_congruence : expr -> expr -> Prop :=
  | Commutative : forall e1 e2, Add e1 e2 === Add e2 e1
  | Associative : forall e1 e2 e3, Add (Add e1 e2) e3 === Add e1 (Add e2 e3)
  | CongruenceReflexive : forall e, e === e
  | CongruenceSymmetric : forall e1 e2, e1 === e2 -> e2 === e1
  | CongruenceTransitive :
      forall e1 e2 e3, e1 === e2 -> e2 === e3 -> e1 === e3
  where "e1 === e2" := (expr_congruence e1 e2).

我在尝试定义forall e1 e2, e1 === e2 -> P e1 -> P e2 形式的东西时遇到了问题:我总是以循环逻辑结束。举个例子:

Inductive is_zero : expr -> Prop :=
  | ZConst : is_zero (Const 0)
  | ZAdd : forall e1 e2, is_zero e1 -> is_zero e2 -> is_zero (Add e1 e2).

Hint Constructors is_zero expr_congruence.

Lemma is_zero_over_congruence :
  forall e1 e2,
    e1 === e2 ->
    is_zero e1 ->
    is_zero e2.
Proof.
  induction 1; eauto; intros.

  Show 3.
(**
1 subgoal
e1, e2 : expr
H : e1 === e2
IHexpr_congruence : is_zero e1 -> is_zero e2
H0 : is_zero e2
**)

e1e2 之间的唯一联系是它们是全等的。对它们进行反演或归纳最终会回到相同的情况,这不会提供额外的信息。

当使用以这种方式定义的对称结构时,处理归纳的正确方法是什么?

【问题讨论】:

  • 您的问题很难阅读,因为未定义 MWE。
  • 当然,我可以编辑。

标签: coq induction


【解决方案1】:

至少在这个最小的例子中,你只需要证明一些更强大的东西:

Lemma is_zero_over_congruence :
  forall e1 e2, e1 === e2 -> is_zero e1 <-> is_zero e2.
Proof.
  induction 1.
  - split; intros HI; inversion HI; eauto.
  - split; intros HI; inversion HI; [inversion H1 | inversion H2]; eauto.
  - reflexivity.
  - symmetry. auto.
  - rewrite IHexpr_congruence1, IHexpr_congruence2. reflexivity.
Qed.

这样当您需要证明is_zero e2 &lt;-&gt; is_zero e1 时,您可以将is_zero e1 &lt;-&gt; is_zero e2 作为归纳假设。

【讨论】:

  • 谢谢,这是个好主意。我认为它也适用于我更大的问题(结构一致性上的类型保留)。
猜你喜欢
  • 2021-08-12
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多