{-# OPTIONS --cubical #-} open import ContainersPlus open import MndContainer as MC open MC.MndContainer open import MndContainerMorphism open import Level renaming (suc to lsuc ; zero to lzero) open import Function open import Cubical.Foundations.Prelude hiding (_▷_) open import Cubical.Data.Sigma renaming (fst to π₁ ; snd to π₂) record MndCompatibleComposite (ℓs ℓp : Level) (S : Set ℓs) (P : S → Set ℓp) (T : Set ℓs) (Q : T → Set ℓp) (Aₘ : MndContainer _ _ (S ▷ P)) (Bₘ : MndContainer _ _ (T ▷ Q)) : Set (lsuc (ℓs ⊔ ℓp)) where ιᶜ : ⟦ S ▷ P ⟧ T ιᶜ = (ι Aₘ , const (ι Bₘ)) field σᶜ : (s : ⟦ S ▷ P ⟧ T) → (◇ P Q s → ⟦ S ▷ P ⟧ T) → ⟦ S ▷ P ⟧ T prᶜ₁ : (s : ⟦ S ▷ P ⟧ T) → (f : ◇ P Q s → ⟦ S ▷ P ⟧ T) → (p : ◇ P Q (σᶜ s f)) → ◇ P Q s prᶜ₂ : (s : ⟦ S ▷ P ⟧ T) → (f : ◇ P Q s → ⟦ S ▷ P ⟧ T) → (p : ◇ P Q (σᶜ s f)) → ◇ P Q (f (prᶜ₁ s f p)) isMCont : IsMndContainer _ _ (⟦ S ▷ P ⟧ T) (◇ P Q) ιᶜ σᶜ prᶜ₁ prᶜ₂ MCont : MndContainer _ _ ((⟦ S ▷ P ⟧ T) ▷ (◇ P Q)) MCont = mContBuilder _ _ _ _ ιᶜ σᶜ prᶜ₁ prᶜ₂ isMCont field s-inj : IsMndContainerMorphism _ _ _ _ S P (⟦ S ▷ P ⟧ T) (◇ P Q) Aₘ MCont (λ s → (s , const (ι Bₘ))) π₁ t-inj : IsMndContainerMorphism _ _ _ _ T Q (⟦ S ▷ P ⟧ T) (◇ P Q) Bₘ MCont (λ t → (ι Aₘ , const t)) π₂ middle-unit-shape : (s : S) (f : P s → T) → (s , f) ≡ σᶜ (s , const (ι Bₘ)) (λ p → (ι Aₘ , const (f (π₁ p)))) middle-unit-pos : (s : S) (f : P s → T) → PathP (λ i → ◇ P Q (middle-unit-shape s f i) → ◇ P Q (s , f)) (λ x → x) (λ x → (π₁ (prᶜ₁ _ _ x) , π₂ (prᶜ₂ _ _ x)))