numhask
Safe HaskellNone
LanguageGHC2024

NumHask.Free.Carriers

Description

Concrete semiring carriers useful for demonstrating StarSemiring.

These four carriers are the classic examples of the closed-semiring / algebraic-path-problem literature. They are still, fifty years on, the canonical trio plus the probabilistic addition:

  • Boolean semiring — reachability / transitive closure (Warshall 1962).
  • Min-plus semiring — shortest paths (Floyd 1962, Roy 1959, Warshall 1962).
  • Field semiring — matrix inversion via the Neumann series.
  • Viterbi semiring — maximum-probability paths.

The unification of path problems over semirings was introduced by Aho, Hopcroft and Ullman in /The Design and Analysis of Computer Algorithms/ (1974) and elaborated by Tarjan in "A Unified Approach to Path Problems" (JACM, 1981). A modern categorical treatment is given by Höfner and Möller in "Dijkstra, Floyd and Warshall Meet Kleene" (2012).

Synopsis

Boolean semiring

newtype Warshall Source #

Boolean semiring for Warshall's transitive closure.

plus is ||, times is &&, star is constantly True.

>>> Warshall True + Warshall False
Warshall True

Constructors

Warshall Bool 

Instances

Instances details
Eq Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Ord Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Show Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Additive Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Idempotent Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Magma Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

CompleteJoinSemiLattice Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

joins :: Foldable f => f Warshall -> Warshall Source #

JoinSemiLattice Warshall Source #

Boolean join-semilattice structure: join is ||, bottom is False.

Instance details

Defined in NumHask.Free.Carriers

LowerBounded Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Multiplicative Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

Quantale Warshall Source #

Boolean quantale: join is disjunction, multiplication is conjunction.

Instance details

Defined in NumHask.Algebra.Quantale

Residuated Warshall Source #

Boolean implication as the residual of conjunction.

>>> lres (Warshall True) (Warshall False)
Warshall False
>>> lres (Warshall False) (Warshall True)
Warshall True
Instance details

Defined in NumHask.Algebra.Quantale

StarAutonomous Warshall Source #

Boolean negation as complement; par is disjunction and bot is 'Warshall False'.

Instance details

Defined in NumHask.Algebra.Quantale

KleeneAlgebra Warshall Source # 
Instance details

Defined in NumHask.Free.Carriers

StarSemiring Warshall Source #

Boolean star is constantly true.

>>> star (Warshall False :: Warshall)
Warshall True
Instance details

Defined in NumHask.Free.Carriers

Tropical semiring

newtype MinPlus a Source #

Tropical (min-plus) semiring for Floyd–Warshall shortest paths.

Addition is min, multiplication is ordinary addition, the additive unit is positive infinity, and the multiplicative unit is zero.

>>> MinPlus 3 + MinPlus 2 :: MinPlus Double
MinPlus {getMinPlus = 2.0}
>>> MinPlus 3 * MinPlus 2 :: MinPlus Double
MinPlus {getMinPlus = 5.0}

Constructors

MinPlus 

Fields

Instances

Instances details
Eq a => Eq (MinPlus a) Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

(==) :: MinPlus a -> MinPlus a -> Bool #

(/=) :: MinPlus a -> MinPlus a -> Bool #

Ord a => Ord (MinPlus a) Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

compare :: MinPlus a -> MinPlus a -> Ordering #

(<) :: MinPlus a -> MinPlus a -> Bool #

(<=) :: MinPlus a -> MinPlus a -> Bool #

(>) :: MinPlus a -> MinPlus a -> Bool #

(>=) :: MinPlus a -> MinPlus a -> Bool #

max :: MinPlus a -> MinPlus a -> MinPlus a #

min :: MinPlus a -> MinPlus a -> MinPlus a #

Show a => Show (MinPlus a) Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

showsPrec :: Int -> MinPlus a -> ShowS #

show :: MinPlus a -> String #

showList :: [MinPlus a] -> ShowS #

Additive (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Idempotent (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Magma (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

CompleteJoinSemiLattice (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Ord a => JoinSemiLattice (MinPlus a) Source #

Tropical join-semilattice structure: join is min, bottom is positive infinity.

Instance details

Defined in NumHask.Free.Carriers

Methods

(\/) :: MinPlus a -> MinPlus a -> MinPlus a Source #

LowerBounded (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Multiplicative (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Quantale (MinPlus Double) Source #

Tropical (min-plus) quantale: join is minimum, bottom is positive infinity, multiplication is addition.

Instance details

Defined in NumHask.Algebra.Quantale

Residuated (MinPlus Double) Source #

Tropical residual is truncated subtraction.

>>> getMinPlus (lres (MinPlus 2) (MinPlus 5) :: MinPlus Double)
3.0
>>> getMinPlus (lres (MinPlus 5) (MinPlus 2) :: MinPlus Double)
-3.0
Instance details

Defined in NumHask.Algebra.Quantale

StarAutonomous (MinPlus Double) Source #

Tropical linear negation is additive inverse; par is addition and bot is the multiplicative unit 0.

Instance details

Defined in NumHask.Algebra.Quantale

KleeneAlgebra (MinPlus Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

StarSemiring (MinPlus Double) Source #

Star is zero in a min-plus semiring: the cheapest repeated traversal is to stay put.

>>> star (MinPlus 2 :: MinPlus Double)
MinPlus {getMinPlus = 0.0}

Conway equations for 'MinPlus Double'.

>>> let a = MinPlus 2 :: MinPlus Double; b = MinPlus 3 :: MinPlus Double in star (a * b) == one + a * star (b * a) * b
True
>>> let a = MinPlus 2 :: MinPlus Double; b = MinPlus 3 :: MinPlus Double in star (a + b) == star (star a * b) * star a
True
Instance details

Defined in NumHask.Free.Carriers

Field semiring

newtype FieldStar Source #

Field semiring for matrix inversion (I − A)⁻¹.

star is the closed Neumann series: star a = recip (1 − a).

Constructors

FieldStar 

Fields

Instances

Instances details
Eq FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Ord FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Num FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Fractional FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Show FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Additive FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Subtractive FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Multiplicative FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

StarSemiring FieldStar Source # 
Instance details

Defined in NumHask.Free.Carriers

Viterbi semiring

newtype Viterbi a Source #

Viterbi semiring for maximum-probability paths.

plus is max, times is ordinary multiplication, the additive unit is 0 and the multiplicative unit is 1. The star of any value is 1, because the empty path has probability 1 and no repeated path can improve on that.

Constructors

Viterbi 

Fields

Instances

Instances details
Eq a => Eq (Viterbi a) Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

(==) :: Viterbi a -> Viterbi a -> Bool #

(/=) :: Viterbi a -> Viterbi a -> Bool #

Ord a => Ord (Viterbi a) Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

compare :: Viterbi a -> Viterbi a -> Ordering #

(<) :: Viterbi a -> Viterbi a -> Bool #

(<=) :: Viterbi a -> Viterbi a -> Bool #

(>) :: Viterbi a -> Viterbi a -> Bool #

(>=) :: Viterbi a -> Viterbi a -> Bool #

max :: Viterbi a -> Viterbi a -> Viterbi a #

min :: Viterbi a -> Viterbi a -> Viterbi a #

Show a => Show (Viterbi a) Source # 
Instance details

Defined in NumHask.Free.Carriers

Methods

showsPrec :: Int -> Viterbi a -> ShowS #

show :: Viterbi a -> String #

showList :: [Viterbi a] -> ShowS #

Additive (Viterbi Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Idempotent (Viterbi Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Magma (Viterbi Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

Multiplicative (Viterbi Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

KleeneAlgebra (Viterbi Double) Source # 
Instance details

Defined in NumHask.Free.Carriers

StarSemiring (Viterbi Double) Source # 
Instance details

Defined in NumHask.Free.Carriers