packages feed

liquidhaskell-0.6.0.0: tests/pos/RealProps.hs

-- Issue overload-div-int-real #579

module Div where

{-@ type Valid = {v:Bool | ( (Prop v) <=> true ) } @-}

{-@ mulAssoc :: Double -> Double -> Double -> Valid @-}
mulAssoc :: Double -> Double -> Double -> Bool
mulAssoc x y z = (x * y) * z == x * (y * z) 

{-@ mulCommut :: Double -> Double -> Valid @-}
mulCommut :: Double -> Double -> Bool
mulCommut x y = x * y == y * x 

{-@ mulId :: Double -> Valid @-}
mulId :: Double -> Bool
mulId x = x == 1 * x 

{-@ mulDistr :: Double -> Double -> Double -> Valid @-}
mulDistr :: Double -> Double -> Double -> Bool
mulDistr x y z = x * (y + z)  == (x * y) + (x * z)

{-@ divId :: Double -> Valid @-}
divId :: Double -> Bool
divId x = x / 1.0 == x

{-@ inverse :: {v:Double | v != 0.0} -> Valid @-}
inverse :: Double -> Bool
inverse x = 1.0 == x * (1.0 / x)