Skip to content

Commit cde8ef8

Browse files
committed
Changes related to a change to Agda's reflection machinery.
The reflection machinery now supports erasure (in Arg), see agda/agda#5317. I made the code compile, but further changes may be warranted: * I did not write anything in the changelog. * I did not add any deprecation warnings. * I changed the semantics of Tactic.RingSolver.Core.ReflectionHelp.getVisible. * The function showTerm does not print erasure annotations (but it also does not print relevance annotations).
1 parent 04569b5 commit cde8ef8

File tree

9 files changed

+134
-24
lines changed

9 files changed

+134
-24
lines changed

src/Reflection.agda

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,17 @@ open import Reflection.Pattern as Pattern public
3030
open import Reflection.Term as Term public
3131
using (Term; Type; Clause; Clauses; Sort)
3232

33+
import Reflection.Argument.Modality as Modality
34+
import Reflection.Argument.Quantity as Quantity
3335
import Reflection.Argument.Relevance as Relevance
3436
import Reflection.Argument.Visibility as Visibility
3537
import Reflection.Argument.Information as Information
3638

3739
open Definition.Definition public
3840
open Information.ArgInfo public
3941
open Literal.Literal public
42+
open Modality.Modality public
43+
open Quantity.Quantity public
4044
open Relevance.Relevance public
4145
open Term.Term public
4246
open Visibility.Visibility public
@@ -166,10 +170,10 @@ visibility = Information.visibility
166170
Please use Reflection.Argument.Information's visibility instead."
167171
#-}
168172

169-
relevance = Information.relevance
173+
relevance = Modality.relevance
170174
{-# WARNING_ON_USAGE relevance
171175
"Warning: relevance was deprecated in v1.3.
172-
Please use Reflection.Argument.Information's relevance instead."
176+
Please use Reflection.Argument.Relevance's relevance instead."
173177
#-}
174178

175179
infix 4 _≟-AbsTerm_ _≟-AbsType_ _≟-ArgTerm_ _≟-ArgType_ _≟-Args_

src/Reflection/Argument.agda

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ open import Data.Product using (_×_; _,_; uncurry; <_,_>)
1313
open import Data.Nat using (ℕ)
1414
open import Reflection.Argument.Visibility
1515
open import Reflection.Argument.Relevance
16+
open import Reflection.Argument.Quantity
17+
open import Reflection.Argument.Modality
1618
open import Reflection.Argument.Information as Information
1719
open import Relation.Nullary
1820
import Relation.Nullary.Decidable as Dec
@@ -34,9 +36,11 @@ open Arg public
3436

3537
-- Pattern synonyms
3638

37-
pattern vArg ty = arg (arg-info visible relevant) ty
38-
pattern hArg ty = arg (arg-info hidden relevant) ty
39-
pattern iArg ty = arg (arg-info instance′ relevant) ty
39+
pattern defaultModality = modality relevant quantity-ω
40+
41+
pattern vArg ty = arg (arg-info visible defaultModality) ty
42+
pattern hArg ty = arg (arg-info hidden defaultModality) ty
43+
pattern iArg ty = arg (arg-info instance′ defaultModality) ty
4044

4145
------------------------------------------------------------------------
4246
-- Lists of arguments

src/Reflection/Argument/Information.agda

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
module Reflection.Argument.Information where
1010

1111
open import Data.Product
12-
open import Relation.Nullary
1312
import Relation.Nullary.Decidable as Dec
1413
open import Relation.Nullary.Product using (_×-dec_)
1514
open import Relation.Binary
1615
open import Relation.Binary.PropositionalEquality
1716

18-
open import Reflection.Argument.Relevance as Relevance using (Relevance)
17+
open import Reflection.Argument.Modality as Modality using (Modality)
1918
open import Reflection.Argument.Visibility as Visibility using (Visibility)
2019

2120
------------------------------------------------------------------------
@@ -30,23 +29,29 @@ open ArgInfo public
3029
visibility : ArgInfo Visibility
3130
visibility (arg-info v _) = v
3231

33-
relevance : ArgInfo Relevance
34-
relevance (arg-info _ r) = r
32+
modality : ArgInfo Modality
33+
modality (arg-info _ m) = m
3534

3635
------------------------------------------------------------------------
3736
-- Decidable equality
3837

39-
arg-info-injective₁ : {v r v′ r′} arg-info v r ≡ arg-info v′ r′ v ≡ v′
38+
private
39+
variable
40+
v v′ : Visibility
41+
m m′ : Modality
42+
43+
arg-info-injective₁ : arg-info v m ≡ arg-info v′ m′ v ≡ v′
4044
arg-info-injective₁ refl = refl
4145

42-
arg-info-injective₂ : {v r v′ r′} arg-info v r ≡ arg-info v′ r rr
46+
arg-info-injective₂ : arg-info v m ≡ arg-info v′ m mm
4347
arg-info-injective₂ refl = refl
4448

45-
arg-info-injective : {v r v′ r′} arg-info v r ≡ arg-info v′ r v ≡ v′ × rr
49+
arg-info-injective : arg-info v m ≡ arg-info v′ m v ≡ v′ × mm
4650
arg-info-injective = < arg-info-injective₁ , arg-info-injective₂ >
4751

4852
_≟_ : DecidableEquality ArgInfo
49-
arg-info v r ≟ arg-info v′ r′ =
50-
Dec.map′ (uncurry (cong₂ arg-info))
51-
arg-info-injective
52-
(v Visibility.≟ v′ ×-dec r Relevance.≟ r′)
53+
arg-info v m ≟ arg-info v′ m′ =
54+
Dec.map′
55+
(uncurry (cong₂ arg-info))
56+
arg-info-injective
57+
(v Visibility.≟ v′ ×-dec m Modality.≟ m′)
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Modalities used in the reflection machinery
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
module Reflection.Argument.Modality where
10+
11+
open import Data.Product
12+
import Relation.Nullary.Decidable as Dec
13+
open import Relation.Nullary.Product using (_×-dec_)
14+
open import Relation.Binary
15+
open import Relation.Binary.PropositionalEquality
16+
17+
open import Reflection.Argument.Relevance as Relevance using (Relevance)
18+
open import Reflection.Argument.Quantity as Quantity using (Quantity)
19+
20+
------------------------------------------------------------------------
21+
-- Re-exporting the builtins publically
22+
23+
open import Agda.Builtin.Reflection public using (Modality)
24+
open Modality public
25+
26+
------------------------------------------------------------------------
27+
-- Operations
28+
29+
relevance : Modality Relevance
30+
relevance (modality r _) = r
31+
32+
quantity : Modality Quantity
33+
quantity (modality _ q) = q
34+
35+
------------------------------------------------------------------------
36+
-- Decidable equality
37+
38+
private
39+
variable
40+
r r′ : Relevance
41+
q q′ : Quantity
42+
43+
modality-injective₁ : modality r q ≡ modality r′ q′ r ≡ r′
44+
modality-injective₁ refl = refl
45+
46+
modality-injective₂ : modality r q ≡ modality r′ q′ q ≡ q′
47+
modality-injective₂ refl = refl
48+
49+
modality-injective : modality r q ≡ modality r′ q′ r ≡ r′ × q ≡ q′
50+
modality-injective = < modality-injective₁ , modality-injective₂ >
51+
52+
_≟_ : DecidableEquality Modality
53+
modality r q ≟ modality r′ q′ =
54+
Dec.map′
55+
(uncurry (cong₂ modality))
56+
modality-injective
57+
(r Relevance.≟ r′ ×-dec q Quantity.≟ q′)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
------------------------------------------------------------------------
2+
-- The Agda standard library
3+
--
4+
-- Argument quantities used in the reflection machinery
5+
------------------------------------------------------------------------
6+
7+
{-# OPTIONS --without-K --safe #-}
8+
9+
module Reflection.Argument.Quantity where
10+
11+
open import Relation.Nullary
12+
open import Relation.Binary
13+
open import Relation.Binary.PropositionalEquality
14+
15+
------------------------------------------------------------------------
16+
-- Re-exporting the builtins publically
17+
18+
open import Agda.Builtin.Reflection public using (Quantity)
19+
open Quantity public
20+
21+
------------------------------------------------------------------------
22+
-- Decidable equality
23+
24+
_≟_ : DecidableEquality Quantity
25+
quantity-ω ≟ quantity-ω = yes refl
26+
quantity-0 ≟ quantity-0 = yes refl
27+
quantity-ω ≟ quantity-0 = no λ()
28+
quantity-0 ≟ quantity-ω = no λ()

src/Reflection/DeBruijn.agda

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,11 @@ module _ where
5959

6060
private
6161
η : Visibility (Args Term Term) Args Term Term
62-
η h f args = lam h (abs "x" (f (weakenArgs 1 args ++ arg (arg-info h relevant) (var 0 []) ∷ [])))
62+
η h f args =
63+
lam h (abs "x" (f (weakenArgs 1 args ++
64+
arg (arg-info h m) (var 0 []) ∷ [])))
65+
where
66+
m = modality relevant quantity-ω
6367

6468
η-expand : Visibility Term Term
6569
η-expand h (var x args) = η h (var (suc x)) args

src/Reflection/Show.agda

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ open import Data.Product using (_×_; _,_)
2020
open import Data.String as String
2121
import Data.Word as Word
2222
open import Relation.Nullary using (yes; no)
23-
open import Function.Base using (_∘′_)
23+
open import Function.Base using (id; _∘′_; case_of_)
2424

2525
open import Reflection.Abstraction hiding (map)
2626
open import Reflection.Argument hiding (map)
2727
open import Reflection.Argument.Relevance
2828
open import Reflection.Argument.Visibility
29+
open import Reflection.Argument.Modality
2930
open import Reflection.Argument.Information
3031
open import Reflection.Definition
3132
open import Reflection.Literal
@@ -106,10 +107,15 @@ mutual
106107
showPatterns [] = ""
107108
showPatterns (a ∷ ps) = showArg a <+> showPatterns ps
108109
where
110+
-- Quantities are ignored.
109111
showArg : Arg Pattern String
110-
showArg (arg (arg-info visible r) p) = showRel r ++ showPattern p
111-
showArg (arg (arg-info hidden r) p) = braces (showRel r ++ showPattern p)
112-
showArg (arg (arg-info instance′ r) p) = braces (braces (showRel r ++ showPattern p))
112+
showArg (arg (arg-info h (modality r _)) p) =
113+
braces? (showRel r ++ showPattern p)
114+
where
115+
braces? = case h of λ where
116+
visible id
117+
hidden braces
118+
instance′ braces ∘′ braces
113119

114120
showPattern : Pattern String
115121
showPattern (con c []) = showName c

src/Reflection/Traversal.agda

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,15 @@ module _ (actions : Actions) where
8080
traverseTerm Γ (var x args) = var <$> onVar Γ x ⊛ traverseArgs Γ args
8181
traverseTerm Γ (con c args) = con <$> onCon Γ c ⊛ traverseArgs Γ args
8282
traverseTerm Γ (def f args) = def <$> onDef Γ f ⊛ traverseArgs Γ args
83-
traverseTerm Γ (lam v t) = lam v <$> traverseAbs (arg (arg-info v relevant) unknown) Γ t
8483
traverseTerm Γ (pat-lam cs args) = pat-lam <$> traverseClauses Γ cs ⊛ traverseArgs Γ args
8584
traverseTerm Γ (pi a b) = pi <$> traverseArg Γ a ⊛ traverseAbs a Γ b
8685
traverseTerm Γ (agda-sort s) = agda-sort <$> traverseSort Γ s
8786
traverseTerm Γ (meta x args) = meta <$> onMeta Γ x ⊛ traverseArgs Γ args
8887
traverseTerm Γ t@(lit _) = pure t
8988
traverseTerm Γ t@unknown = pure t
89+
traverseTerm Γ (lam v t) = lam v <$> traverseAbs (arg (arg-info v m) unknown) Γ t
90+
where
91+
m = modality relevant quantity-ω
9092

9193
traverseArg Γ (arg i t) = arg i <$> traverseTerm Γ t
9294
traverseArgs Γ [] = pure []

src/Tactic/RingSolver/Core/ReflectionHelp.agda

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ vlams : ∀ {n} → Vec String n → Term → Term
3838
vlams vs xs = Vec.foldr (const Term) (λ v vs lam visible (abs v vs)) xs vs
3939

4040
getVisible : Arg Term Maybe Term
41-
getVisible (arg (arg-info visible relevant) x) = just x
42-
getVisible _ = nothing
41+
getVisible (arg (arg-info visible _) x) = just x
42+
getVisible _ = nothing
4343

4444
getArgs : n Term Maybe (Vec Term n)
4545
getArgs n (def _ xs) = Maybe.map Vec.reverse (List.foldl f c (List.mapMaybe getVisible xs) n)

0 commit comments

Comments
 (0)