packages feed

AERN-Basics-2011.1: src/Numeric/AERN/Basics/Laws/OperationRelation.hs

{-|
    Module      :  Numeric.AERN.Basics.Laws.OperationRelation
    Description :  common properties linking binary operations with relations 
    Copyright   :  (c) Michal Konecny
    License     :  BSD3

    Maintainer  :  mikkonecny@gmail.com
    Stability   :  experimental
    Portability :  portable
    
    Common properties linking binary operations with relations.
-}
module Numeric.AERN.Basics.Laws.OperationRelation 
(
--    joinOfOrderedPairNonReflexive, meetOfOrderedPairNonReflexive, 
    joinOfOrderedPair, meetOfOrderedPair, 
    joinAboveOperands, meetBelowOperands,
    partialJoinOfOrderedPair, partialJoinAboveOperands,
    downRoundedJoinOfOrderedPair, upRoundedMeetOfOrderedPair,
    downRoundedPartialJoinOfOrderedPair
)
where

import Numeric.AERN.Basics.Laws.Utilities

import Numeric.AERN.Misc.Bool
import Numeric.AERN.Misc.Maybe

--joinOfOrderedPairNonReflexive ::
--    (PRel t) -> (PRel t) -> (Op t) -> t -> t -> Bool    
--joinOfOrderedPairNonReflexive (==) (<=) (\/) e1 e2 =
--    (e1 <= e2) ===> ((e1 \/ e2) == e2)
--
--meetOfOrderedPairNonReflexive ::
--    (PRel t) -> (PRel t) -> (Op t) -> t -> t -> Bool    
--meetOfOrderedPairNonReflexive (==) (<=) (/\) e1 e2 =
--    (e1 <= e2) ===> ((e1 /\ e2) == e1)

joinOfOrderedPair ::
    (Rel t) -> (PRel t) -> (Op t) -> t -> t -> Bool    
joinOfOrderedPair (==) (<=?) (\/) e1 e2 =
    (defined (e1 <=? e2))
    ===>
    ((e1 <= e2) <===> ((e1 \/ e2) == e2))
    where
    (<=) = assumeTotal2 (<=?)

meetOfOrderedPair ::
    (Rel t) -> (PRel t) -> (Op t) -> t -> t -> Bool    
meetOfOrderedPair (==) (<=?) (/\) e1 e2 =
    (defined (e1 <=? e2)) 
    ===>
    ((e1 <= e2) <===> ((e1 /\ e2) == e1))
    where
    (<=) = assumeTotal2 (<=?)

joinAboveOperands ::
    (PRel t) -> (Op t) -> t -> t -> Bool
joinAboveOperands (<=?) (\/) e1 e2 =
    (defined (e1 <=? (e1 \/ e2)) && defined (e2 <=? (e1 \/ e2))) 
    ===>
    ((e1 <= (e1 \/ e2)) && (e2 <= (e1 \/ e2)))
    where
    (<=) = assumeTotal2 (<=?)

meetBelowOperands ::
    (PRel t) -> (Op t) -> t -> t -> Bool    
meetBelowOperands (<=?) (/\) e1 e2 =
    (defined ((e1 /\ e2) <=? e1) && defined ((e1 /\ e2) <=? e2)) 
    ===>
    (((e1 /\ e2) <= e1) && ((e1 /\ e2) <= e2))
    where
    (<=) = assumeTotal2 (<=?)

partialJoinOfOrderedPair ::
    (Rel t) -> (PRel t) -> (PartOp t) -> t -> t -> Bool    
partialJoinOfOrderedPair (==) (<=?) (\/?) e1 e2 =
    (defined (e1 \/? e2)) ===>
    joinOfOrderedPair (==) (<=?) (assumeTotal2 (\/?)) e1 e2 

partialJoinAboveOperands ::
    (PRel t) -> (PartOp t) -> t -> t -> Bool    
partialJoinAboveOperands (<=?) (\/?) e1 e2 =
    (defined (e1 \/? e2)) ===>
    joinAboveOperands (<=?) (assumeTotal2 (\/?)) e1 e2



downRoundedJoinOfOrderedPair ::
    (PRel t) -> (Op t) -> t -> t -> Bool    
downRoundedJoinOfOrderedPair (<=?) (\/.) e1 e2 =
    (defined (e1 <=? e2) && defined (e1 \/. e2 <=? e2)) 
    ===>
    ((e1 <= e2) ===> (e1 \/. e2 <= e2))
    where
    (<=) = assumeTotal2 (<=?)

upRoundedMeetOfOrderedPair ::
    (PRel t) -> (Op t) -> t -> t -> Bool    
upRoundedMeetOfOrderedPair (<=?) (/\^) e1 e2 =
    (defined (e1 <=? e2) && defined (e1 <=? (e1 /\^ e2))) 
    ===>
    ((e1 <= e2) ===> (e1 <= (e1 /\^ e2)))
    where
    (<=) = assumeTotal2 (<=?)

downRoundedPartialJoinOfOrderedPair ::
    (PRel t) -> (PartOp t) -> t -> t -> Bool    
downRoundedPartialJoinOfOrderedPair (<=?) (\/.?) e1 e2 =
    (defined (e1 \/.? e2)) ===>
    downRoundedJoinOfOrderedPair (<=?) (assumeTotal2 (\/.?)) e1 e2