numeric-prelude-0.4.3: An experimental alternative hierarchy of numeric type classes

Safe HaskellSafe
LanguageHaskell98

Algebra.Units

Contents

Synopsis

Class

class C a => C a #

This class lets us deal with the units in a ring. isUnit tells whether an element is a unit. The other operations let us canonically write an element as a unit times another element. Two elements a, b of a ring R are _associates_ if a=b*u for a unit u. For an element a, we want to write it as a=b*u where b is an associate of a. The map (a->b) is called StandardAssociate by Gap, "unitCanonical" by Axiom, and "canAssoc" by DoCon. The map (a->u) is called "canInv" by DoCon and "unitNormal(x).unit" by Axiom.

The laws are

  stdAssociate x * stdUnit x === x
    stdUnit x * stdUnitInv x === 1
 isUnit u ==> stdAssociate x === stdAssociate (x*u)

Currently some algorithms assume

 stdAssociate(x*y) === stdAssociate x * stdAssociate y

Minimal definition: isUnit and (stdUnit or stdUnitInv) and optionally stdAssociate

Minimal complete definition

isUnit, (stdUnit | stdUnitInv)

Instances
C Int # 
Instance details

Defined in Algebra.Units

Methods

isUnit :: Int -> Bool #

stdAssociate :: Int -> Int #

stdUnit :: Int -> Int #

stdUnitInv :: Int -> Int #

C Int8 # 
Instance details

Defined in Algebra.Units

C Int16 # 
Instance details

Defined in Algebra.Units

C Int32 # 
Instance details

Defined in Algebra.Units

C Int64 # 
Instance details

Defined in Algebra.Units

C Integer # 
Instance details

Defined in Algebra.Units

C T # 
Instance details

Defined in Number.Peano

Methods

isUnit :: T -> Bool #

stdAssociate :: T -> T #

stdUnit :: T -> T #

stdUnitInv :: T -> T #

Integral a => C (T a) # 
Instance details

Defined in MathObj.Wrapper.Haskell98

Methods

isUnit :: T a -> Bool #

stdAssociate :: T a -> T a #

stdUnit :: T a -> T a #

stdUnitInv :: T a -> T a #

(C a, C a) => C (T a) # 
Instance details

Defined in MathObj.Polynomial

Methods

isUnit :: T a -> Bool #

stdAssociate :: T a -> T a #

stdUnit :: T a -> T a #

stdUnitInv :: T a -> T a #

(Ord a, C a) => C (T a) # 
Instance details

Defined in Number.Complex

Methods

isUnit :: T a -> Bool #

stdAssociate :: T a -> T a #

stdUnit :: T a -> T a #

stdUnitInv :: T a -> T a #

C a => C (T a) # 
Instance details

Defined in MathObj.Wrapper.NumericPrelude

Methods

isUnit :: T a -> Bool #

stdAssociate :: T a -> T a #

stdUnit :: T a -> T a #

stdUnitInv :: T a -> T a #

isUnit :: C a => a -> Bool #

stdAssociate, stdUnit, stdUnitInv :: C a => a -> a #

stdAssociate, stdUnit, stdUnitInv :: C a => a -> a #

stdAssociate, stdUnit, stdUnitInv :: C a => a -> a #

Standard implementations for instances

intQuery :: (Integral a, C a) => a -> Bool #

intAssociate :: (Integral a, C a, C a) => a -> a #

intStandard :: (Integral a, C a, C a) => a -> a #

intStandardInverse :: (Integral a, C a, C a) => a -> a #

Properties

propComposition :: (Eq a, C a) => a -> Bool #

propInverseUnit :: (Eq a, C a) => a -> Bool #

propUniqueAssociate :: (Eq a, C a) => a -> a -> Property #

propAssociateProduct :: (Eq a, C a) => a -> a -> Bool #

Currently some algorithms assume this property.