module Cartesian.List where open import Stdlib open import Signature open import Signature.List open import Signature.Nat open import Cartesian τList : (A : Set) → Cartesian (ΣList A) ΣNat id τList A = record { σ = σList ; ρ = ρList ; coh = cohList } where open Sig σList : (tt : ⊤) → Op (ΣList A) tt → Op ΣNat tt σList tt (inj₁ tt) = inj₁ tt σList tt (inj₂ a) = inj₂ tt ρList : (tt : ⊤)(op⁺ : Op (ΣList A) tt) → Ar ΣNat (σList tt op⁺) ≡ Ar (ΣList A) op⁺ ρList tt (inj₁ tt) = refl ρList tt (inj₂ a) = refl cohList : (tt : ⊤)(op⁺ : Op (ΣList A) tt)(ar : Ar ΣNat (σList tt op⁺)) → Ty (ΣList A) (subst id (ρList tt op⁺) ar) ≡ Ty ΣNat ar cohList tt (inj₁ tt) () cohList tt (inj₂ a) tt = refl