packages feed

dtmc-0.2.0.0: src/Dtmc/Transition.hs

{- |
Module      : Dtmc.Transition
Description : Shared abstraction for locally finite transition rules.

'Transition' captures the operation shared by finite transition matrices and
locally finite kernels: obtaining the validated finite-support law of the next
state from a supplied current state. Concrete representations live in
"Dtmc.Transition.Matrix" and "Dtmc.Transition.Kernel".
-}
module Dtmc.Transition (
    Transition (..),
) where

import Dtmc.Distribution.Map (DistributionMap)

{- | A time-homogeneous transition rule whose law from any supplied state has
finite support. The complete state space may be finite or infinite.

This capability is sufficient for exact finite-horizon map-backed algorithms.
It does not imply that states can be enumerated, so it cannot by itself support
generic classification, stationary, eventual-hitting, or expectation
algorithms.
-}
class Transition transition where
    -- | State type governed by this transition representation.
    type TransitionState transition

    {- | Return the validated finite-support law of the next state.

    Complexity: implementation-dependent.
    -}
    transitionLaw ::
        transition ->
        TransitionState transition ->
        DistributionMap (TransitionState transition)