From a02be2ea3431a18989dc205dfe769380bfa322b0 Mon Sep 17 00:00:00 2001 From: Pavel Turyansky Date: Sat, 4 May 2024 12:47:48 +0000 Subject: [PATCH] downstream fix, see agda/agda#7247 --- src/Reflection/AST/Argument/Quantity.agda | 2 +- src/Reflection/AST/Definition.agda | 35 ++++++++++++++--------- src/Reflection/AST/Show.agda | 7 ++++- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/Reflection/AST/Argument/Quantity.agda b/src/Reflection/AST/Argument/Quantity.agda index ff0a0d3c65..9eee622b67 100644 --- a/src/Reflection/AST/Argument/Quantity.agda +++ b/src/Reflection/AST/Argument/Quantity.agda @@ -8,7 +8,7 @@ module Reflection.AST.Argument.Quantity where -open import Relation.Nullary.Decidable.Core using (yes; no) +open import Relation.Nullary.Decidable.Core using (yes; no) open import Relation.Binary.Definitions using (DecidableEquality) open import Relation.Binary.PropositionalEquality.Core using (refl) diff --git a/src/Reflection/AST/Definition.agda b/src/Reflection/AST/Definition.agda index 3f06fef070..887063d643 100644 --- a/src/Reflection/AST/Definition.agda +++ b/src/Reflection/AST/Definition.agda @@ -16,6 +16,7 @@ open import Relation.Binary.Definitions using (DecidableEquality) open import Relation.Binary.PropositionalEquality.Core using (_≡_; refl; cong; cong₂) import Reflection.AST.Argument as Arg +import Reflection.AST.Argument.Quantity as Quantity import Reflection.AST.Name as Name import Reflection.AST.Term as Term @@ -56,8 +57,14 @@ record′-injective₂ refl = refl record′-injective : ∀ {c c′ fs fs′} → record′ c fs ≡ record′ c′ fs′ → c ≡ c′ × fs ≡ fs′ record′-injective = < record′-injective₁ , record′-injective₂ > -constructor′-injective : ∀ {c c′} → constructor′ c ≡ constructor′ c′ → c ≡ c′ -constructor′-injective refl = refl +constructor′-injective₁ : ∀ {c c′ q q′} → constructor′ c q ≡ constructor′ c′ q′ → c ≡ c′ +constructor′-injective₁ refl = refl + +constructor′-injective₂ : ∀ {c c′ q q′} → constructor′ c q ≡ constructor′ c′ q′ → q ≡ q′ +constructor′-injective₂ refl = refl + +constructor′-injective : ∀ {c c′ q q′} → constructor′ c q ≡ constructor′ c′ q′ → c ≡ c′ × q ≡ q′ +constructor′-injective = < constructor′-injective₁ , constructor′-injective₂ > infix 4 _≟_ @@ -70,39 +77,39 @@ data-type pars cs ≟ data-type pars′ cs′ = record′ c fs ≟ record′ c′ fs′ = map′ (uncurry (cong₂ record′)) record′-injective (c Name.≟ c′ ×-dec List.≡-dec (Arg.≡-dec Name._≟_) fs fs′) -constructor′ d ≟ constructor′ d′ = - map′ (cong constructor′) constructor′-injective (d Name.≟ d′) +constructor′ d q ≟ constructor′ d′ q′ = + map′ (uncurry (cong₂ constructor′)) constructor′-injective (d Name.≟ d′ ×-dec q Quantity.≟ q′) axiom ≟ axiom = yes refl primitive′ ≟ primitive′ = yes refl -- antidiagonal function cs ≟ data-type pars cs₁ = no (λ ()) function cs ≟ record′ c fs = no (λ ()) -function cs ≟ constructor′ d = no (λ ()) +function cs ≟ constructor′ d q = no (λ ()) function cs ≟ axiom = no (λ ()) function cs ≟ primitive′ = no (λ ()) data-type pars cs ≟ function cs₁ = no (λ ()) data-type pars cs ≟ record′ c fs = no (λ ()) -data-type pars cs ≟ constructor′ d = no (λ ()) +data-type pars cs ≟ constructor′ d q = no (λ ()) data-type pars cs ≟ axiom = no (λ ()) data-type pars cs ≟ primitive′ = no (λ ()) record′ c fs ≟ function cs = no (λ ()) record′ c fs ≟ data-type pars cs = no (λ ()) -record′ c fs ≟ constructor′ d = no (λ ()) +record′ c fs ≟ constructor′ d q = no (λ ()) record′ c fs ≟ axiom = no (λ ()) record′ c fs ≟ primitive′ = no (λ ()) -constructor′ d ≟ function cs = no (λ ()) -constructor′ d ≟ data-type pars cs = no (λ ()) -constructor′ d ≟ record′ c fs = no (λ ()) -constructor′ d ≟ axiom = no (λ ()) -constructor′ d ≟ primitive′ = no (λ ()) +constructor′ d q ≟ function cs = no (λ ()) +constructor′ d q ≟ data-type pars cs = no (λ ()) +constructor′ d q ≟ record′ c fs = no (λ ()) +constructor′ d q ≟ axiom = no (λ ()) +constructor′ d q ≟ primitive′ = no (λ ()) axiom ≟ function cs = no (λ ()) axiom ≟ data-type pars cs = no (λ ()) axiom ≟ record′ c fs = no (λ ()) -axiom ≟ constructor′ d = no (λ ()) +axiom ≟ constructor′ d q = no (λ ()) axiom ≟ primitive′ = no (λ ()) primitive′ ≟ function cs = no (λ ()) primitive′ ≟ data-type pars cs = no (λ ()) primitive′ ≟ record′ c fs = no (λ ()) -primitive′ ≟ constructor′ d = no (λ ()) +primitive′ ≟ constructor′ d q = no (λ ()) primitive′ ≟ axiom = no (λ ()) diff --git a/src/Reflection/AST/Show.agda b/src/Reflection/AST/Show.agda index 5d748e089b..068225e59f 100644 --- a/src/Reflection/AST/Show.agda +++ b/src/Reflection/AST/Show.agda @@ -27,6 +27,7 @@ open import Reflection.AST.Argument hiding (map) open import Reflection.AST.Argument.Relevance open import Reflection.AST.Argument.Visibility open import Reflection.AST.Argument.Modality +open import Reflection.AST.Argument.Quantity open import Reflection.AST.Argument.Information open import Reflection.AST.Definition open import Reflection.AST.Literal @@ -58,6 +59,10 @@ showVisibility visible = "visible" showVisibility hidden = "hidden" showVisibility instance′ = "instance" +showQuantity : Quantity → String +showQuantity quantity-0 = "quantity-0" +showQuantity quantity-ω = "quantity-ω" + showLiteral : Literal → String showLiteral (nat x) = ℕ.show x showLiteral (word64 x) = ℕ.show (Word.toℕ x) @@ -144,6 +149,6 @@ showDefinition (data-type pars cs) = "datatype" <+> ℕ.show pars <+> braces (intersperse ", " (map showName cs)) showDefinition (record′ c fs) = "record" <+> showName c <+> braces (intersperse ", " (map (showName ∘′ unArg) fs)) -showDefinition (constructor′ d) = "constructor" <+> showName d +showDefinition (constructor′ d q) = "constructor" <+> showName d <+> showQuantity q showDefinition axiom = "axiom" showDefinition primitive′ = "primitive"