{-# OPTIONS --safe --without-K #-} open import Prelude module Utils.Reflection.Eq where open import Agda.Builtin.Reflection open import Utils.Reflection.Core private variable A : Set _ instance EqVisibility : Eq Visibility _==_ ⦃ EqVisibility ⦄ visible visible = true _==_ ⦃ EqVisibility ⦄ hidden hidden = true _==_ ⦃ EqVisibility ⦄ instance′ instance′ = true _==_ ⦃ EqVisibility ⦄ _ _ = false EqRelevance : Eq Relevance _==_ ⦃ EqRelevance ⦄ relevant relevant = true _==_ ⦃ EqRelevance ⦄ irrelevant irrelevant = true _==_ ⦃ EqRelevance ⦄ _ _ = false EqQuantity : Eq Quantity _==_ ⦃ EqQuantity ⦄ quantity-0 quantity-0 = true _==_ ⦃ EqQuantity ⦄ quantity-ω quantity-ω = true _==_ ⦃ EqQuantity ⦄ _ _ = false EqName : Eq Name _==_ {{EqName}} = primQNameEquality EqMeta : Eq Meta _==_ ⦃ EqMeta ⦄ = primMetaEquality EqModality : Eq Modality _==_ ⦃ EqModality ⦄ (modality r q) (modality r₁ q₁) = (r == r₁) ∧ (q == q₁) EqArgInfo : Eq ArgInfo _==_ ⦃ EqArgInfo ⦄ (arg-info v r) (arg-info v₁ r₁) = (v == v₁) ∧ (r == r₁) EqArg : ⦃ EqA : Eq A ⦄ → Eq (Arg A) _==_ ⦃ EqArg ⦄ (arg i x) (arg i₁ x₁) = (i == i₁) ∧ (x == x₁) EqAbs : ⦃ EqA : Eq A ⦄ → Eq (Abs A) _==_ ⦃ EqAbs ⦄ (abs s x) (abs s₁ x₁) = (s == s₁) ∧ (x == x₁) EqLiteral : Eq Literal _==_ ⦃ EqLiteral ⦄ (nat n) (nat m) = n == m _==_ ⦃ EqLiteral ⦄ (word64 n) (word64 m) = n == m _==_ ⦃ EqLiteral ⦄ (float x) (float y) = x == y _==_ ⦃ EqLiteral ⦄ (char c) (char d) = c == d _==_ ⦃ EqLiteral ⦄ (string s) (string t) = s == t _==_ ⦃ EqLiteral ⦄ (name x) (name y) = x == y _==_ ⦃ EqLiteral ⦄ (meta x) (meta y) = x == y _==_ ⦃ EqLiteral ⦄ _ _ = false eqTerm : (x y : Term) → Bool eqPat : (x y : Pattern) → Bool eqSort : (x y : Sort) → Bool eqClause : (x y : Clause) → Bool eqArgTerm : (x y : Arg Term) → Bool eqArgTerm (arg i x) (arg i₁ x₁) = (i == i₁) ∧ eqTerm x x₁ eqAbsTerm : (x y : Abs Term) → Bool eqAbsTerm (abs s x) (abs s₁ x₁) = (s == s₁) ∧ eqTerm x x₁ eqTel : (x y : Telescope) → Bool eqTel [] [] = true eqTel ((x , a) ∷ xs) ((y , b) ∷ ys) = (x == y) ∧ eqArgTerm a b ∧ eqTel xs ys eqTel _ _ = false eqArgPat : (x y : Arg Pattern) → Bool eqArgPat (arg i x) (arg i₁ x₁) = (i == i₁) ∧ eqPat x x₁ eqArgs : (x y : Args Term) → Bool eqArgs [] [] = true eqArgs (x ∷ xs) (y ∷ ys) = eqArgTerm x y ∧ eqArgs xs ys eqArgs _ _ = false eqPats : (x y : Args Pattern) → Bool eqPats [] [] = true eqPats (x ∷ xs) (y ∷ ys) = eqArgPat x y ∧ eqPats xs ys eqPats _ _ = false eqClauses : (x y : Clauses) → Bool eqClauses [] [] = true eqClauses (x ∷ xs) (y ∷ ys) = eqClause x y ∧ eqClauses xs ys eqClauses _ _ = false eqTerm (var x args) (var x₁ args₁) = (x == x₁) ∧ eqArgs args args₁ eqTerm (con c args) (con c₁ args₁) = (c == c₁) ∧ eqArgs args args₁ eqTerm (def f args) (def f₁ args₁) = (f == f₁) ∧ eqArgs args args₁ eqTerm (lam v t) (lam v₁ t₁) = (v == v₁) ∧ eqAbsTerm t t₁ eqTerm (pat-lam cs args) (pat-lam cs₁ args₁) = eqClauses cs cs₁ ∧ eqArgs args args₁ eqTerm (pi a b) (pi a₁ b₁) = eqArgTerm a a₁ ∧ eqAbsTerm b b₁ eqTerm (agda-sort s) (agda-sort s₁) = eqSort s s₁ eqTerm (lit l) (lit l₁) = l == l₁ eqTerm (meta x args) (meta x₁ args₁) = (x == x₁) ∧ eqArgs args args₁ eqTerm unknown unknown = true eqTerm _ _ = false eqSort (set t) (set t₁) = eqTerm t t₁ eqSort (lit n) (lit n₁) = n == n₁ eqSort (prop t) (prop t₁) = eqTerm t t₁ eqSort (propLit n) (propLit n₁) = n == n₁ eqSort (inf n) (inf n₁) = n == n₁ eqSort unknown unknown = true eqSort _ _ = false eqPat (con c ps) (con c₁ ps₁) = (c == c₁) ∧ eqPats ps ps₁ eqPat (dot t) (dot t₁) = eqTerm t t₁ eqPat (var x) (var x₁) = x == x₁ eqPat (lit l) (lit l₁) = l == l₁ eqPat (proj f) (proj f₁) = f == f₁ eqPat (absurd x) (absurd x₁) = x == x₁ eqPat _ _ = false eqClause (clause tel ps t) (clause tel₁ ps₁ t₁) = eqTel tel tel₁ ∧ eqPats ps ps₁ ∧ eqTerm t t₁ eqClause (absurd-clause tel ps) (absurd-clause tel₁ ps₁) = eqTel tel tel₁ ∧ eqPats ps ps₁ eqClause _ _ = false instance EqTerm : Eq Term _==_ ⦃ EqTerm ⦄ = eqTerm EqPattern : Eq Pattern _==_ ⦃ EqPattern ⦄ = eqPat EqSort : Eq Sort _==_ ⦃ EqSort ⦄ = eqSort EqClause : Eq Clause _==_ ⦃ EqClause ⦄ = eqClause eqErrorPart : ErrorPart → ErrorPart → Bool eqErrorPart (strErr s) (strErr t) = s == t eqErrorPart (termErr t) (termErr u) = t == u eqErrorPart (nameErr x) (nameErr y) = x == y eqErrorPart _ _ = false instance EqErrorPart : Eq ErrorPart _==_ ⦃ EqErrorPart ⦄ = eqErrorPart