在Coq中,通过自反性不能建立η等价项的相等性

4

编辑:我应该说明一下,我当前在这里解决了问题。我定义了一个用于显示置换相等的原则,

Lemma permInd : ∀ (U : Type) (A : Ensemble U) (φ ψ : Perm A),
  φ ↓ = ψ ↓ → φ ↑ = ψ ↑ → φ = ψ

然后我将引理应用于以下困扰我的证明上下文,并展示了Η等价项是相等的。因此,问题似乎在于当项嵌套在记录中时如何显示Η等价性。但是我不擅长处理记录,所以可能会遗漏一些东西。
Lemma etaEquivalence : ∀ (A B : Type) (f : A → B), (λ x : A, f x) = f.
Proof. reflexivity. Qed.

在我的当前证明环境中,我有两个记录需要证明它们的相等性。完全解构和展开后,证明环境和当前子目标如下:

U : Type
A : Ensemble U
perm0 : U → U
pinv0 : U → U
permutes0 : IsPerm A perm0 pinv0
============================
 {|
 perm := λ x : U, perm0 x;
 pinv := λ x : U, pinv0 x;
 permutes := permutationComp permutes0 (permutationId A) |} =
 {| perm := perm0; pinv := pinv0; permutes := permutes0 |}

必须建立的平等性是:
perm0 = λ x : U, perm0 x
pinv0 = λ x : U, pinv0 x

由于这些等式可以通过自反性建立,我不确定问题出在哪里。但是,我怀疑有些地方出错了,因为尝试用perm0替换λ x:U,perm0 x会生成适当的子目标,但不会替换记录内部的术语。此外,使用eqa_reduction重写会导致关于抽象引起的错误,导致类型不正确的术语或嵌套依赖参数。

我已经尽可能简化了上下文,并将其粘贴在下面。除了样式问题和我仍然是初学者这个事实之外,我没有看到当前开发中存在任何问题。

Require Import Unicode.Utf8 Utf8_core Ensembles Setoid.

Class IsPerm {U : Type} (A : Ensemble U) (φ ψ :  U → U) : Prop := {
  pinvLeft    : ∀ x : U, ψ (φ x) = x;
  pinvRight   : ∀ x : U, φ (ψ x) = x;
  closedPerm  : ∀ x : U, In U A x → In U A (φ x);
  closedPinv  : ∀ x : U, In U A x → In U A (ψ x)
}.

Record Perm {U : Type} (A : Ensemble U) : Type := {
  perm : U → U;
  pinv : U → U;
  permutes :> IsPerm A perm pinv
}.

Notation "f ∘ g"  := (λ x, f (g x)) (at level 45).
Notation "P ↓"    := (@perm _ _ P)  (at level 2, no associativity).
Notation "P ↑"    := (@pinv _ _ P)  (at level 2, no associativity).

Instance permutationComp
  {U : Type} {A : Ensemble U} {f g k h : U → U}
    (P : IsPerm A f k) (Q : IsPerm A g h) : IsPerm A (f ∘ g) (h ∘ k).
Proof.
  constructor; intros.
  setoid_rewrite pinvLeft. apply pinvLeft.
  setoid_rewrite pinvRight. apply pinvRight.
  apply closedPerm. apply closedPerm. auto.
  apply closedPinv. apply closedPinv. auto.
Defined.

Instance permutationId
  {U : Type} (A : Ensemble U) :
    IsPerm A (λ x : U, x) (λ x : U, x).
Proof. constructor; intros; auto. Defined.

Definition permComp
  {U : Type} (A : Ensemble U)
    (φ : Perm A) (ψ : Perm A) : Perm A :=
  Build_Perm U A (φ↓ ∘ ψ↓) (ψ↑ ∘ φ↑)
    (permutationComp (permutes A φ) (permutes A ψ)).

Definition permId {U : Type} (A : Ensemble U) : Perm A :=
  Build_Perm U A (λ x : U, x) (λ x : U, x) (permutationId A).

(* problems occur after the application of the tactic simpl, below: *)

Lemma permCompRightIdentity :
  ∀ {U : Type} (A : Ensemble U) (φ : Perm A), permComp A φ (permId A) = φ.
Proof. intros. unfold permComp. simpl. admit. Qed.

最后,我想感谢在这里帮助我解决Coq问题并且耐心教导我的每一个人。

2
你为什么认为置换字段的相等性不需要被建立呢? - Robin Green
在这个例子中,由于证明的不相关性,只需要建立信息字段的相等性。 - emi
你应该使用 change (λ x : U, perm0 x) with perm0(甚至是 repeat change (fun x => ?f x) with f),而不是 replace (λ x : U, perm0 x) with perm0 - Jason Gross
1
Eta-conversion 被列为 Coq 8.4 的新功能之一。 - minopret
1个回答

6

Coq中没有内置的证明不相关性。如果您假设证明不相关公理,则可以轻松地证明您想要的内容:

Require Import ProofIrrelevance.

Lemma permCompRightIdentity :
  ∀ {U : Type} (A : Ensemble U) (φ : Perm A), permComp A φ (permId A) = φ.
Proof.
  intros. unfold permComp. simpl.
  destruct φ.
  f_equal.
  apply proof_irrelevance.
Qed.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接