Issue2066.agda 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. -- Andreas, 2016-06-26 issue #2066, reported by Mietek Bak
  2. -- already fixed on stable-2.5
  3. open import Data.Nat using (ℕ ; zero ; suc ; _≟_)
  4. open import Relation.Binary using (Decidable)
  5. open import Relation.Binary.PropositionalEquality using (_≡_ ; _≢_ ; refl)
  6. open import Relation.Nullary using (yes ; no)
  7. data Tm : Set where
  8. var : ℕ → Tm
  9. lam : ℕ → Tm → Tm
  10. app : Tm → Tm → Tm
  11. data _∥_ (x : ℕ) : Tm → Set where
  12. var∥ : ∀ {y} → y ≢ x → x ∥ var y
  13. ≡lam∥ : ∀ {t} → x ∥ lam x t
  14. ≢lam∥ : ∀ {y t} → x ∥ t → x ∥ lam y t
  15. app∥ : ∀ {t u} → x ∥ t → x ∥ u → x ∥ app t u
  16. _∥?_ : Decidable _∥_
  17. x ∥? var y with y ≟ x
  18. x ∥? var .x | yes refl = no (λ { (var∥ x≢x) → x≢x refl })
  19. x ∥? var y | no y≢x = yes (var∥ y≢x)
  20. x ∥? lam y t with y ≟ x | x ∥? t
  21. x ∥? lam .x t | yes refl | _ = yes ≡lam∥
  22. x ∥? lam y t | no y≢x | yes x∥t = yes (≢lam∥ x∥t)
  23. x ∥? lam y t | no y≢x | no x∦t = no (λ { ≡lam∥ → {!!} ; (≢lam∥ p) → {!!} })
  24. x ∥? app t u with x ∥? t | x ∥? u
  25. x ∥? app t u | yes x∥t | yes x∥u = yes (app∥ x∥t x∥u)
  26. x ∥? app t u | no x∦t | _ = no (λ { (app∥ x∥t x∥u) → x∦t x∥t })
  27. x ∥? app t u | _ | no x∦u = no (λ { (app∥ x∥t x∥u) → x∦u x∥u })