AERN-Real-0.10.0: src/Data/Number/ER/Real/Approx/OI.hs
{-# OPTIONS_GHC -fno-warn-missing-methods #-}
{-|
Module : Data.Number.ER.Real.Approx.OI
Description : outer and inner approximations of approximations
Copyright : (c) Michal Konecny
License : BSD3
Maintainer : mik@konecny.aow.cz
Stability : experimental
Portability : portable
This module offers a transformation of a safely rounded real approximation type into
a type that approximates these approximations from outside as well as *inside*.
-}
module Data.Number.ER.Real.Approx.OI where
import qualified Data.Number.ER.Real.Approx as RA
{-|
A pair of approximations that form an "interval" in the lattice of
approximations.
Eg outer = [1,4] inner = [3,2] can be thought of as the set of all
generalised intervals where the left endpoint is between 1 and 3
and the right endpoint is between 2 and 4 (eg [1,4], [3,4],
[3,2], [3,3]).
-}
data ERApproxOI ra =
ERApproxOI
{
eroiOuter :: ra,
eroiInner :: ra
}
deriving (Eq, Ord)
instance (RA.ERApprox ra) => (Show (ERApproxOI ra))
where
show (ERApproxOI oi ii) =
"{ outer = " ++ show oi ++ "; inner = " ++ show ii ++ "}"
instance (RA.ERApprox ra) => RA.ERApproxApprox (ERApproxOI ra)
where
safeIncludes (ERApproxOI oi1 ii1) (ERApproxOI oi2 ii2) =
oi2 `RA.refines` ii1
safeNotIncludes (ERApproxOI oi1 ii1) (ERApproxOI oi2 ii2) =
not $ ii2 `RA.refines` oi1
{- TODO when required: -}
instance (RA.ERApprox ra) => (Num (ERApproxOI ra))
instance (RA.ERApprox ra) => (Fractional (ERApproxOI ra))
instance (RA.ERApprox ra) => RA.ERApprox (ERApproxOI ra)
where
(ERApproxOI oi1 ii1) `leqReals` (ERApproxOI oi2 ii2) =
oi1 `RA.leqReals` oi2