module Definition.Untyped.NotParametrised where
open import Tools.Fin
open import Tools.Function
open import Tools.Level
open import Tools.List
open import Tools.Nat
open import Tools.PropositionalEquality
private variable
a : Level
l n : Nat
P : Nat → Set _
infixl 24 _∙_
data Con (A : Nat → Set a) : Nat → Set a where
ε : Con A 0
_∙_ : {n : Nat} → Con A n → A n → Con A (1+ n)
private variable
Γ : Con _ _
data Empty-con {P : Nat → Set a} : Con P n → Set a where
ε : Empty-con ε
infix 4 _or-empty_
data _or-empty_ {P : Nat → Set a} (A : Set a) : Con P n → Set a where
possibly-nonempty : ⦃ ok : A ⦄ → A or-empty Γ
ε : A or-empty ε
infixr 5 _∷ₜ_
data GenTs (A : Nat → Set a) : Nat → List Nat → Set a where
[] : {n : Nat} → GenTs A n []
_∷ₜ_ : {n b : Nat} {bs : List Nat}
(t : A (b + n)) (ts : GenTs A n bs) → GenTs A n (b ∷ bs)
data Strength : Set where
𝕤 𝕨 : Strength
data BinderMode : Set where
BMΠ : BinderMode
BMΣ : (s : Strength) → BinderMode
drop : ∀ k → Con P (k + n) → Con P n
drop 0 Γ = Γ
drop (1+ k) (Γ ∙ _) = drop k Γ
data Wk : Nat → Nat → Set where
id : {n : Nat} → Wk n n
step : {n m : Nat} → Wk m n → Wk (1+ m) n
lift : {n m : Nat} → Wk m n → Wk (1+ m) (1+ n)
infixl 30 _•_
_•_ : {l m n : Nat} → Wk l m → Wk m n → Wk l n
id • η′ = η′
step η • η′ = step (η • η′)
lift η • id = lift η
lift η • step η′ = step (η • η′)
lift η • lift η′ = lift (η • η′)
liftn : {k m : Nat} → Wk k m → (n : Nat) → Wk (n + k) (n + m)
liftn ρ 0 = ρ
liftn ρ (1+ n) = lift (liftn ρ n)
stepn : {k m : Nat} (ρ : Wk k m) → (n : Nat) → Wk (n + k) m
stepn ρ 0 = ρ
stepn ρ (1+ n) = step (stepn ρ n)
wkVar : {m n : Nat} (ρ : Wk m n) (x : Fin n) → Fin m
wkVar id x = x
wkVar (step ρ) x = (wkVar ρ x) +1
wkVar (lift ρ) x0 = x0
wkVar (lift ρ) (x +1) = (wkVar ρ x) +1
wk₀ : Wk n 0
wk₀ {n = 0} = id
wk₀ {n = 1+ n} = step wk₀
data Universe-level : Set where
0ᵘ+_ : Nat → Universe-level
ωᵘ : Universe-level
0ᵘ : Universe-level
0ᵘ = 0ᵘ+ 0
1ᵘ : Universe-level
1ᵘ = 0ᵘ+ 1
infixl 6 _⊔ᵘ_
_⊔ᵘ_ : (_ _ : Universe-level) → Universe-level
(0ᵘ+ m) ⊔ᵘ (0ᵘ+ n) = 0ᵘ+ (m Tools.Nat.⊔ n)
(0ᵘ+ m) ⊔ᵘ ωᵘ = ωᵘ
ωᵘ ⊔ᵘ n = ωᵘ
infix 4 _≤ᵘ_
data _≤ᵘ_ : Universe-level → Universe-level → Set where
≤ᵘ-fin : ∀ {l l′} → l ≤′ l′ → 0ᵘ+ l ≤ᵘ 0ᵘ+ l′
≤ᵘ-ωᵘ : ∀ {l} → l ≤ᵘ ωᵘ
≤ᵘ-refl : ∀ {l} → l ≤ᵘ l
≤ᵘ-refl {0ᵘ+ x} = ≤ᵘ-fin ≤′-refl
≤ᵘ-refl {(ωᵘ)} = ≤ᵘ-ωᵘ
infix 4 _<ᵘ_
data _<ᵘ_ : Universe-level → Universe-level → Set where
<ᵘ-fin : ∀ {l l′} → l <′ l′ → 0ᵘ+ l <ᵘ 0ᵘ+ l′
<ᵘ-ωᵘ : ∀ {l} → 0ᵘ+ l <ᵘ ωᵘ
0ᵘ<ᵘ1ᵘ : 0ᵘ <ᵘ 1ᵘ
0ᵘ<ᵘ1ᵘ = <ᵘ-fin ≤′-refl
data Level-small : Set where
small not-small : Level-small
data Level-support : Set where
only-literals : Level-support
level-type : Level-small → Level-support
private variable
sm sm₁ sm₂ : Level-small
infix 4 _≤LSm_
data _≤LSm_ : Level-small → Level-small → Set where
not-small≤ : not-small ≤LSm sm
small≤small : small ≤LSm small
data _≤LS_ : Level-support → Level-support → Set where
only-literals≤ : only-literals ≤LS only-literals
level-type : sm₁ ≤LSm sm₂ → level-type sm₁ ≤LS level-type sm₂