UlfNorell / agda-test

Agda test
0 stars 0 forks source link

Unbound de Bruijn indices show up in error message of unifier #985

Closed UlfNorell closed 10 years ago

UlfNorell commented 10 years ago

From andreas....@gmail.com on November 30, 2013 18:07:01

open import Common.Prelude renaming (Nat to ℕ) open import Common.Equality

infix 3 ¬_

¬_ : Set → Set ¬ P = P → ⊥

-- Decidable relations.

data Dec (P : Set) : Set where yes : ( p : P) → Dec P no : (¬p : ¬ P) → Dec P

: (m n : ℕ) → Dec (m ≡ n) zero ≟ zero = yes refl zero ≟ suc n = no λ() suc m ≟ zero = no λ() suc m ≟ suc n with m ≟ n suc m ≟ suc .m | yes refl = yes refl suc m ≟ suc n | no prf = no (λ x → prf (cong pred x))

data Ty : Set where

data Cxt : Set where ε : Cxt , : (Γ : Cxt) (a : Ty) → Cxt

len : Cxt → ℕ len ε = 0 len (Γ , _) = suc (len Γ)

-- De Bruijn index

mutual Var : Cxt → Ty → Set Var Γ a = Var' a Γ

data Var' (a : Ty) : (Γ : Cxt) → Set where zero : ∀ {Γ} → Var (Γ , a) a suc : ∀ {Γ b} (x : Var Γ a) → Var (Γ , b) a

-- De Bruijn Level

Lev = ℕ

-- Valid de Bruijn levels.

data LookupLev : (x : Lev) (Γ : Cxt) (a : Ty) (i : Var Γ a) → Set where lookupZero : ∀ {Γ a} → LookupLev (len Γ) (Γ , a) a zero

lookupSuc : ∀ {Γ a b x i} → LookupLev x Γ a i → LookupLev x (Γ , b) a (suc i)

record ValidLev (x : Lev) (Γ : Cxt) : Set where constructor validLev field {type } : Ty {index} : Var Γ type valid : LookupLev x Γ type index

weakLev : ∀ {x Γ a} → ValidLev x Γ → ValidLev x (Γ , a) weakLev (validLev d) = validLev (lookupSuc d)

-- Looking up a de Bruijn level.

lookupLev : ∀ (x : Lev) (Γ : Cxt) → Dec (ValidLev x Γ) lookupLev x ε = no λ { (validLev ()) } lookupLev x (Γ , a) with x ≟ len Γ lookupLev . (Γ , a) | yes refl = yes (validLev lookupZero) lookupLev x (Γ , a) | no with lookupLev x Γ lookupLev x (Γ , a) | no ¬p | yes d = yes (weakLev d) lookupLev x (Γ , a) | no ¬p | no ¬d = no contra where contra : ¬ ValidLev x (Γ , a) contra (validLev (lookupSuc valid)) = ?

{- Unbound indices showing up in error message:

I'm not sure if there should be a case for the constructor lookupZero, because I get stuck when trying to solve the following unification problems (inferred index ≟ expected index): len Γ ≟ @8 Γ , a ≟ @7 , @4 a ≟ type zero ≟ index when checking the definition of contra -}

Original issue: http://code.google.com/p/agda/issues/detail?id=985

UlfNorell commented 10 years ago

From andreas....@gmail.com on November 30, 2013 10:41:56

Sat Nov 30 19:39:22 CET 2013 Andreas Abel andreas.abel@ifi.lmu.de

Status: Fixed