\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>