私は、値に加えてそのプロパティに関するいくつかの証明からなる依存型を持っています。当然のことながら、このタイプの平等という概念は、価値構成要素の平等と同等であると考えています。これは、この等価性の概念を浮き彫りにしていることを証明するときに問題にぶつかる以外は問題ありません(たとえば、このタイプのリストに対する等価性)。例えばAgdaの等価性 - 無関係な引数
:
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
は、最後の行でAgdaは、ペアのうち第二の突起を解くことができないことを訴えます。興味深いことに、次のイータ等価な式に最後の行を変更することは、それらを解決することができることを意味します
≋-sym = symmetric (λ {x} {y} → ≈-sym {x} {y})
は今、当然私は時々Agdaは、すべての暗黙の引数について解くことができないことを知っていると、余分なヘルプのビットを必要としますが、私はこれを行うことで何を提供しているのか新しい情報を理解していません。
私は平等を取り払っています。私はむしろこれらの醜いエタ拡張を私のコードのどこにも追加しないでください。誰かが元のコードに似た何かを渡すことを許可する提案があるのだろうかと思いましたか?
私はirrelevanceを調べましたが、2番目の投影法は、等価性に関して計算上無関係であっても、他の場所で使用されています。
おかげで、それを回避する方法の提案ソリューション:
また少しよりよいコードを作るために、パターンの同義語を定義することができます!しかし、変数ビットの順序は意味がありますが、私はそれが問題の根底にある原因であるとは確信していません。例えば、再順序付けのための複数の暗黙的な引数を持たない対称 '≋-refl = pw-refl≈-refl'ではなく、反射性を試してみると、同じ問題が発生します。 Agdaはレコードのための慣習規則を持っており、 '{p:A×B} - > ...'は '{x:A} {y:と同じものですので、'≋-refl'は反例ではありません: – user2667523
@ user2667523、 B} - > ... '。しかしあなたは正しい:未解決:(({n:ℕ} - >ℕ) - >ℕ) - >({n:ℕ} - >ℕ) - >ℕ;未解決のk f = k f 'は、未解決のメタをもたらす。暗黙的な引数は、明示的な引数の統一の過程でのみ統合されるようです。 – user3237465