Skip to content

Commit cd0f00a

Browse files
ajrouvoetUlfNorellgallais
authored
The 'absurd' pattern now takes a de Bruijn index in reflected syntax (#1362)
Co-authored-by: Ulf Norell <[email protected]> Co-authored-by: Guillaume ALLAIS <[email protected]>
1 parent cd1d0ce commit cd0f00a

File tree

6 files changed

+23
-19
lines changed

6 files changed

+23
-19
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ matrix:
5656
cd ../ &&
5757
git clone https://github.com/agda/agda &&
5858
cd agda &&
59-
git checkout a8077a59977d55d85743790924adf24dc0c9de2d &&
59+
git checkout 696a77052a73f2974763fd2cbb9a80c44acb9d74 &&
6060
cabal install --only-dependencies --dry -v > $HOME/installplan.txt ;
6161
fi
6262

src/Reflection/Annotated.agda

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ mutual
139139
var : x Patternₐ′ Ann (var x)
140140
lit : l Patternₐ′ Ann (lit l)
141141
proj : f Patternₐ′ Ann (proj f)
142-
absurd : Patternₐ′ Ann absurd
142+
absurd : x Patternₐ′ Ann (absurd x)
143143

144144

145145
-- Mapping a code in the universe to its corresponding primed and
@@ -194,7 +194,7 @@ module _ (annFun : AnnotationFun Ann) where
194194
annotate′ {⟨pat⟩} (var x) = var x
195195
annotate′ {⟨pat⟩} (lit l) = lit l
196196
annotate′ {⟨pat⟩} (proj f) = proj f
197-
annotate′ {⟨pat⟩} absurd = absurd
197+
annotate′ {⟨pat⟩} (absurd x) = absurd x
198198
annotate′ {⟨sort⟩} (set t) = set (annotate t)
199199
annotate′ {⟨sort⟩} (lit n) = lit n
200200
annotate′ {⟨sort⟩} unknown = unknown
@@ -231,7 +231,7 @@ mutual
231231
map′ ⟨pat⟩ f (var x) = var x
232232
map′ ⟨pat⟩ f (lit l) = lit l
233233
map′ ⟨pat⟩ f (proj g) = proj g
234-
map′ ⟨pat⟩ f absurd = absurd
234+
map′ ⟨pat⟩ f (absurd x) = absurd x
235235
map′ ⟨sort⟩ f (set t) = set (map f t)
236236
map′ ⟨sort⟩ f (lit n) = lit n
237237
map′ ⟨sort⟩ f unknown = unknown
@@ -268,7 +268,7 @@ module _ {W : Set ℓ} (ε : W) (_∪_ : W → W → W) where
268268
defaultAnn ⟨pat⟩ (var x) = ε
269269
defaultAnn ⟨pat⟩ (lit l) = ε
270270
defaultAnn ⟨pat⟩ (proj f) = ε
271-
defaultAnn ⟨pat⟩ absurd = ε
271+
defaultAnn ⟨pat⟩ (absurd x) = ε
272272
defaultAnn ⟨sort⟩ (set t) = ann t
273273
defaultAnn ⟨sort⟩ (lit n) = ε
274274
defaultAnn ⟨sort⟩ unknown = ε
@@ -318,7 +318,7 @@ module Traverse {M : Set → Set} (appl : RawApplicative M) where
318318
traverse′ {⟨pat⟩} (var x) = pure (var x)
319319
traverse′ {⟨pat⟩} (lit l) = pure (lit l)
320320
traverse′ {⟨pat⟩} (proj f) = pure (proj f)
321-
traverse′ {⟨pat⟩} absurd = pure absurd
321+
traverse′ {⟨pat⟩} (absurd x) = pure (absurd x)
322322
traverse′ {⟨sort⟩} (set t) = set <$> traverse t
323323
traverse′ {⟨sort⟩} (lit n) = pure (lit n)
324324
traverse′ {⟨sort⟩} unknown = pure unknown

src/Reflection/Annotated/Free.agda

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ private
5454
freeVars : AnnotationFun (λ _ FVs)
5555
freeVars ⟨term⟩ (var x (⟨ fv ⟩ _)) = insert x fv
5656
freeVars ⟨pat⟩ (var x) = x ∷ []
57+
freeVars ⟨pat⟩ (absurd x) = x ∷ []
5758
-- Note: variables are bound in the clause telescope, so we treat pattern variables as free
5859
freeVars ⟨clause⟩ (clause {tel = Γ} (⟨ fvΓ ⟩ _) (⟨ fvps ⟩ _) (⟨ fvt ⟩ _)) = fvΓ ∪ close (length Γ) (fvps ∪ fvt)
5960
freeVars ⟨clause⟩ (absurd-clause {tel = Γ} (⟨ fvΓ ⟩ _) (⟨ fvps ⟩ _)) = fvΓ ∪ close (length Γ) fvps

src/Reflection/Show.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ mutual
115115
showPattern (var x) = "pat-var" <+> ℕ.show x
116116
showPattern (lit l) = showLiteral l
117117
showPattern (proj f) = showName f
118-
showPattern absurd = "()"
118+
showPattern (absurd _) = "()"
119119

120120
showClause : Clause String
121121
showClause (clause tel ps t) = "[" <+> showTel tel <+> "]" <+> showPatterns ps <+> "→" <+> showTerm t

src/Reflection/Term.agda

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -379,43 +379,46 @@ proj-injective refl = refl
379379
dot-injective : {x y} dot x ≡ dot y x ≡ y
380380
dot-injective refl = refl
381381

382+
absurd-injective : {x y} absurd x ≡ absurd y x ≡ y
383+
absurd-injective refl = refl
384+
382385
con c ps ≟-Pattern con c′ ps′ = Dec.map′ (uncurry (cong₂ con)) pat-con-injective (c Name.≟ c′ ×-dec ps ≟-Patterns ps′)
383386
var x ≟-Pattern var x′ = Dec.map′ (cong var) pat-var-injective (x ℕ.≟ x′)
384387
lit l ≟-Pattern lit l′ = Dec.map′ (cong lit) pat-lit-injective (l Literal.≟ l′)
385388
proj a ≟-Pattern proj a′ = Dec.map′ (cong proj) proj-injective (a Name.≟ a′)
386389
dot t ≟-Pattern dot t′ = Dec.map′ (cong dot) dot-injective (t ≟ t′)
390+
absurd x ≟-Pattern absurd x′ = Dec.map′ (cong absurd) absurd-injective (x ℕ.≟ x′)
387391

388392
con x x₁ ≟-Pattern dot x₂ = no (λ ())
389393
con x x₁ ≟-Pattern var x₂ = no (λ ())
390394
con x x₁ ≟-Pattern lit x₂ = no (λ ())
391395
con x x₁ ≟-Pattern proj x₂ = no (λ ())
392-
con x x₁ ≟-Pattern absurd = no (λ ())
396+
con x x₁ ≟-Pattern absurd x₂ = no (λ ())
393397
dot x ≟-Pattern con x₁ x₂ = no (λ ())
394398
dot x ≟-Pattern var x₁ = no (λ ())
395399
dot x ≟-Pattern lit x₁ = no (λ ())
396400
dot x ≟-Pattern proj x₁ = no (λ ())
397-
dot x ≟-Pattern absurd = no (λ ())
401+
dot x ≟-Pattern absurd x₁ = no (λ ())
398402
var s ≟-Pattern con x x₁ = no (λ ())
399403
var s ≟-Pattern dot x = no (λ ())
400404
var s ≟-Pattern lit x = no (λ ())
401405
var s ≟-Pattern proj x = no (λ ())
402-
var s ≟-Pattern absurd = no (λ ())
406+
var s ≟-Pattern absurd x = no (λ ())
403407
lit x ≟-Pattern con x₁ x₂ = no (λ ())
404408
lit x ≟-Pattern dot x₁ = no (λ ())
405409
lit x ≟-Pattern var _ = no (λ ())
406410
lit x ≟-Pattern proj x₁ = no (λ ())
407-
lit x ≟-Pattern absurd = no (λ ())
411+
lit x ≟-Pattern absurd x₁ = no (λ ())
408412
proj x ≟-Pattern con x₁ x₂ = no (λ ())
409413
proj x ≟-Pattern dot x₁ = no (λ ())
410414
proj x ≟-Pattern var _ = no (λ ())
411415
proj x ≟-Pattern lit x₁ = no (λ ())
412-
proj x ≟-Pattern absurd = no (λ ())
413-
absurd ≟-Pattern con x x₁ = no (λ ())
414-
absurd ≟-Pattern dot x₁ = no (λ ())
415-
absurd ≟-Pattern var _ = no (λ ())
416-
absurd ≟-Pattern lit x = no (λ ())
417-
absurd ≟-Pattern proj x = no (λ ())
418-
absurd ≟-Pattern absurd = yes refl
416+
proj x ≟-Pattern absurd x₁ = no (λ ())
417+
absurd x ≟-Pattern con x₁ x₂ = no (λ ())
418+
absurd x ≟-Pattern dot x₁ = no (λ ())
419+
absurd x ≟-Pattern var _ = no (λ ())
420+
absurd x ≟-Pattern lit x₁ = no (λ ())
421+
absurd x ≟-Pattern proj x₁ = no (λ ())
419422

420423
[] ≟-Patterns [] = yes refl
421424
(arg i p ∷ xs) ≟-Patterns (arg j q ∷ ys) = Lₚ.∷-dec (unArg-dec (p ≟-Pattern q)) (xs ≟-Patterns ys)

src/Reflection/Traversal.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ module _ (actions : Actions) where
120120
traversePattern Γ (Pattern.var x) = Pattern.var <$> onVar Γ x
121121
traversePattern Γ p@(Pattern.lit _) = pure p
122122
traversePattern Γ p@(Pattern.proj _) = pure p
123-
traversePattern Γ p@Pattern.absurd = pure p
123+
traversePattern Γ (Pattern.absurd x) = Pattern.absurd <$> onVar Γ x
124124

125125
traversePats Γ [] = pure []
126126
traversePats Γ (arg i p ∷ ps) = _∷_ ∘ arg i <$> traversePattern Γ p ⊛ traversePats Γ ps

0 commit comments

Comments
 (0)