равенство eta-эквивалентных членов, не установленных рефлексивностью в coq - PullRequest
4 голосов
/ 22 ноября 2011

edit: Я, наверное, должен сказать, как я сейчас работаю над этой проблемой. Я определил принцип для отображения равенства перестановок,

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

затем применил лемму в контексте доказательства, который доставляет мне неприятности ниже и показывает, что эта-эквивалентные члены равны. Таким образом, проблема заключается в том, чтобы показать, что эта eta-эквивалентность вложена в запись. Но я не очень хорошо работаю с записями, поэтому я могу что-то упустить.

оригинал:

У меня проблемы с доказательством равенства эта-эквивалентных терминов, вложенных в поля записей. Для справки: эта-редукция независимо доказывается рефлексивностью:

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

Поскольку эти равенства могут быть установлены рефлексивностью, я не уверен, в чем проблема. Однако я подозреваю, что что-то не так, потому что попытка заменить λ x : U, perm0 x на perm0 генерирует соответствующую подцель, но не заменяет термин внутри записи. Кроме того, перезапись с использованием 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 и проявил терпение.

1 Ответ

6 голосов
/ 17 января 2012

Доказательство не имеет значения в 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.
...