The product of two state-affine systems is state-affine: its matrix is polynomial
ProvedPolyAssembly.prodMat_evalLet two state-affine systems be given by coefficient families, so that their matrices and affine terms are polynomial in the input:
The theorem asserts that the matrix of the product system — the block-triangular matrix acting on the augmented state — is itself the evaluation of a single coefficient family:
The degrees convolve: they are simple for the two diagonal blocks, and sums for the cross blocks and the tensor block.
What this completes. Together with the trajectory-level identity — the augmented state solves the product recursion and the readout returns the product of the two outputs — this establishes that the product of two state-affine systems is a state-affine system. That is the closure under products of Proposition 3.10, and hence the algebra property of the family of state-affine reservoir functionals, which is one of the two hypotheses of the Stone-Weierstrass argument behind their universality; the other is that the family separates points.
Formalization Note The coefficients are indexed by a disjoint union with one degree function per family of blocks, rather than uniformly over pairs of degrees. The alternative would force the diagonal blocks to be written with a test on whether the second index vanishes, which is harder to manipulate and introduces a degenerate case when there are no coefficients at all. The statement holds for every real , including zero, where the convention makes the constant terms contribute. No positivity or bound on the coefficients is assumed: this is an identity of matrices, not an estimate.
import Mathlib import Definitions.Def_SASAlgebra import Definitions.Def_PolyAssembly open Matrix SASAlgebra PolyAssembly
namespace PolyAssembly
variable {N₁ N₂ r : ℕ}
theorem prodMat_eval (P₁ : Fin r → Matrix (Fin N₁) (Fin N₁) ℝ)
(Q₁ : Fin r → (Fin N₁ → ℝ)) (P₂ : Fin r → Matrix (Fin N₂) (Fin N₂) ℝ)
(Q₂ : Fin r → (Fin N₂ → ℝ)) (z : ℝ) :
∑ i : ProdIdx r, (z ^ prodDeg i) • prodCoef P₁ Q₁ P₂ Q₂ i
= prodMat (polyEval P₁ z) (vpolyEval Q₁ z)
(polyEval P₂ z) (vpolyEval Q₂ z) := by sorry
end PolyAssembly