{-# OPTIONS --cubical #-}
open import ContainersPlus
open import Level renaming (suc to lsuc ; zero to lzero)
open import Cubical.Foundations.Prelude hiding (_◁_) renaming (fst to π₁ ; snd to π₂)
record DirectedContainer (ℓs ℓp : Level) (C : Container ℓs ℓp) : Set (lsuc (ℓs ⊔ ℓp)) where
  S = Shape C
  P = Position C
  field
    o : (s : S) → P s
    _↓_ : (s : S) → P s → S
    _⊕_ : {s : S} → (p : P s) → P (s ↓ p) → P s 
    unitl-↓ : (s : S) → s ↓ (o _) ≡ s
    distr-↓-⊕ : (s : S) (p : P s) (p' : P (s ↓ p)) 
      → s ↓ (p ⊕ p') ≡ (s ↓ p) ↓ p'
    unitl-⊕ : (s : S) (p : P (s ↓ o s)) → 
              PathP (λ i → P (unitl-↓ s (~ i)))
                    (o s ⊕ p)
                    p
    unitr-⊕ : (s : S) (p : P s) → p ⊕ (o (s ↓ p)) ≡ p
    assoc-⊕ : (s : S) (p : P s) (p' : P (s ↓ p)) →
              PathP (λ i → P (distr-↓-⊕ s p p' i) → P s)
                    (λ p'' → (p ⊕ p') ⊕ p'')
                    (λ p'' → p ⊕ (p' ⊕ p''))