open import Cubical.Foundations.Prelude hiding (Sub) open import Cubical.Foundations.HLevels module TT.Wild.Examples (X : hSet ℓ-zero) (Y : X .fst → hSet ℓ-zero) where open import TT.Wild.Syntax X Y private variable Γ Δ : Con A B : Ty Γ []ᵀ-⟨⟩-∘ : (B : Ty (Γ ▹ A)) (a : Tm Γ A) (γ : Sub Δ Γ) → B [ ⟨ a ⟩ ]ᵀ [ γ ]ᵀ ≡ B [ γ ⁺ ]ᵀ [ ⟨ a [ γ ]ᵗ ⟩ ]ᵀ []ᵀ-⟨⟩-∘ {Δ} B a γ = λ i → filler i1 i module []ᵀ-⟨⟩-∘ where filler : (j i : I) → Ty Δ filler j i = hfill (λ where j (i = i0) → []ᵀ-∘ B ⟨ a ⟩ γ j j (i = i1) → []ᵀ-∘ B (γ ⁺) ⟨ a [ γ ]ᵗ ⟩ j) (inS (B [ ⟨⟩-∘ a γ i ]ᵀ)) j []ᵗ-⟨⟩-∘ : (b : Tm (Γ ▹ A) B) (a : Tm Γ A) (γ : Sub Δ Γ) → PathP (λ i → Tm Δ ([]ᵀ-⟨⟩-∘ B a γ i)) (b [ ⟨ a ⟩ ]ᵗ [ γ ]ᵗ) (b [ γ ⁺ ]ᵗ [ ⟨ a [ γ ]ᵗ ⟩ ]ᵗ) []ᵗ-⟨⟩-∘ {B} {Δ} b a γ i = comp (λ j → Tm Δ ([]ᵀ-⟨⟩-∘.filler B a γ j i)) (λ where j (i = i0) → []ᵗ-∘ b ⟨ a ⟩ γ j j (i = i1) → []ᵗ-∘ b (γ ⁺) ⟨ a [ γ ]ᵗ ⟩ j) (b [ ⟨⟩-∘ a γ i ]ᵗ) []ᵀ-▹-η : (B : Ty (Γ ▹ A)) → B ≡ B [ p ⁺ ]ᵀ [ ⟨ q ⟩ ]ᵀ []ᵀ-▹-η {Γ} {A} B = λ i → filler i1 i module []ᵀ-▹-η where filler : (j i : I) → Ty (Γ ▹ A) filler j i = hfill (λ where j (i = i0) → []ᵀ-id B j j (i = i1) → []ᵀ-∘ B (p ⁺) ⟨ q ⟩ j) (inS (B [ ▹-η i ]ᵀ)) j []ᵗ-▹-η : (b : Tm (Γ ▹ A) B) → PathP (λ i → Tm (Γ ▹ A) ([]ᵀ-▹-η B i)) b (b [ p ⁺ ]ᵗ [ ⟨ q ⟩ ]ᵗ) []ᵗ-▹-η {Γ} {A} {B} b i = comp (λ j → Tm (Γ ▹ A) ([]ᵀ-▹-η.filler B j i)) (λ where j (i = i0) → []ᵗ-id b j j (i = i1) → []ᵗ-∘ b (p ⁺) ⟨ q ⟩ j) (b [ ▹-η i ]ᵗ) infixl 9 _[_]ᵖ _[_]ᵖ : Tm Γ (Π A B) → (γ : Sub Δ Γ) → Tm Δ (Π (A [ γ ]ᵀ) (B [ γ ⁺ ]ᵀ)) _[_]ᵖ {A} {B} {Δ} f γ = filler i1 module []ᵖ where filler : (i : I) → Tm Δ (Π-[] A B γ i) filler i = transport-filler (λ i → Tm Δ (Π-[] A B γ i)) (f [ γ ]ᵗ) i lam-[]ᵖ : (b : Tm (Γ ▹ A) B) (γ : Sub Δ Γ) → lam b [ γ ]ᵖ ≡ lam (b [ γ ⁺ ]ᵗ) lam-[]ᵖ b γ = fromPathP (lam-[] b γ) app-[] : (f : Tm Γ (Π A B)) (γ : Sub Δ Γ) → app f [ γ ⁺ ]ᵗ ≡ app (f [ γ ]ᵖ) app-[] f γ = sym (Π-β (app f [ γ ⁺ ]ᵗ)) ∙ cong app (sym (lam-[]ᵖ (app f) γ) ∙ cong _[ γ ]ᵖ (sym (Π-η f))) infixl 9 _·_ _·_ : Tm Γ (Π A B) → (a : Tm Γ A) → Tm Γ (B [ ⟨ a ⟩ ]ᵀ) f · a = app f [ ⟨ a ⟩ ]ᵗ ·-[] : (f : Tm Γ (Π A B)) (a : Tm Γ A) (γ : Sub Δ Γ) → PathP (λ i → Tm Δ ([]ᵀ-⟨⟩-∘ B a γ i)) ((f · a) [ γ ]ᵗ) ((f [ γ ]ᵖ) · (a [ γ ]ᵗ)) ·-[] f a γ = []ᵗ-⟨⟩-∘ (app f) a γ ▷ cong _[ ⟨ a [ γ ]ᵗ ⟩ ]ᵗ (app-[] f γ) Π-β′ : (b : Tm (Γ ▹ A) B) (a : Tm Γ A) → lam b · a ≡ b [ ⟨ a ⟩ ]ᵗ Π-β′ b a = cong _[ ⟨ a ⟩ ]ᵗ (Π-β b) Π-η′ : (f : Tm Γ (Π A B)) → PathP (λ i → Tm Γ (Π A ([]ᵀ-▹-η B i))) f (lam ((f [ p ]ᵖ) · q)) Π-η′ f i = hcomp (λ where j (i = i0) → Π-η f (~ j) j (i = i1) → lam (app-[] f p j [ ⟨ q ⟩ ]ᵗ)) (lam ([]ᵗ-▹-η (app f) i))