module Definition.Untyped.NotParametrised where
open import Tools.Bool
open import Tools.Fin
open import Tools.Function
open import Tools.Level
open import Tools.List
open import Tools.Nat
open import Tools.PropositionalEquality
open import Tools.Vec
private variable
a : Level
Ξ± l m n : Nat
π π : Set a
P Q : 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 Ξ
map-Con : (β {n} β P n β Q n) β Con P n β Con Q n
map-Con _ Ξ΅ = Ξ΅
map-Con f (Ξ β A) = map-Con f Ξ β f A
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)
step-at : Fin n β Wk n (pred n)
step-at x0 = step id
step-at (_+1 {n = 0} ())
step-at (_+1 {n = 1+ _} x) = lift (step-at x)
step-atβ² : (x : Fin n) β Wk (n βΈ toβ x) (pred n βΈ toβ x)
step-atβ² x0 = step id
step-atβ² (_+1 {n = 0} ())
step-atβ² (_+1 {n = 1+ _} x) = step-atβ² x
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β
Universe-level : Set
Universe-level = Nat
infixl 6 _βα΅_
_βα΅_ : (_ _ : Universe-level) β Universe-level
_βα΅_ = flip Tools.Nat._β_
_ : l βα΅ 0 β‘ l
_ = refl
infix 4 _β€α΅_
_β€α΅_ : (_ _ : Universe-level) β Set
i β€α΅ j = i β€β² j
open Tools.Nat public
using ()
renaming (β€β²-refl to β€α΅-refl; β€β²-step to β€α΅-step)
infix 4 _<α΅_
_<α΅_ : (_ _ : Universe-level) β Set
i <α΅ j = i <β² j
Unfolding : Nat β Set
Unfolding = Vec Bool
pattern _β° Ο = false β· Ο
pattern _ΒΉ Ο = true β· Ο
opaque
infixl 5 _βα΅_
_βα΅_ : Unfolding n β Unfolding n β Unfolding n
_βα΅_ = zipWith _β¨_
opaque
ones : Unfolding n
ones = replicate _ true
opaque
zeros : Unfolding n
zeros = replicate _ false
data Opacity (n : Nat) : Set where
opa : Unfolding n β Opacity n
tra : Opacity n
infixl 24 _ββ¨_β©[_β·_] _ββ¨_β©! _β!
data DCon (π : Set a) : Nat β Set a where
Ξ΅ : DCon π 0
_ββ¨_β©[_β·_] : DCon π n β Opacity n β π β π β DCon π (1+ n)
pattern _ββ¨_β©! β Ο = β ββ¨ Ο β©[ _ β· _ ]
pattern _β! β = β ββ¨ _ β©!
private variable
β : DCon _ _
Ο : Opacity _
Ο : Unfolding _
data _β¦β·_β_ {π : Set a} : Nat β π β DCon π n β Set a where
here : β {A t} {β : DCon π n} β n β¦β· A β β ββ¨ Ο β©[ t β· A ]
there : β {A B u} β Ξ± β¦β· A β β β Ξ± β¦β· A β β ββ¨ Ο β©[ u β· B ]
data _β¦_β·_β_ {π : Set a} : Nat β π β π β DCon π n β Set a where
here : β {A t} {β : DCon π n} β n β¦ t β· A β β ββ¨ tra β©[ t β· A ]
there : β {A B t u} β Ξ± β¦ t β· A β β β Ξ± β¦ t β· A β β ββ¨ Ο β©[ u β· B ]
data _β¦ββ·_β_ {π : Set a} : Nat β π β DCon π n β Set a where
here : β {A t} {β : DCon π n} β n β¦ββ· A β β ββ¨ opa Ο β©[ t β· A ]
there : β {A B u} β Ξ± β¦ββ· A β β β Ξ± β¦ββ· A β β ββ¨ Ο β©[ u β· B ]
glassify : {π : Set a} β DCon π n β DCon π n
glassify Ξ΅ = Ξ΅
glassify (β ββ¨ Ο β©[ t β· A ]) = glassify β ββ¨ tra β©[ t β· A ]
Transparent : {π : Set a} β DCon π n β Set a
Transparent β = β β‘ glassify β
data DExt (π : Set a) : Nat β Nat β Set a where
id : n β‘ m β DExt π m n
step : DExt π m n β Opacity m β π β π β DExt π (1+ m) n
pattern idα΅ = id refl
pattern stepβ Ο A t = step idα΅ Ο A t
opaque
as-DExt : DCon π n β DExt π n 0
as-DExt Ξ΅ = idα΅
as-DExt (β ββ¨ Ο β©[ t β· A ]) = step (as-DExt β) Ο A t
opaque
infixl 24 _α΅β’_
_α΅β’_ : DCon π m β DExt π n m β DCon π n
β α΅β’ id eq = subst (DCon _) eq β
β α΅β’ step ΞΎ Ο A t = (β α΅β’ ΞΎ) ββ¨ Ο β©[ t β· A ]
_β’α΅_ : {π : Set a} β DExt π m n β DExt π n l β DExt π m l
id eq β’α΅ ΞΎ = subst (flip (DExt _) _) eq ΞΎ
step ΞΎβ² Ο A t β’α΅ ΞΎ = step (ΞΎβ² β’α΅ ΞΎ) Ο A t
opaque
glassifyα΅ : DExt π m n β DExt π m n
glassifyα΅ (id eq) = id eq
glassifyα΅ (step ΞΎ _ A t) = step (glassifyα΅ ΞΎ) tra A t
map-DCon : (π β π) β DCon π n β DCon π n
map-DCon _ Ξ΅ = Ξ΅
map-DCon f (β ββ¨ Ο β©[ t β· A ]) =
map-DCon f β ββ¨ Ο β©[ f t β· f A ]
infix 5 _Β»_
record Context-pair (P : Nat β Set a) (m n : Nat) : Set a where
constructor _Β»_
field
defs : DCon (P 0) m
vars : Con P n
open Context-pair public
infixl 24 _Β»β_
_Β»β_ : Context-pair P m n β P n β Context-pair P m (1+ n)
(β Β» Ξ) Β»β A = β Β» Ξ β A
map-Cons : (β {n} β P n β Q n) β Context-pair P m n β Context-pair Q m n
map-Cons f (β Β» Ξ) = map-DCon f β Β» map-Con f Ξ