open import Graded.Modality
module Definition.Untyped.Non-dependent
{a} {M : Set a}
(𝕄 : Modality M)
where
open Modality 𝕄
open import Definition.Untyped M
open import Definition.Untyped.Properties M
open import Tools.Nat
open import Tools.PropositionalEquality
open import Tools.Reasoning.PropositionalEquality
private variable
n : Nat
A B : Term _
σ : Subst _ _
ρ : Wk _ _
b : BinderMode
p : M
opaque
infixr 30 _⟶×⟨_⟩[_]_
_⟶×⟨_⟩[_]_ : Term n → BinderMode → M → Term n → Term n
A ⟶×⟨ b ⟩[ p ] B = ΠΣ⟨ b ⟩ p , 𝟘 ▷ A ▹ wk1 B
infixr 30 _⟶[_]_
_⟶[_]_ : Term n → M → Term n → Term n
A ⟶[ p ] B = A ⟶×⟨ BMΠ ⟩[ p ] B
infixr 30 _×⟨_⟩[_]_
_×⟨_⟩[_]_ : Term n → Strength → M → Term n → Term n
A ×⟨ s ⟩[ p ] B = A ⟶×⟨ BMΣ s ⟩[ p ] B
infixr 30 _×ˢ[_]_
_×ˢ[_]_ : Term n → M → Term n → Term n
A ×ˢ[ p ] B = A ×⟨ 𝕤 ⟩[ p ] B
infixr 30 _×ʷ[_]_
_×ʷ[_]_ : Term n → M → Term n → Term n
A ×ʷ[ p ] B = A ×⟨ 𝕨 ⟩[ p ] B
opaque
unfolding _⟶×⟨_⟩[_]_
⟶×⟨⟩[]-[] : A ⟶×⟨ b ⟩[ p ] B [ σ ] ≡ (A [ σ ]) ⟶×⟨ b ⟩[ p ] (B [ σ ])
⟶×⟨⟩[]-[] {A} {b} {p} {B} {σ} =
ΠΣ⟨ b ⟩ p , 𝟘 ▷ A ▹ wk1 B [ σ ] ≡⟨⟩
ΠΣ⟨ b ⟩ p , 𝟘 ▷ A [ σ ] ▹ (wk1 B [ σ ⇑ ]) ≡⟨ cong (ΠΣ⟨ _ ⟩ _ , _ ▷ _ ▹_) (wk1-liftSubst B) ⟩
ΠΣ⟨ b ⟩ p , 𝟘 ▷ A [ σ ] ▹ wk1 (B [ σ ]) ∎
opaque
wk-⟶×⟨⟩[] : wk ρ (A ⟶×⟨ b ⟩[ p ] B) ≡ wk ρ A ⟶×⟨ b ⟩[ p ] wk ρ B
wk-⟶×⟨⟩[] {ρ} {A} {b} {p} {B} =
wk ρ (A ⟶×⟨ b ⟩[ p ] B) ≡⟨ wk≡subst _ _ ⟩
A ⟶×⟨ b ⟩[ p ] B [ toSubst ρ ] ≡⟨ ⟶×⟨⟩[]-[] ⟩
(A [ toSubst ρ ]) ⟶×⟨ b ⟩[ p ] (B [ toSubst ρ ]) ≡˘⟨ cong₂ _⟶×⟨ _ ⟩[ _ ]_ (wk≡subst _ _) (wk≡subst _ _) ⟩
wk ρ A ⟶×⟨ b ⟩[ p ] wk ρ B ∎