{-# OPTIONS --cumulativity #-}
module ROmega.Equivalence.Syntax where
open import Agda.Primitive
open import Level
open import ROmega.Types
open import ROmega.Types.Substitution
private
variable
ℓτ ℓΔ ℓκ ℓκ' ℓκ₁ ℓκ₂ : Level
Δ : KEnv ℓΔ
κ : Kind ℓκ
κ' : Kind ℓκ'
κ₁ : Kind ℓκ₁
κ₂ : Kind ℓκ₂
data _≡p_ {ℓ} : (π₁ π₂ : Pred Δ κ) → Set ℓ
data _≡t_ {ℓ} : (τ υ : Ty Δ κ) → Set ℓ
infix 0 _≡p_
infix 0 _≡t_
data _≡p_ {ℓ} where
peq-≲ : ∀ {τ₁ τ₂ υ₁ υ₂ : Ty Δ R[ κ ]} →
τ₁ ≡t υ₁ → τ₂ ≡t υ₂ →
(τ₁ ≲ τ₂) ≡p υ₁ ≲ υ₂
peq-· : ∀ {τ₁ τ₂ τ₃ υ₁ υ₂ υ₃ : Ty Δ R[ κ ]} →
τ₁ ≡t υ₁ → τ₂ ≡t υ₂ → τ₃ ≡t υ₃ →
τ₁ · τ₂ ~ τ₃ ≡p υ₁ · υ₂ ~ υ₃
data _≡t_ {ℓ} where
teq-refl : {τ : Ty Δ κ} →
τ ≡t τ
teq-sym : ∀ {τ₁ τ₂ : Ty Δ κ} →
τ₁ ≡t τ₂ →
τ₂ ≡t τ₁
teq-trans : ∀ {τ₁ τ₂ τ₃ : Ty Δ κ} →
τ₁ ≡t τ₂ → τ₂ ≡t τ₃ →
τ₁ ≡t τ₃
teq-⇒ : ∀ {τ₁ τ₂ : Ty Δ (★ ℓτ)} {π₁ π₂ : Pred Δ κ} →
π₁ ≡p π₂ → τ₁ ≡t τ₂ →
π₁ ⇒ τ₁ ≡t π₂ ⇒ τ₂
teq-∀ : ∀ {τ υ : Ty (Δ , κ) (★ ℓτ)} →
τ ≡t υ →
`∀ κ τ ≡t `∀ κ υ
teq-β : ∀ {τ : Ty (Δ , κ) κ'} {υ : Ty Δ κ} →
((`λ κ τ) ·[ υ ]) ≡t (τ β[ υ ])
teq-· : ∀ {τ₁ υ₁ : Ty Δ (κ `→ κ')} {τ₂ υ₂ : Ty Δ κ} →
τ₁ ≡t υ₁ → τ₂ ≡t υ₂ →
τ₁ ·[ τ₂ ] ≡t υ₁ ·[ υ₂ ]
teq-sing : ∀ {l₁ l₂ : Ty Δ L} →
{τ₁ τ₂ : Ty Δ κ₁} →
l₁ ≡t l₂ → τ₁ ≡t τ₂ →
(l₁ R▹ τ₁) ≡t (l₂ R▹ τ₂)
teq-lift₁ : ∀ {l : Ty Δ L} {υ : Ty Δ κ} {τ : Ty Δ (κ `→ κ')} →
(l R▹ τ) ·⌈ υ ⌉ ≡t (l R▹ (τ ·[ υ ]))
teq-lift₂ : ∀ {l : Ty Δ L} {υ : Ty Δ (κ₁ `→ κ₂)} {τ : Ty Δ κ₁} →
⌈ υ ⌉· (l R▹ τ) ≡t (l R▹ (υ ·[ τ ]))
teq-⌊⌋ : ∀ {τ υ : Ty Δ L} →
τ ≡t υ →
⌊ τ ⌋ ≡t ⌊ υ ⌋
teq-Π : ∀ {ρ₁ ρ₂ : Ty Δ R[ ★ ℓκ ] } →
ρ₁ ≡t ρ₂ →
Π ρ₁ ≡t Π ρ₂
teq-Σ : ∀ {ρ₁ ρ₂ : Ty Δ R[ ★ ℓκ ] } →
ρ₁ ≡t ρ₂ →
Σ ρ₁ ≡t Σ ρ₂