Skip to content

Instantly share code, notes, and snippets.

@zraffer
Last active October 13, 2017 15:11
Show Gist options
  • Save zraffer/9e4d1e4e190b7c47178457c1e9a0bcab to your computer and use it in GitHub Desktop.
Save zraffer/9e4d1e4e190b7c47178457c1e9a0bcab to your computer and use it in GitHub Desktop.
implicit issue

error for line 9 in check-minimal.agda

Failed to solve the following constraints:
  lsuc (_β„“β‚€_52 β„“β‚‚) βŠ” (lsuc (_ℓ₁_53 β„“β‚‚) βŠ” lsuc (lsuc β„“β‚‚))
  = lsuc (_β„“β‚€_52 β„“β‚‚) βŠ”
    (lsuc (_ℓ₁_53 β„“β‚‚) βŠ” (lsuc (lsuc β„“β‚‚) βŠ” (lsuc .ℓ₁ βŠ” .β„“β‚€)))
  lsuc .ℓ₁ βŠ” .β„“β‚€ = _β„“β‚€_52 β„“β‚‚ βŠ” lsuc (_ℓ₁_53 β„“β‚‚)
  _47 := Ξ» {β„“β‚€} {ℓ₁} β„“β‚‚ Pβ‚€ β†’ Pβ‚€ β†’ Set ℓ₁ [blocked on problem 26]
  [26] _Pβ‚€_41 β„“β‚‚ =< Set β„“β‚€ : Set (lsuc β„“β‚€)
  Is not empty type of sizes: _Pβ‚€_41 β„“β‚‚
  Is not empty type of sizes: _Pβ‚€_36 β„“β‚‚
module check-level where
open import Agda.Primitive using (_βŠ”_)
renaming (Level to 𝕃; lzero to 0α΄Έ; lsuc to _+1α΄Έ)
--
-- naked function types
--
module _ where
-- context length = 0
TPβ‚€ : βˆ€ β„“β‚€ β†’ Set (β„“β‚€ +1α΄Έ)
TPβ‚€ β„“β‚€ = Set β„“β‚€
idβ‚€ : βˆ€ {β„“β‚€} β†’ TPβ‚€ β„“β‚€ β†’ TPβ‚€ β„“β‚€
idβ‚€ Pβ‚€ = Pβ‚€
TPβ‚€' : βˆ€ β„“β‚€ β†’ idβ‚€ (TPβ‚€ (β„“β‚€ +1α΄Έ))
TPβ‚€' β„“β‚€ = TPβ‚€ β„“β‚€
-- context length = 1
TP₁ : βˆ€ {β„“β‚€} ℓ₁ β†’ (Pβ‚€ : TPβ‚€ β„“β‚€) β†’ Set (β„“β‚€ βŠ” (ℓ₁ +1α΄Έ))
TP₁ ℓ₁ Pβ‚€ = (pβ‚€ : Pβ‚€) β†’ Set ℓ₁
id₁ : βˆ€ {β„“β‚€ ℓ₁} β†’ {Pβ‚€ : TPβ‚€ β„“β‚€} β†’ TP₁ ℓ₁ Pβ‚€ β†’ TP₁ ℓ₁ Pβ‚€
id₁ P₁ = P₁
TP₁' : βˆ€ {β„“β‚€} ℓ₁ β†’ id₁ (TP₁ (β„“β‚€ βŠ” (ℓ₁ +1α΄Έ))) (TPβ‚€ β„“β‚€)
TP₁' ℓ₁ = TP₁ ℓ₁
-- context length = 2
TPβ‚‚ : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ {Pβ‚€ : TPβ‚€ β„“β‚€} β†’ (P₁ : TP₁ ℓ₁ Pβ‚€) β†’ Set (β„“β‚€ βŠ” ℓ₁ βŠ” (β„“β‚‚ +1α΄Έ))
TPβ‚‚ β„“β‚‚ {Pβ‚€} P₁ = {pβ‚€ : Pβ‚€} β†’ (p₁ : P₁ pβ‚€) β†’ Set β„“β‚‚
idβ‚‚ : βˆ€ {β„“β‚€ ℓ₁ β„“β‚‚} β†’ {Pβ‚€ : TPβ‚€ β„“β‚€} β†’ {P₁ : TP₁ ℓ₁ Pβ‚€} β†’ TPβ‚‚ β„“β‚‚ P₁ β†’ TPβ‚‚ β„“β‚‚ P₁
idβ‚‚ Pβ‚‚ = Pβ‚‚
TPβ‚‚' : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ idβ‚‚ {P₁ = TP₁ _} (TPβ‚‚ (β„“β‚€ βŠ” ℓ₁ βŠ” (β„“β‚‚ +1α΄Έ))) (TP₁ {β„“β‚€} ℓ₁)
TPβ‚‚' β„“β‚‚ = TPβ‚‚ β„“β‚‚
--
-- nominal record types
--
module _ where
-- record identity wrapper
record Id {β„“} (It : Set β„“) : Set β„“ where
constructor ↑
field ↓ : It
open Id
-- context length = 0
WPβ‚€ : βˆ€ β„“β‚€ β†’ TPβ‚€ (β„“β‚€ +1α΄Έ)
WPβ‚€ β„“β‚€ = Id (TPβ‚€ β„“β‚€)
RPβ‚€ : βˆ€ β„“β‚€ β†’ WPβ‚€ (β„“β‚€ +1α΄Έ)
RPβ‚€ β„“β‚€ = ↑ (WPβ‚€ β„“β‚€)
_$β‚€ : βˆ€ {β„“β‚€} β†’ WPβ‚€ β„“β‚€ β†’ TPβ‚€ β„“β‚€
_$β‚€ = ↓
RPβ‚€' : βˆ€ β„“β‚€ β†’ (RPβ‚€ (β„“β‚€ +1α΄Έ)) $β‚€
RPβ‚€' β„“β‚€ = RPβ‚€ β„“β‚€
-- context length = 1
WP₁ : βˆ€ {β„“β‚€} ℓ₁ β†’ TP₁ (β„“β‚€ βŠ” (ℓ₁ +1α΄Έ)) (WPβ‚€ β„“β‚€)
WP₁ ℓ₁ wPβ‚€ = Id (TP₁ ℓ₁ (↓ wPβ‚€))
RP₁ : βˆ€ {β„“β‚€} ℓ₁ β†’ WP₁ (β„“β‚€ βŠ” (ℓ₁ +1α΄Έ)) (RPβ‚€ β„“β‚€)
RP₁ ℓ₁ = ↑ (WP₁ ℓ₁)
_$₁_ : βˆ€ {β„“β‚€ ℓ₁} β†’ {wPβ‚€ : WPβ‚€ β„“β‚€} β†’ WP₁ ℓ₁ wPβ‚€ β†’ TP₁ ℓ₁ (↓ wPβ‚€)
_$₁_ = ↓
RP₁' : βˆ€ {β„“β‚€} ℓ₁ β†’ RP₁ (β„“β‚€ βŠ” (ℓ₁ +1α΄Έ)) $₁ RPβ‚€ β„“β‚€
RP₁' ℓ₁ = RP₁ ℓ₁
-- context length = 2
WPβ‚‚ : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ TPβ‚‚ (β„“β‚€ βŠ” ℓ₁ βŠ” (β„“β‚‚ +1α΄Έ)) (WP₁ {β„“β‚€} ℓ₁)
WPβ‚‚ β„“β‚‚ wP₁ = Id (TPβ‚‚ β„“β‚‚ (↓ wP₁))
RPβ‚‚ : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ WPβ‚‚ (β„“β‚€ βŠ” ℓ₁ βŠ” (β„“β‚‚ +1α΄Έ)) (RP₁ {β„“β‚€} ℓ₁)
RPβ‚‚ β„“β‚‚ = ↑ (WPβ‚‚ β„“β‚‚)
_$β‚‚_ : βˆ€ {β„“β‚€ ℓ₁ β„“β‚‚} β†’ {wPβ‚€ : WPβ‚€ β„“β‚€} β†’ {wP₁ : WP₁ ℓ₁ wPβ‚€} β†’ WPβ‚‚ β„“β‚‚ wP₁ β†’ TPβ‚‚ β„“β‚‚ (↓ wP₁)
_$β‚‚_ = ↓
RPβ‚‚' : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ RPβ‚‚ (β„“β‚€ βŠ” ℓ₁ βŠ” (β„“β‚‚ +1α΄Έ)) $β‚‚ RP₁ {β„“β‚€} ℓ₁
RPβ‚‚' β„“β‚‚ = RPβ‚‚ β„“β‚‚
--
module check-minimal where
open import Agda.Primitive
TPβ‚‚ : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ {Pβ‚€ : Set β„“β‚€} β†’ (P₁ : Pβ‚€ β†’ Set ℓ₁) β†’ Set _
TPβ‚‚ β„“β‚‚ {Pβ‚€} P₁ = {pβ‚€ : Pβ‚€} β†’ (p₁ : P₁ pβ‚€) β†’ Set β„“β‚‚
idβ‚‚ : βˆ€ {β„“β‚€ ℓ₁ β„“β‚‚} β†’ {Pβ‚€ : Set β„“β‚€} β†’ {P₁ : Pβ‚€ β†’ Set ℓ₁} β†’ TPβ‚‚ β„“β‚‚ P₁ β†’ TPβ‚‚ β„“β‚‚ P₁
idβ‚‚ Pβ‚‚ = Pβ‚‚
TPβ‚‚' : βˆ€ {β„“β‚€ ℓ₁} β„“β‚‚ β†’ idβ‚‚ -- {P₁ = Ξ» Pβ‚€ β†’ Pβ‚€ β†’ Set _}
(TPβ‚‚ _) (Ξ» (Pβ‚€ : Set β„“β‚€) β†’ Pβ‚€ β†’ Set ℓ₁)
TPβ‚‚' β„“β‚‚ = TPβ‚‚ β„“β‚‚
{-# OPTIONS --type-in-type #-}
module check where
--
-- naked function types
--
module _ where
-- context length = 0
TPβ‚€ : Set
TPβ‚€ = Set
idβ‚€ : TPβ‚€ β†’ TPβ‚€
idβ‚€ Pβ‚€ = Pβ‚€
TPβ‚€' : idβ‚€ TPβ‚€
TPβ‚€' = TPβ‚€
-- context length = 1
TP₁ : (Pβ‚€ : TPβ‚€) β†’ Set
TP₁ Pβ‚€ = (pβ‚€ : Pβ‚€) β†’ Set
id₁ : {Pβ‚€ : TPβ‚€} β†’ TP₁ Pβ‚€ β†’ TP₁ Pβ‚€
id₁ P₁ = P₁
TP₁' : id₁ TP₁ TPβ‚€
TP₁' = TP₁
-- context length = 2
TPβ‚‚ : {Pβ‚€ : TPβ‚€} β†’ (P₁ : TP₁ Pβ‚€) β†’ Set
TPβ‚‚ {Pβ‚€} P₁ = {pβ‚€ : Pβ‚€} β†’ (p₁ : P₁ pβ‚€) β†’ Set
idβ‚‚ : {Pβ‚€ : TPβ‚€} β†’ {P₁ : TP₁ Pβ‚€} β†’ TPβ‚‚ P₁ β†’ TPβ‚‚ P₁
idβ‚‚ Pβ‚‚ = Pβ‚‚
TPβ‚‚' : idβ‚‚ {P₁ = TP₁} TPβ‚‚ TP₁ -- NO, can NOT infer implicit
TPβ‚‚' = TPβ‚‚
--
-- nominal record types
--
module _ where
-- record identity wrapper
record Id (It : Set) : Set where
constructor ↑
field ↓ : It
open Id
-- context length = 0
WPβ‚€ : TPβ‚€
WPβ‚€ = Id TPβ‚€
RPβ‚€ : WPβ‚€
RPβ‚€ = ↑ WPβ‚€
_$β‚€ : WPβ‚€ β†’ TPβ‚€
_$β‚€ = ↓
RPβ‚€' : RPβ‚€ $β‚€
RPβ‚€' = RPβ‚€
-- context length = 1
WP₁ : TP₁ WPβ‚€
WP₁ Pβ‚€ = Id (TP₁ (↓ Pβ‚€))
RP₁ : WP₁ RPβ‚€
RP₁ = ↑ WP₁
_$₁_ : {wPβ‚€ : WPβ‚€} β†’ WP₁ wPβ‚€ β†’ TP₁ (↓ wPβ‚€)
_$₁_ = ↓
RP₁' : RP₁ $₁ RPβ‚€
RP₁' = RP₁
-- context length = 2
WPβ‚‚ : TPβ‚‚ WP₁
WPβ‚‚ wP₁ = Id (TPβ‚‚ (↓ wP₁))
RPβ‚‚ : WPβ‚‚ RP₁
RPβ‚‚ = ↑ WPβ‚‚
_$β‚‚_ : {wPβ‚€ : WPβ‚€} β†’ {wP₁ : WP₁ wPβ‚€} β†’ WPβ‚‚ wP₁ β†’ TPβ‚‚ (↓ wP₁)
_$β‚‚_ = ↓
RPβ‚‚' : RPβ‚‚ $β‚‚ RP₁ -- YES, can infer implicits
RPβ‚‚' = RPβ‚‚
--
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment