simple-ltl-1.0.0: A simple LTL checker

Safe HaskellSafe
LanguageHaskell2010

LTL

Description

This formulation of LTL is in positive normal form by construction, and trivially dualizable. This choice was driven by the following Coq formalization, showing that all the laws for LTL hold under a denotation from this structure into Coq's logic, over all finite lists:

https://github.com/jwiegley/constructive-ltl/blob/master/src/LTL.v#L69

Documentation

type LTL a = Machine a (Result a) Source #

data Machine a b Source #

Constructors

Stop b 
Delay (Machine a b) 
Ask (a -> Machine a b) 
Instances
Functor (Machine a) Source # 
Instance details

Defined in LTL

Methods

fmap :: (a0 -> b) -> Machine a a0 -> Machine a b #

(<$) :: a0 -> Machine a b -> Machine a a0 #

data Reason a Source #

Instances
Show a => Show (Reason a) Source # 
Instance details

Defined in LTL

Methods

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

show :: Reason a -> String #

showList :: [Reason a] -> ShowS #

Generic (Reason a) Source # 
Instance details

Defined in LTL

Associated Types

type Rep (Reason a) :: Type -> Type #

Methods

from :: Reason a -> Rep (Reason a) x #

to :: Rep (Reason a) x -> Reason a #

NFData a => NFData (Reason a) Source # 
Instance details

Defined in LTL

Methods

rnf :: Reason a -> () #

type Rep (Reason a) Source # 
Instance details

Defined in LTL

data Result a Source #

Constructors

Failure (Reason a) 
Success 
Instances
Show a => Show (Result a) Source # 
Instance details

Defined in LTL

Methods

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

show :: Result a -> String #

showList :: [Result a] -> ShowS #

Generic (Result a) Source # 
Instance details

Defined in LTL

Associated Types

type Rep (Result a) :: Type -> Type #

Methods

from :: Result a -> Rep (Result a) x #

to :: Rep (Result a) x -> Result a #

NFData a => NFData (Result a) Source # 
Instance details

Defined in LTL

Methods

rnf :: Result a -> () #

type Rep (Result a) Source # 
Instance details

Defined in LTL

type Rep (Result a) = D1 (MetaData "Result" "LTL" "simple-ltl-1.0.0-Fb9CmHs9o9MCVdA6TpcRen" False) (C1 (MetaCons "Failure" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Reason a))) :+: C1 (MetaCons "Success" PrefixI False) (U1 :: Type -> Type))

step :: Machine a b -> a -> Machine a b Source #

run :: Machine a b -> [a] -> Machine a b Source #

neg :: LTL a -> LTL a Source #

accept :: (a -> LTL a) -> LTL a Source #

reject :: (a -> LTL a) -> LTL a Source #

and :: LTL a -> LTL a -> LTL a Source #

or :: LTL a -> LTL a -> LTL a Source #

next :: LTL a -> LTL a Source #

until :: LTL a -> LTL a -> LTL a Source #

weakUntil :: LTL a -> LTL a -> LTL a Source #

release :: LTL a -> LTL a -> LTL a Source #

strongRelease :: LTL a -> LTL a -> LTL a Source #

implies :: LTL a -> LTL a -> LTL a Source #

always :: LTL a -> LTL a Source #

test :: (a -> Bool) -> LTL a Source #

eq :: Eq a => a -> LTL a Source #