Viterbi m-semiring #
This file defines the Viterbi semiring over non-negative reals in [0,1].
Addition is max, multiplication is the usual product, zero is 0, and one is 1.
The Viterbi semiring is absorptive and idempotent, and satisfies left-distributivity of multiplication over monus.
This semiring is discussed in Green & Tannen, The Semiring Framework for Database Provenance.
References #
Viterbi semiring (max-times) over probabilities in [0,1].
Instances For
Dependency graph
Equations
- Viterbi.instCoeNNReal = { coe := Subtype.val }
Dependency graph
Dependency graph
Equations
- Viterbi.instZero = { zero := ⟨0, Viterbi.instZero._proof_1⟩ }
Dependency graph
Equations
- Viterbi.instOne = { one := ⟨1, Viterbi.instOne._proof_1⟩ }
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
Dependency graph
Equations
- One or more equations did not get rendered due to their size.
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Dependency graph
Viterbi is a commutative m-semiring. The natural order is the usual order on
[0,1], and the monus is a if a > b, 0 if a ≤ b.
Equations
- One or more equations did not get rendered due to their size.
Dependency graph
Equations
- Viterbi.instCommSemiringWithMonus = { toSemiringWithMonus := Viterbi.instSemiringWithMonus, mul_comm := Viterbi.instCommSemiringWithMonus._proof_1 }
Dependency graph
Viterbi multiplication is not idempotent: (1/2) * (1/2) = 1/4 ≠ 1/2.
Dependency graph
On Viterbi the identity is not an admissible δ, even though the semiring
is absorptive (Viterbi.absorptive): what delta_absorb asks of δ := id is the
lattice law a ⊗ (a ⊕ b) = a, which at a = b = 1/2 reads 1/2 ⊗ 1/2 = 1/4 ≠ 1/2.
This is why the instance takes the support indicator (ProvSQL's Viterbi::delta).
Dependency graph
There is no semiring homomorphism from BoolFunc Y to Viterbi sending the
variables to arbitrary values: Viterbi multiplication (ordinary product on
[0,1]) is not idempotent, contradicting var i * var i = var i in
BoolFunc Y.