module Lattices.ResiduatedLattice(
ResiduatedLattice(..),
BoundedLattice(..),
Nat
) where
type Nat = Int
class RealFrac l => BoundedLattice l where
(/\) :: l -> l -> l
(\/) :: l -> l -> l
top :: l
bot :: l
mkLattice :: Double -> l
class BoundedLattice l => ResiduatedLattice l where
(-->), (<--) :: l -> l -> l
l
a <-- l
b = l
b l -> l -> l
forall l. ResiduatedLattice l => l -> l -> l
--> l
a
(<-->) :: l -> l -> l
l
a <--> l
b = (l
a l -> l -> l
forall l. ResiduatedLattice l => l -> l -> l
--> l
b) l -> l -> l
forall l. BoundedLattice l => l -> l -> l
/\ (l
b l -> l -> l
forall l. ResiduatedLattice l => l -> l -> l
--> l
a)
tnorm :: l -> l -> l
negation :: l -> l
negation l
a = l
a l -> l -> l
forall l. ResiduatedLattice l => l -> l -> l
--> l
forall l. BoundedLattice l => l
bot
power :: l -> Nat -> l
power l
a Nat
0 = l
forall l. BoundedLattice l => l
top
power l
a Nat
n = l
a l -> l -> l
forall l. ResiduatedLattice l => l -> l -> l
`tnorm` l -> Nat -> l
forall l. ResiduatedLattice l => l -> Nat -> l
power l
a (Nat
n Nat -> Nat -> Nat
forall a. Num a => a -> a -> a
- Nat
1)