module linear.Context.Mix where open import Data.Vec as V hiding (_∷ʳ_ ; fromList) open import linear.Context import linear.Usage.Erasure as UE data _++_≅_ : ∀ {m n p} → Context m → Context n → Context p → Set where [] : [] ++ [] ≅ [] _∷ˡ_ : ∀ {m n p} {γ : Context m} {δ : Context n} {θ : Context p} σ → γ ++ δ ≅ θ → (σ ∷ γ) ++ δ ≅ (σ ∷ θ) _∷ʳ_ : ∀ {m n p} {γ : Context m} {δ : Context n} {θ : Context p} σ → γ ++ δ ≅ θ → γ ++ (σ ∷ δ) ≅ (σ ∷ θ) infix 2 _++_≅_ _++ˡ_ : ∀ {m n p} {γ : Context m} {δ : Context n} {θ : Context p} {o} (φ : Context o) → γ ++ δ ≅ θ → φ V.++ γ ++ δ ≅ φ V.++ θ [] ++ˡ p = p (σ ∷ φ) ++ˡ p = σ ∷ˡ (φ ++ˡ p) fromList : ∀ {γ δ θ} → γ UE.++ δ ≅ θ → V.fromList γ ++ V.fromList δ ≅ V.fromList θ fromList UE.[] = [] fromList (σ UE.∷ˡ p) = σ ∷ˡ fromList p fromList (σ UE.∷ʳ p) = σ ∷ʳ fromList p