Products rules
In this section we illustrate some examples of products of formal series and their associated product rules. This will motivate the general definition of a product rule, which will be used in the next section to define a general notion of product of formal series.
{-# OPTIONS --guardedness --sized-types #-} open import Preliminaries.Base hiding (_×_) module General.ProductRules (R : CommutativeRing) where private variable i : Size open import Preliminaries.Algebra R open import Preliminaries.Vector
Examples of products of series
module Examples (Σ : Set) where open import General.Series R Σ
In this section we consider some examples of product of series * which
are well-known in the literature. An early appearance of these products
in the theoretical computer science literature can be found in
[Fliess(1974)]. All of them will satisfy the same
condition on the constant term of the product, namely
ν (f * g) = ν f *R ν g
What will differ is the way in which the derivative of the product is computed in terms of the derivatives of the factors.
Cauchy product
The Cauchy product _×_ is obtained by extending concatenation of
words to series by linearity. Perhaps this is the most well-known
product of formal series. In our coinductive framework, it can be
defined using the well-known Brzozowski product rule:
δ (f × g) a = δ f a × g + ν f · δ g a
Intuitively, this means that in order for f × g to read an input
symbol a, either f reads a (and then continues as δ f a × g), or
f accepts the empty word and then g reads a.
infixr 7 _×_ _×_ : A ⟪ Σ ⟫ i → A ⟪ Σ ⟫ i → A ⟪ Σ ⟫ i ν (f × g) = ν f *R ν g δ (f × g) a = δ f a × g + ν f · δ g a
The size parameter i is used to allow Agda to verify productivity of
the definition. A similar consideration applies to the other products
defined below.
Our notion of product rule will not capture this product. However, it is included here in order to contrast it with to the other products below, which can be captured by our notion of product rule.
Hadamard product
The Hadamard product _⊙_ is obtained by extending pointwise the
multiplication operation of the underlying ring. In our coinductive
framework, it can be defined by the product rule
δ (f ⊙ g) a = δ f a ⊙ δ g a
Thus, in order for f ⊙ g to read an input symbol a, both f and g
must read a simultaneously.
infixr 7 _⊙_ _⊙_ : A ⟪ Σ ⟫ → A ⟪ Σ ⟫ → A ⟪ Σ ⟫ ν (f ⊙ g) = ν f *R ν g δ (f ⊙ g) a = δ f a ⊙ δ g a
Shuffle product
The shuffle product _⧢_ is defined coinductively by the product rule
δ (f ⧢ g) a = δ f a ⧢ g + f ⧢ δ g a
Intuitively, for f ⧢ g to read an input symbol a, either f reads
a (and then continues as δ f a ⧢ g) or g reads a (and then
continues as f ⧢ δ g a). Sometimes this is called Hurwitz product
[Fliess(1974)]. It finds applications in
enumerative combinatorics [Lothaire(1997)]
and in control theory [Fliess(1981)].
infixr 7 _⧢_ _⧢_ : A ⟪ Σ ⟫ i → A ⟪ Σ ⟫ i → A ⟪ Σ ⟫ i ν (f ⧢ g) = ν f *R ν g δ (f ⧢ g) a = δ f a ⧢ g + f ⧢ δ g a
Infiltration product
The infiltration product _↑_ can be seen as a combination of the
Hadamard and the shuffle products [Basold, Hansen, Pin, and
Rutten(2017)]. It is defined
coinductively by the product rule
δ (f ↑ g) a = δ f a ↑ g + f ↑ δ g a + δ f a ↑ δ g a
Intuitively, for f ↑ g to read an input symbol a, either f reads
a (and then continues as δ f a ↑ g), or g reads a (and then
continues as f ↑ δ g a), or both f and g read a simultaneously
(and then continue as δ f a ↑ δ g a).
infixr 7 _↑_ _↑_ : A ⟪ Σ ⟫ i → A ⟪ Σ ⟫ i → A ⟪ Σ ⟫ i ν (f ↑ g) = ν f *R ν g δ (f ↑ g) a = δ f a ↑ g + f ↑ δ g a + δ f a ↑ δ g a
Product rules
We are now ready to define the notion of product rule that we will use in the rest of the document. We idea is to formally define a syntax that can capture, in a uniform way, the product rules of the Hadamard, shuffle, and infiltration products, as well as many others.
A product rule is a term P with four variables x, x′, y, and
y′. Intuitively, x and y represent two series f and g, while
x′ and y′ represent their derivatives δ f a and δ g a,
respectively. The term P then specifies how to compute the derivative
of the product of f and g in terms of f, δ f a, g, and
δ g a.
open import General.Terms R ProductRule : Set ProductRule = Term′ 4
Examples of product rules
We show simple examples of product rules. Some rules are trivial, like the one below.
ruleZero : ProductRule ruleZero = 0T
The product rule ruleConst is also degenerate since it does not refer
to derivatives at all.
ruleConst : ProductRule ruleConst = x * y
The product rules for the Hadamard, shuffle, and infiltration products are more interesting.
Hadamard product rule
ruleHadamard : ProductRule ruleHadamard = x′ * y′
Shuffle product rule
ruleShuffle : ProductRule ruleShuffle = x′ * y + x * y′
Infiltration product rule
ruleInfiltration : ProductRule ruleInfiltration = x′ * y + x * y′ + x′ * y′
In the next section we will see how to use a product rule to define a product of formal series.
References
[Basold et al.(2017)] H Basold et al. Newton series, coinductively: A comparative study of composition. Mathematical Structures in Computer Science. 29(1):38–66, June 2017. doi: 10.1017/s0960129517000159.
[Fliess(1974)] M Fliess. Sur divers produits de séries formelles. Bulletin de la Société Mathématique de France. 102:181–191, 1974. doi: 10.24033/bsmf.1777.
[Fliess(1981)] M Fliess. Fonctionnelles causales non linéaires et indéterminées non commutatives. Bulletin de la Société mathématique de France. 79:3–40, 1981. doi: 10.24033/bsmf.1931.
[Lothaire(1997)] M Lothaire. Combinatorics on words. Cambridge University Press, 2nd ed., 1997.
Last-modified: May 21 15:56:06 2026