\begin{code} {-# OPTIONS --safe #-} open import Prelude open import FreeMonad.PackagedTheory open import Signatures open import FinitenessConditions module FreeMonad.Combinations.LiftLess.Tensor (T₁ : FullTheory ℓzero) (T₂ : FullTheory ℓzero) where import FreeMonad.Combinations.Sum T₁ T₂ as SumTheory open import FreeMonad.Combinations.Sum T₁ T₂ hiding (𝒯; finVars; lift₁; lift₂; combinedTheory) public open FullTheory T₁ renaming (𝒯 to 𝒯₁; finiteArity to finAr₁; finiteVars to finVar₁) open FullTheory T₂ renaming (𝔽 to 𝔾; 𝒯 to 𝒯₂; finiteArity to finAr₂; finiteVars to finVar₂) open Signature open import FreeMonad.Theory open import FreeMonad.Syntax hiding (Op⟦_⟧) import FreeMonad.Theory open import FreeMonad.Syntax (𝔽 ⊞ 𝔾) using (Op⟦_⟧) open SyntaxBind (𝔽 ⊞ 𝔾) commutative : Law (𝔽 ⊞ 𝔾) ℓzero commutative .FreeMonad.Theory.Γ = Op 𝔽 × Op 𝔾 commutative .FreeMonad.Theory.ν (fs , gs) = Arity 𝔽 fs × Arity 𝔾 gs commutative .FreeMonad.Theory.eqn (fs , gs) = \end{code} %<*commutative-law> \begin{code}[number=commutative-law] (do f ← Op⟦ inl fs ⟧ ; g ← Op⟦ inr gs ⟧ ; return (f , g)) ≐ (do g ← Op⟦ inr gs ⟧ ; f ← Op⟦ inl fs ⟧ ; return (f , g)) \end{code} %</commutative-law>