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β
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β
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 Ξ