Ich habe einen abhängigen Typ, der aus einem Wert plus einige Beweise über seine Eigenschaften besteht. Natürlich möchte ich, dass meine Vorstellung von Gleichheit über diesen Typ der Gleichheit über die Wertkomponente entspricht. Das ist alles in Ordnung, außer dass ich auf Probleme stoße, wenn ich Eigenschaften von aufgehobenen Begriffen dieser Gleichheit (zum Beispiel Gleichheit über Listen dieses Typs) beweise.Gleichheit in Agda - irrelevante Argumente
Zum Beispiel:
open import Data.Nat
open import Data.Product
open import Relation.Binary
open import Relation.Binary.PropositionalEquality
open import Relation.Binary.List.Pointwise renaming (Rel to ListRel) hiding (refl)
module Test where
_≈_ : Rel (ℕ × ℕ) _
(a₁ , _) ≈ (a₂ , _) = a₁ ≡ a₂
≈-sym : Symmetric _≈_
≈-sym refl = refl
≋-sym : Symmetric (ListRel _≈_)
≋-sym = symmetric ≈-sym
In der letzten Zeile beschwert Agda, dass es nicht für die zweiten Vorsprünge aus der paarweise lösen kann. Interessanterweise ist die letzte Zeile Wechsel in den folgenden eta-äquivalenter Ausdruck bedeutet, dass sie sie lösen kann:
≋-sym = symmetric (λ {x} {y} → ≈-sym {x} {y})
Jetzt natürlich weiß ich, dass manchmal Agda nicht für alle impliziten Argumente lösen kann und ein bisschen mehr Hilfe braucht aber Ich verstehe nicht, welche neuen Informationen ich mir dabei biete ...
Ich mache eine Menge Gleichstellung und vermeide es, diese hässlichen Eta-Erweiterungen überall in meinem Code hinzuzufügen. Ich habe mich gefragt, ob jemand irgendwelche Vorschläge hat, etwas Ähnliches dem ursprünglichen Code zu erlauben, zu bestehen?
Ich habe in irrelevance untersucht, aber die zweite Projektion wird an anderer Stelle verwendet, auch wenn es rechnerisch irrelevant für die Gleichheit ist.
Vielen Dank für die ausführliche Antwort, und die vorgeschlagene Lösung, wie um es zu bekommen! Obwohl die Reihenfolge der Variablen sinnvoll ist, bin ich mir nicht sicher, ob das der Grund für das Problem ist. Zum Beispiel bekommen Sie das gleiche Problem, wenn Sie versuchen, die Reflexivität anstelle der Symmetrie zu beweisen. "≋-refl = pw-refl ≈-refl", die nicht mehrere implizite Argumente zum Umordnen hat. – user2667523
@ user2667523, '≋-refl' ist kein Gegenbeispiel, da Agda eta Regeln für Datensätze hat und' {p: A × B} -> ... 'ist das gleiche wie' {x: A} {y: B} -> ... '. Wie auch immer du recht hast: 'ungelöst: (({n: ℕ} -> ℕ) -> ℕ) -> ({n: ℕ} -> ℕ) -> ℕ; ungelöstes k f = k f 'führt zu ungelösten metas. Es scheint also, dass implizite Argumente nur während des Prozesses der expliziten Vereinheitlichung von Argumenten vereinheitlicht werden. – user3237465