Skip to content

Commit

Permalink
downstream fix, see agda/agda#7322
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavel Turyansky authored and Your Name committed Jun 16, 2024
1 parent 9dfdd42 commit 85ba8ef
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 23 deletions.
53 changes: 31 additions & 22 deletions src/Reflection/AST/Definition.agda
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@

module Reflection.AST.Definition where

import Data.List.Properties as Listₚ using (≡-dec)
import Data.Nat.Properties as ℕₚ using (_≟_)
open import Data.Product using (_×_; <_,_>; uncurry)
open import Relation.Nullary.Decidable using (map′; _×-dec_; yes; no)
open import Relation.Binary using (DecidableEquality)
open import Relation.Binary.PropositionalEquality using (_≡_; refl; cong; cong₂)
import Data.List.Properties as List using (≡-dec)
import Data.Nat.Properties as using (_≟_)
open import Data.Product.Base using (_×_; <_,_>; uncurry)
open import Relation.Nullary.Decidable.Core using (map′; _×-dec_; yes; no)
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

Expand Down Expand Up @@ -56,51 +57,59 @@ 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 _≟_

_≟_ : DecidableEquality Definition
function cs ≟ function cs′ =
map′ (cong function) function-injective (cs Term.≟-Clauses cs′)
data-type pars cs ≟ data-type pars′ cs′ =
map′ (uncurry (cong₂ data-type)) data-type-injective
(pars ℕₚ.≟ pars′ ×-dec Listₚ.≡-dec Name._≟_ cs cs′)
(pars .≟ pars′ ×-dec List.≡-dec Name._≟_ cs 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′)
(c Name.≟ c′ ×-dec List.≡-dec (Arg.≡-dec Name._≟_) fs fs′)
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 (λ ())
7 changes: 6 additions & 1 deletion src/Reflection/AST/Show.agda
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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"

0 comments on commit 85ba8ef

Please sign in to comment.