Giry Monad¶
The Giry monad and probability distributions.
giry
¶
The Giry monad on finite sets (the probability monad).
The Giry monad G on FinSet maps each finite set A to the set of probability distributions on A. In our representation:
G(A) = A (at the set level, since distributions are represented
as row-stochastic tensors, not as elements of a simplex)
This is structurally identical to the fuzzy powerset monad but with a different composition rule: sum-product (matrix multiplication) instead of noisy-OR.
η_A: A → A — the Kronecker delta (deterministic distribution)
μ_A: A → A — identity (flattening nested distributions)
f >=> g = f >> g — Kleisli composition = matrix multiplication
The Kleisli category of the Giry monad on FinSet is exactly FinStoch, the category of finite stochastic matrices.
This module provides:
GiryMonad — the probability monad (T, η, μ) with MarkovQuantale
FinStoch — the Kleisli category of GiryMonad
GiryMonad
¶
Bases: Monad
The Giry (probability) monad on finite sets.
At the finite-set level, G(A) = A because probability distributions over A are represented as tensors indexed by A (i.e., functions A → [0,1] that sum to 1), not as elements of a separate simplex object.
The Kleisli composition uses the MarkovQuantale (sum-product), yielding standard matrix multiplication of stochastic matrices.
This is the categorical foundation for all stochastic morphisms in quivers: every Markov kernel A → B is a Kleisli morphism A → G(B) = A → B in this monad.
Examples:
>>> from quivers import FinSet
>>> from quivers.stochastic.giry import GiryMonad, FinStoch
>>> G = GiryMonad()
>>> A = FinSet(name="A", cardinality=3)
>>> eta = G.unit(A) # Kronecker delta: shape (3, 3)
>>> finstoch = FinStoch()
>>> # compose stochastic morphisms via finstoch.compose(f, g)
unit
¶
η_A = δ: the Kronecker delta (deterministic distribution).
| PARAMETER | DESCRIPTION |
|---|---|
obj
|
The object A.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Morphism
|
The identity/delta morphism η_A: A → A. |
Source code in src/quivers/stochastic/giry.py
66 67 68 69 70 71 72 73 74 75 76 77 78 79 | |
multiply
¶
μ_A = id: flatten nested distributions.
For finite sets, flattening G(G(A)) → G(A) is just the identity because G(A) = A at the set level.
| PARAMETER | DESCRIPTION |
|---|---|
obj
|
The object A.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Morphism
|
The multiplication morphism μ_A: A → A. |
Source code in src/quivers/stochastic/giry.py
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | |
kleisli_compose
¶
Kleisli composition via sum-product (matrix multiplication).
Since G = Id, the Kleisli composition f >=> g is just standard composition f >> g under the MarkovQuantale.
| PARAMETER | DESCRIPTION |
|---|---|
f
|
Left Kleisli morphism A → B.
TYPE:
|
g
|
Right Kleisli morphism B → C.
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Morphism
|
Composed morphism A → C. |
Source code in src/quivers/stochastic/giry.py
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | |
FinStoch
¶
FinStoch()
Bases: KleisliCategory
The category FinStoch of finite sets and stochastic maps.
This is the Kleisli category of the Giry monad: objects are finite sets, morphisms are stochastic matrices (Markov kernels), and composition is matrix multiplication.
Examples:
>>> from quivers import FinSet
>>> from quivers.stochastic import StochasticMorphism
>>> from quivers.stochastic.giry import FinStoch
>>> cat = FinStoch()
>>> A = FinSet(name="A", cardinality=3)
>>> B = FinSet(name="B", cardinality=4)
>>> C = FinSet(name="C", cardinality=2)
>>> f = StochasticMorphism(A, B)
>>> g = StochasticMorphism(B, C)
>>> h = cat.compose(f, g) # A → C via matrix multiplication
Source code in src/quivers/stochastic/giry.py
147 148 | |