fact: Definition ProductOp {S : OpSignature} {I : Type} (A : I → OpAlgebra S) := {| carrier := ∀ i, A i ; op := (fun (o : operation S) args i => op (A i) o (fun j => args j i)) |}.
imports: Category.Lib Category.Theory.Category Category.Structure.Terminal Category.Structure.Initial Category.Structure.Cartesian