lattices-2.1: Fine-grained library for constructing and manipulating lattices
Copyright (C) 2010-2015 Maximilian Bolingbroke 2015-2019 Oleg Grenrus
License BSD-3-Clause (see the file LICENSE)
Maintainer Oleg Grenrus <oleg.grenrus@iki.fi>
Safe Haskell Safe
Language Haskell2010

Algebra.Lattice

Description

In mathematics, a lattice is a partially ordered set in which every two elements have a unique supremum (also called a least upper bound or join ) and a unique infimum (also called a greatest lower bound or meet ).

In this module lattices are defined using meet and join operators, as it's constructive one.

Synopsis

Unbounded lattices

class Lattice a where Source #

An algebraic structure with joins and meets.

See http://en.wikipedia.org/wiki/Lattice_(order) and http://en.wikipedia.org/wiki/Absorption_law .

Lattice is very symmetric, which is seen from the laws:

Associativity

x \/ (y \/ z) ≡ (x \/ y) \/ z
x /\ (y /\ z) ≡ (x /\ y) /\ z

Commutativity

x \/ y ≡ y \/ x
x /\ y ≡ y /\ x

Idempotency

x \/ x ≡ x
x /\ x ≡ x

Absorption

a \/ (a /\ b) ≡ a
a /\ (a \/ b) ≡ a

Methods

(\/) :: a -> a -> a infixr 5 Source #

join

(/\) :: a -> a -> a infixr 6 Source #

meet

Instances

Instances details
Lattice Bool Source #
Instance details

Defined in Algebra.Lattice

Lattice () Source #
Instance details

Defined in Algebra.Lattice

Methods

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

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

Lattice Property Source #
Instance details

Defined in Algebra.Lattice

Lattice Void Source #
Instance details

Defined in Algebra.Lattice

Lattice All Source #
Instance details

Defined in Algebra.Lattice

Lattice Any Source #
Instance details

Defined in Algebra.Lattice

Lattice IntSet Source #
Instance details

Defined in Algebra.Lattice

Lattice N5 Source #
Instance details

Defined in Algebra.Lattice.N5

Lattice M3 Source #
Instance details

Defined in Algebra.Lattice.M3

Lattice ZeroHalfOne Source #
Instance details

Defined in Algebra.Lattice.ZeroHalfOne

Lattice M2 Source #
Instance details

Defined in Algebra.Lattice.M2

Lattice a => Lattice ( Solo a) Source #

Since: 2.0.3

Instance details

Defined in Algebra.Lattice

Lattice a => Lattice ( Identity a) Source #
Instance details

Defined in Algebra.Lattice

Lattice a => Lattice ( Endo a) Source #
Instance details

Defined in Algebra.Lattice

Lattice v => Lattice ( IntMap v) Source #
Instance details

Defined in Algebra.Lattice

Ord a => Lattice ( Set a) Source #
Instance details

Defined in Algebra.Lattice

( Eq a, Hashable a) => Lattice ( HashSet a) Source #
Instance details

Defined in Algebra.Lattice

Eq a => Lattice ( Wide a) Source #
Instance details

Defined in Algebra.Lattice.Wide

Lattice a => Lattice ( Op a) Source #
Instance details

Defined in Algebra.Lattice.Op

Lattice a => Lattice ( Lifted a) Source #
Instance details

Defined in Algebra.Lattice.Lifted

Lattice a => Lattice ( Levitated a) Source #
Instance details

Defined in Algebra.Lattice.Levitated

Lattice ( FBoundedLattice a) Source #
Instance details

Defined in Algebra.Lattice.Free.Final

Lattice ( FLattice a) Source #
Instance details

Defined in Algebra.Lattice.Free.Final

Lattice ( Free a) Source #
Instance details

Defined in Algebra.Lattice.Free

Lattice a => Lattice ( Dropped a) Source #
Instance details

Defined in Algebra.Lattice.Dropped

Integral a => Lattice ( Divisibility a) Source #
Instance details

Defined in Algebra.Lattice.Divisibility

Ord a => Lattice ( Ordered a) Source #
Instance details

Defined in Algebra.Lattice.Ordered

Lattice ( Free a) Source #
Instance details

Defined in Algebra.Heyting.Free

Lattice v => Lattice (k -> v) Source #
Instance details

Defined in Algebra.Lattice

Methods

(\/) :: (k -> v) -> (k -> v) -> k -> v Source #

(/\) :: (k -> v) -> (k -> v) -> k -> v Source #

( Lattice a, Lattice b) => Lattice ( Either a b) Source #

Ordinal sum.

Since: 2.1

Instance details

Defined in Algebra.Lattice

( Lattice a, Lattice b) => Lattice (a, b) Source #
Instance details

Defined in Algebra.Lattice

Methods

(\/) :: (a, b) -> (a, b) -> (a, b) Source #

(/\) :: (a, b) -> (a, b) -> (a, b) Source #

Lattice ( Proxy a) Source #
Instance details

Defined in Algebra.Lattice

( Ord k, Lattice v) => Lattice ( Map k v) Source #
Instance details

Defined in Algebra.Lattice

( Eq k, Hashable k, Lattice v) => Lattice ( HashMap k v) Source #
Instance details

Defined in Algebra.Lattice

( PartialOrd k, Lattice k, BoundedJoinSemiLattice v, BoundedMeetSemiLattice v) => Lattice ( Lexicographic k v) Source #
Instance details

Defined in Algebra.Lattice.Lexicographic

Lattice a => Lattice ( Const a b) Source #
Instance details

Defined in Algebra.Lattice

Lattice a => Lattice ( Tagged t a) Source #
Instance details

Defined in Algebra.Lattice

joinLeq :: ( Eq a, Lattice a) => a -> a -> Bool Source #

The partial ordering induced by the join-semilattice structure

joins1 :: ( Lattice a, Foldable1 f) => f a -> a Source #

The join of at a list of join-semilattice elements (of length at least one)

meets1 :: ( Lattice a, Foldable1 f) => f a -> a Source #

The meet of at a list of meet-semilattice elements (of length at least one)

Bounded lattices

class Lattice a => BoundedJoinSemiLattice a where Source #

A join-semilattice with an identity element bottom for \/ .

Laws

x \/ bottom ≡ x

Corollary

x /\ bottom
  ≡⟨ identity ⟩
(x /\ bottom) \/ bottom
  ≡⟨ absorption ⟩
bottom

Instances

Instances details
BoundedJoinSemiLattice Bool Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice () Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice Property Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice All Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice Any Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice IntSet Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice N5 Source #
Instance details

Defined in Algebra.Lattice.N5

BoundedJoinSemiLattice M3 Source #
Instance details

Defined in Algebra.Lattice.M3

BoundedJoinSemiLattice ZeroHalfOne Source #
Instance details

Defined in Algebra.Lattice.ZeroHalfOne

BoundedJoinSemiLattice M2 Source #
Instance details

Defined in Algebra.Lattice.M2

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( Solo a) Source #

Since: 2.0.3

Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( Identity a) Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( Endo a) Source #
Instance details

Defined in Algebra.Lattice

Lattice v => BoundedJoinSemiLattice ( IntMap v) Source #
Instance details

Defined in Algebra.Lattice

Ord a => BoundedJoinSemiLattice ( Set a) Source #
Instance details

Defined in Algebra.Lattice

( Eq a, Hashable a) => BoundedJoinSemiLattice ( HashSet a) Source #
Instance details

Defined in Algebra.Lattice

Eq a => BoundedJoinSemiLattice ( Wide a) Source #
Instance details

Defined in Algebra.Lattice.Wide

BoundedMeetSemiLattice a => BoundedJoinSemiLattice ( Op a) Source #
Instance details

Defined in Algebra.Lattice.Op

Lattice a => BoundedJoinSemiLattice ( Lifted a) Source #
Instance details

Defined in Algebra.Lattice.Lifted

Lattice a => BoundedJoinSemiLattice ( Levitated a) Source #
Instance details

Defined in Algebra.Lattice.Levitated

BoundedJoinSemiLattice ( FBoundedLattice a) Source #
Instance details

Defined in Algebra.Lattice.Free.Final

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( FLattice a) Source #
Instance details

Defined in Algebra.Lattice.Free.Final

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( Dropped a) Source #
Instance details

Defined in Algebra.Lattice.Dropped

Integral a => BoundedJoinSemiLattice ( Divisibility a) Source #
Instance details

Defined in Algebra.Lattice.Divisibility

( Ord a, Bounded a) => BoundedJoinSemiLattice ( Ordered a) Source #
Instance details

Defined in Algebra.Lattice.Ordered

BoundedJoinSemiLattice ( Free a) Source #
Instance details

Defined in Algebra.Heyting.Free

BoundedJoinSemiLattice v => BoundedJoinSemiLattice (k -> v) Source #
Instance details

Defined in Algebra.Lattice

Methods

bottom :: k -> v Source #

( BoundedJoinSemiLattice a, Lattice b) => BoundedJoinSemiLattice ( Either a b) Source #

Since: 2.1

Instance details

Defined in Algebra.Lattice

( BoundedJoinSemiLattice a, BoundedJoinSemiLattice b) => BoundedJoinSemiLattice (a, b) Source #
Instance details

Defined in Algebra.Lattice

Methods

bottom :: (a, b) Source #

BoundedJoinSemiLattice ( Proxy a) Source #
Instance details

Defined in Algebra.Lattice

( Ord k, Lattice v) => BoundedJoinSemiLattice ( Map k v) Source #
Instance details

Defined in Algebra.Lattice

( Eq k, Hashable k, Lattice v) => BoundedJoinSemiLattice ( HashMap k v) Source #
Instance details

Defined in Algebra.Lattice

( PartialOrd k, BoundedJoinSemiLattice k, BoundedJoinSemiLattice v, BoundedMeetSemiLattice v) => BoundedJoinSemiLattice ( Lexicographic k v) Source #
Instance details

Defined in Algebra.Lattice.Lexicographic

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( Const a b) Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice a => BoundedJoinSemiLattice ( Tagged t a) Source #
Instance details

Defined in Algebra.Lattice

class Lattice a => BoundedMeetSemiLattice a where Source #

A meet-semilattice with an identity element top for /\ .

Laws

x /\ top ≡ x

Corollary

x \/ top
  ≡⟨ identity ⟩
(x \/ top) /\ top
  ≡⟨ absorption ⟩
top

Methods

top :: a Source #

Instances

Instances details
BoundedMeetSemiLattice Bool Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice () Source #
Instance details

Defined in Algebra.Lattice

Methods

top :: () Source #

BoundedMeetSemiLattice Property Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice All Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice Any Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice N5 Source #
Instance details

Defined in Algebra.Lattice.N5

BoundedMeetSemiLattice M3 Source #
Instance details

Defined in Algebra.Lattice.M3

BoundedMeetSemiLattice ZeroHalfOne Source #
Instance details

Defined in Algebra.Lattice.ZeroHalfOne

BoundedMeetSemiLattice M2 Source #
Instance details

Defined in Algebra.Lattice.M2

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( Solo a) Source #

Since: 2.0.3

Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( Identity a) Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( Endo a) Source #
Instance details

Defined in Algebra.Lattice

( Ord a, Finite a) => BoundedMeetSemiLattice ( Set a) Source #
Instance details

Defined in Algebra.Lattice

( Eq a, Hashable a, Finite a) => BoundedMeetSemiLattice ( HashSet a) Source #
Instance details

Defined in Algebra.Lattice

Eq a => BoundedMeetSemiLattice ( Wide a) Source #
Instance details

Defined in Algebra.Lattice.Wide

BoundedJoinSemiLattice a => BoundedMeetSemiLattice ( Op a) Source #
Instance details

Defined in Algebra.Lattice.Op

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( Lifted a) Source #
Instance details

Defined in Algebra.Lattice.Lifted

Lattice a => BoundedMeetSemiLattice ( Levitated a) Source #
Instance details

Defined in Algebra.Lattice.Levitated

BoundedMeetSemiLattice ( FBoundedLattice a) Source #
Instance details

Defined in Algebra.Lattice.Free.Final

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( FLattice a) Source #
Instance details

Defined in Algebra.Lattice.Free.Final

Lattice a => BoundedMeetSemiLattice ( Dropped a) Source #
Instance details

Defined in Algebra.Lattice.Dropped

( Ord a, Bounded a) => BoundedMeetSemiLattice ( Ordered a) Source #
Instance details

Defined in Algebra.Lattice.Ordered

BoundedMeetSemiLattice ( Free a) Source #
Instance details

Defined in Algebra.Heyting.Free

BoundedMeetSemiLattice v => BoundedMeetSemiLattice (k -> v) Source #
Instance details

Defined in Algebra.Lattice

Methods

top :: k -> v Source #

( Lattice a, BoundedMeetSemiLattice b) => BoundedMeetSemiLattice ( Either a b) Source #

Since: 2.1

Instance details

Defined in Algebra.Lattice

( BoundedMeetSemiLattice a, BoundedMeetSemiLattice b) => BoundedMeetSemiLattice (a, b) Source #
Instance details

Defined in Algebra.Lattice

Methods

top :: (a, b) Source #

BoundedMeetSemiLattice ( Proxy a) Source #
Instance details

Defined in Algebra.Lattice

( Ord k, Finite k, BoundedMeetSemiLattice v) => BoundedMeetSemiLattice ( Map k v) Source #
Instance details

Defined in Algebra.Lattice

( Eq k, Hashable k, Finite k, BoundedMeetSemiLattice v) => BoundedMeetSemiLattice ( HashMap k v) Source #
Instance details

Defined in Algebra.Lattice

( PartialOrd k, BoundedMeetSemiLattice k, BoundedJoinSemiLattice v, BoundedMeetSemiLattice v) => BoundedMeetSemiLattice ( Lexicographic k v) Source #
Instance details

Defined in Algebra.Lattice.Lexicographic

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( Const a b) Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice a => BoundedMeetSemiLattice ( Tagged t a) Source #
Instance details

Defined in Algebra.Lattice

joins :: ( BoundedJoinSemiLattice a, Foldable f) => f a -> a Source #

The join of a list of join-semilattice elements

meets :: ( BoundedMeetSemiLattice a, Foldable f) => f a -> a Source #

The meet of a list of meet-semilattice elements

Monoid wrappers

newtype Meet a Source #

Monoid wrapper for meet- Lattice

Constructors

Meet

Fields

Instances

Instances details
Monad Meet Source #
Instance details

Defined in Algebra.Lattice

Functor Meet Source #
Instance details

Defined in Algebra.Lattice

Applicative Meet Source #
Instance details

Defined in Algebra.Lattice

MonadZip Meet Source #
Instance details

Defined in Algebra.Lattice

Bounded a => Bounded ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

Eq a => Eq ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

Data a => Data ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

Methods

gfoldl :: ( forall d b. Data d => c (d -> b) -> d -> c b) -> ( forall g. g -> c g) -> Meet a -> c ( Meet a) Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c ( Meet a) Source #

toConstr :: Meet a -> Constr Source #

dataTypeOf :: Meet a -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c ( Meet a)) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c ( Meet a)) Source #

gmapT :: ( forall b. Data b => b -> b) -> Meet a -> Meet a Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Meet a -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Meet a -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Meet a -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Meet a -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Meet a -> m ( Meet a) Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Meet a -> m ( Meet a) Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Meet a -> m ( Meet a) Source #

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

Defined in Algebra.Lattice

Read a => Read ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

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

Defined in Algebra.Lattice

Generic ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

Associated Types

type Rep ( Meet a) :: Type -> Type Source #

Lattice a => Semigroup ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

BoundedMeetSemiLattice a => Monoid ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

Universe a => Universe ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

Finite a => Finite ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

( Eq a, Lattice a) => PartialOrd ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

type Rep ( Meet a) Source #
Instance details

Defined in Algebra.Lattice

type Rep ( Meet a) = D1 (' MetaData "Meet" "Algebra.Lattice" "lattices-2.1-Aj77JapAM1ZIiO74F5gL5i" ' True ) ( C1 (' MetaCons "Meet" ' PrefixI ' True ) ( S1 (' MetaSel (' Just "getMeet") ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 a)))

newtype Join a Source #

Monoid wrapper for join- Lattice

Constructors

Join

Fields

Instances

Instances details
Monad Join Source #
Instance details

Defined in Algebra.Lattice

Functor Join Source #
Instance details

Defined in Algebra.Lattice

Applicative Join Source #
Instance details

Defined in Algebra.Lattice

MonadZip Join Source #
Instance details

Defined in Algebra.Lattice

Bounded a => Bounded ( Join a) Source #
Instance details

Defined in Algebra.Lattice

Eq a => Eq ( Join a) Source #
Instance details

Defined in Algebra.Lattice

Data a => Data ( Join a) Source #
Instance details

Defined in Algebra.Lattice

Methods

gfoldl :: ( forall d b. Data d => c (d -> b) -> d -> c b) -> ( forall g. g -> c g) -> Join a -> c ( Join a) Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c ( Join a) Source #

toConstr :: Join a -> Constr Source #

dataTypeOf :: Join a -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c ( Join a)) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c ( Join a)) Source #

gmapT :: ( forall b. Data b => b -> b) -> Join a -> Join a Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> Join a -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> Join a -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> Join a -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> Join a -> u Source #

gmapM :: Monad m => ( forall d. Data d => d -> m d) -> Join a -> m ( Join a) Source #

gmapMp :: MonadPlus m => ( forall d. Data d => d -> m d) -> Join a -> m ( Join a) Source #

gmapMo :: MonadPlus m => ( forall d. Data d => d -> m d) -> Join a -> m ( Join a) Source #

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

Defined in Algebra.Lattice

Read a => Read ( Join a) Source #
Instance details

Defined in Algebra.Lattice

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

Defined in Algebra.Lattice

Generic ( Join a) Source #
Instance details

Defined in Algebra.Lattice

Associated Types

type Rep ( Join a) :: Type -> Type Source #

Lattice a => Semigroup ( Join a) Source #
Instance details

Defined in Algebra.Lattice

BoundedJoinSemiLattice a => Monoid ( Join a) Source #
Instance details

Defined in Algebra.Lattice

Universe a => Universe ( Join a) Source #
Instance details

Defined in Algebra.Lattice

Finite a => Finite ( Join a) Source #
Instance details

Defined in Algebra.Lattice

( Eq a, Lattice a) => PartialOrd ( Join a) Source #
Instance details

Defined in Algebra.Lattice

type Rep ( Join a) Source #
Instance details

Defined in Algebra.Lattice

type Rep ( Join a) = D1 (' MetaData "Join" "Algebra.Lattice" "lattices-2.1-Aj77JapAM1ZIiO74F5gL5i" ' True ) ( C1 (' MetaCons "Join" ' PrefixI ' True ) ( S1 (' MetaSel (' Just "getJoin") ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 a)))

Fixed points of chains in lattices

lfp :: ( Eq a, BoundedJoinSemiLattice a) => (a -> a) -> a Source #

Implementation of Kleene fixed-point theorem http://en.wikipedia.org/wiki/Kleene_fixed-point_theorem . Forces the function to be monotone.

lfpFrom :: ( Eq a, BoundedJoinSemiLattice a) => a -> (a -> a) -> a Source #

Implementation of Kleene fixed-point theorem http://en.wikipedia.org/wiki/Kleene_fixed-point_theorem . Forces the function to be monotone.

unsafeLfp :: ( Eq a, BoundedJoinSemiLattice a) => (a -> a) -> a Source #

Implementation of Kleene fixed-point theorem http://en.wikipedia.org/wiki/Kleene_fixed-point_theorem . Assumes that the function is monotone and does not check if that is correct.

gfp :: ( Eq a, BoundedMeetSemiLattice a) => (a -> a) -> a Source #

Implementation of Kleene fixed-point theorem http://en.wikipedia.org/wiki/Kleene_fixed-point_theorem . Forces the function to be antinone.

gfpFrom :: ( Eq a, BoundedMeetSemiLattice a) => a -> (a -> a) -> a Source #

Implementation of Kleene fixed-point theorem http://en.wikipedia.org/wiki/Kleene_fixed-point_theorem . Forces the function to be antinone.

unsafeGfp :: ( Eq a, BoundedMeetSemiLattice a) => (a -> a) -> a Source #

Implementation of Kleene fixed-point theorem http://en.wikipedia.org/wiki/Kleene_fixed-point_theorem . Assumes that the function is antinone and does not check if that is correct.