tower-0.1.0: A numeric tower

Safe HaskellSafe
LanguageHaskell2010

Tower.Algebra

Contents

Description

Algebra

Synopsis

general group structure

class Magma a where Source #

A Magma is a tuple (T,⊕) consisting of

  • a type a, and
  • a function (⊕) :: T -> T -> T

The mathematical laws for a magma are:

  • ⊕ is defined for all possible pairs of type T, and
  • ⊕ is closed in the set of all possible values of type T

or, more tersly,

∀ a, b ∈ T: a ⊕ b ∈ T

These laws are true by construction in haskell: the type signature of magma and the above mathematical laws are synonyms.

Minimal complete definition

(⊕)

Methods

(⊕) :: a -> a -> a Source #

class Magma a => Unital a where Source #

A Unital Magma

unit ⊕ a = a
a ⊕ unit = a

Minimal complete definition

unit

Methods

unit :: a Source #

class Magma a => Associative a Source #

An Associative Magma

(a ⊕ b) ⊕ c = a ⊕ (b ⊕ c)

class Magma a => Commutative a Source #

A Commutative Magma

a ⊕ b = b ⊕ a

class Magma a => Invertible a where Source #

An Invertible Magma

∀ a ∈ T: inv a ∈ T

law is true by construction in Haskell

Minimal complete definition

inv

Methods

inv :: a -> a Source #

class Magma a => Idempotent a Source #

An Idempotent Magma

a ⊕ a = a

class (Magma a, Magma b) => Homomorphic a b where Source #

A Homomorphic between two Magmas

∀ a ∈ A: hom a ∈ B

law is true by construction in Haskell

Minimal complete definition

hom

Methods

hom :: a -> b Source #

Instances

Magma a => Homomorphic a a Source # 

Methods

hom :: a -> a Source #

class (Associative a, Unital a) => Monoidal a Source #

A Monoidal Magma is associative and unital.

class (Commutative a, Associative a, Unital a) => CMonoidal a Source #

A CMonoidal Magma is commutative, associative and unital.

class (Unital a, Invertible a) => Loop a Source #

A Loop is unital and invertible

class (Associative a, Unital a, Invertible a) => Group a Source #

A Group is associative, unital and invertible

class (Associative a, Unital a, Invertible a, Commutative a) => Abelian a Source #

An Abelian Group is associative, unital, invertible and commutative

Additive Structure

class AdditiveMagma a where Source #

plus is used for the additive magma to distinguish from + which, by convention, implies commutativity

Minimal complete definition

plus

Methods

plus :: a -> a -> a Source #

Instances

class AdditiveMagma a => AdditiveUnital a where Source #

AdditiveUnital

zero `plus` a == a
a `plus` zero == a

Minimal complete definition

zero

Methods

zero :: a Source #

class AdditiveMagma a => AdditiveInvertible a where Source #

AdditiveInvertible

∀ a ∈ A: negate a ∈ A

law is true by construction in Haskell

Minimal complete definition

negate

Methods

negate :: a -> a Source #

class (AdditiveMagma a, AdditiveMagma b) => AdditiveHomomorphic a b where Source #

AdditiveHomomorphic

∀ a ∈ A: plushom a ∈ B

law is true by construction in Haskell

Minimal complete definition

plushom

Methods

plushom :: a -> b Source #

Instances

class (AdditiveUnital a, AdditiveAssociative a) => AdditiveMonoidal a Source #

AdditiveMonoidal

class (AdditiveCommutative a, AdditiveUnital a, AdditiveAssociative a) => Additive a where Source #

Additive is commutative, unital and associative under addition

a + b = b + a
(a + b) + c = a + (b + c)
zero + a = a
a + zero = a

Methods

(+) :: a -> a -> a infixr 6 Source #

Instances

Additive Double Source # 

Methods

(+) :: Double -> Double -> Double Source #

Additive Float Source # 

Methods

(+) :: Float -> Float -> Float Source #

Additive Int Source # 

Methods

(+) :: Int -> Int -> Int Source #

(KnownNat n, Unbox a, Additive a) => Additive (VectorU n a) Source # 

Methods

(+) :: VectorU n a -> VectorU n a -> VectorU n a Source #

(Additive a, KnownNat n) => Additive (VectorA n [] a) Source # 

Methods

(+) :: VectorA n [] a -> VectorA n [] a -> VectorA n [] a Source #

class (Additive a, AdditiveInvertible a) => AdditiveGroup a where Source #

AdditiveGroup

a - a = zero
negate a = zero - a
negate a + a = zero

Methods

(-) :: a -> a -> a infixr 6 Source #

Instances

AdditiveGroup Double Source # 

Methods

(-) :: Double -> Double -> Double Source #

AdditiveGroup Float Source # 

Methods

(-) :: Float -> Float -> Float Source #

AdditiveGroup Int Source # 

Methods

(-) :: Int -> Int -> Int Source #

(KnownNat n, Unbox a, AdditiveGroup a) => AdditiveGroup (VectorU n a) Source # 

Methods

(-) :: VectorU n a -> VectorU n a -> VectorU n a Source #

(AdditiveGroup a, KnownNat n) => AdditiveGroup (VectorA n [] a) Source # 

Methods

(-) :: VectorA n [] a -> VectorA n [] a -> VectorA n [] a Source #

Multiplicative Structure

class MultiplicativeMagma a where Source #

times is used for the multiplicative magma to distinguish from * which, by convention, implies commutativity

Minimal complete definition

times

Methods

times :: a -> a -> a Source #

class MultiplicativeMagma a => MultiplicativeUnital a where Source #

MultiplicativeUnital

one `times` a == a
a `times` one == a

Minimal complete definition

one

Methods

one :: a Source #

class MultiplicativeMagma a => MultiplicativeInvertible a where Source #

MultiplicativeInvertible

∀ a ∈ A: recip a ∈ A

law is true by construction in Haskell

Minimal complete definition

recip

Methods

recip :: a -> a Source #

class (MultiplicativeMagma a, MultiplicativeMagma b) => MultiplicativeHomomorphic a b where Source #

MultiplicativeHomomorphic

∀ a ∈ A: timeshom a ∈ B

law is true by construction in Haskell

Minimal complete definition

timeshom

Methods

timeshom :: a -> b Source #

class (MultiplicativeCommutative a, MultiplicativeUnital a, MultiplicativeAssociative a) => Multiplicative a where Source #

Multiplicative is commutative, associative and unital under multiplication

a * b = b * a
(a * b) * c = a * (b * c)
one * a = a
a * one = a

Methods

(*) :: a -> a -> a infixr 7 Source #

Instances

class (Multiplicative a, MultiplicativeInvertible a) => MultiplicativeGroup a where Source #

MultiplicativeGroup

a / a = one
recip a = one / a
recip a * a = one

Methods

(/) :: a -> a -> a infixr 7 Source #

Distributive

class (Additive a, MultiplicativeMagma a) => Distributive a Source #

Distributive

a . (b + c) == a . b + a . c
(a + b) . c == a . c + b . c

Ring

Module

class (Additive a, AdditiveHomomorphic a a) => AdditiveBasis a where Source #

AdditiveBasis element by element addition

Methods

(.+.) :: a -> a -> a infixr 7 Source #

class (AdditiveGroup a, AdditiveHomomorphic a a) => AdditiveGroupBasis a where Source #

AdditiveGroupBasis element by element subtraction

Methods

(.-.) :: a -> a -> a infixr 7 Source #

class (Additive a, Additive s, AdditiveHomomorphic s a) => AdditiveModule s a where Source #

AdditiveModule

Methods

(.+) :: AdditiveModule s a => s -> a -> a infixr 7 Source #

(+.) :: AdditiveModule s a => a -> s -> a infixr 7 Source #

Instances

(KnownNat n, Unbox a, Additive a) => AdditiveModule a (VectorU n a) Source # 

Methods

(.+) :: a -> VectorU n a -> VectorU n a Source #

(+.) :: VectorU n a -> a -> VectorU n a Source #

(Additive a, KnownNat n) => AdditiveModule a (VectorA n [] a) Source # 

Methods

(.+) :: a -> VectorA n [] a -> VectorA n [] a Source #

(+.) :: VectorA n [] a -> a -> VectorA n [] a Source #

class (AdditiveModule s a, AdditiveGroup a) => AdditiveGroupModule s a where Source #

AdditiveGroupModule

Methods

(.-) :: AdditiveModule s a => s -> a -> a infixr 7 Source #

(-.) :: AdditiveModule s a => a -> s -> a infixr 7 Source #

class (Multiplicative a, MultiplicativeHomomorphic a a) => MultiplicativeBasis a where Source #

MultiplicativeBasis element by element addition

Methods

(.*.) :: a -> a -> a infixr 7 Source #

class (MultiplicativeGroup a, MultiplicativeHomomorphic a a) => MultiplicativeGroupBasis a where Source #

MultiplicativeGroupBasis element by element subtraction

Methods

(./.) :: a -> a -> a infixr 7 Source #

class (Multiplicative a, Multiplicative s, MultiplicativeHomomorphic s a) => MultiplicativeModule s a where Source #

MultiplicativeModule

Methods

(.*) :: MultiplicativeModule s a => s -> a -> a infixr 7 Source #

(*.) :: MultiplicativeModule s a => a -> s -> a infixr 7 Source #

Instances

(KnownNat n, Unbox a, AdditiveUnital a, Multiplicative a) => MultiplicativeModule a (VectorU n a) Source # 

Methods

(.*) :: a -> VectorU n a -> VectorU n a Source #

(*.) :: VectorU n a -> a -> VectorU n a Source #

(Multiplicative a, KnownNat n) => MultiplicativeModule a (VectorA n [] a) Source # 

Methods

(.*) :: a -> VectorA n [] a -> VectorA n [] a Source #

(*.) :: VectorA n [] a -> a -> VectorA n [] a Source #

class (MultiplicativeModule s a, MultiplicativeGroup a) => MultiplicativeGroupModule s a where Source #

MultiplicativeGroupModule

Methods

(./) :: MultiplicativeModule s a => s -> a -> a infixr 7 Source #

(/.) :: MultiplicativeModule s a => a -> s -> a infixr 7 Source #

Integral

class (Additive a, Multiplicative a) => Integral a where Source #

Integral

b == zero || b * (a `div` b) + (a `mod` b) == a
b == zero || b * (a `quot` b) + (a `rem` b) == a

Minimal complete definition

toInteger, divMod

Methods

toInteger :: a -> Integer Source #

div :: a -> a -> a infixl 7 Source #

truncates towards negative infinity

mod :: a -> a -> a infixl 7 Source #

divMod :: a -> a -> (a, a) Source #

Instances

Integral Int Source # 

Methods

toInteger :: Int -> Integer Source #

div :: Int -> Int -> Int Source #

mod :: Int -> Int -> Int Source #

divMod :: Int -> Int -> (Int, Int) Source #

(KnownNat n, Unbox a, Integral a) => Integral (VectorU n a) Source # 

Methods

toInteger :: VectorU n a -> Integer Source #

div :: VectorU n a -> VectorU n a -> VectorU n a Source #

mod :: VectorU n a -> VectorU n a -> VectorU n a Source #

divMod :: VectorU n a -> VectorU n a -> (VectorU n a, VectorU n a) Source #

Metric

class Metric r m where Source #

Metric

Minimal complete definition

d

Methods

d :: m -> m -> r Source #

class Normed a where Source #

Normed

Minimal complete definition

size

Methods

size :: a -> a Source #

abs :: Normed a => a -> a Source #

abs

class (Field a, Bounded a) => BoundedField a where Source #

BoundedField

Methods

nan :: a Source #

infinity :: BoundedField a => a Source #

infinity

Exponential

class Ring a => ExpRing a where Source #

ExpRing

Minimal complete definition

logBase

Methods

logBase :: a -> a -> a Source #

(**) :: ExpRing a => a -> a -> a Source #

(^) :: ExpRing a => a -> a -> a Source #

(^)

class (Field a, ExpRing a) => ExpField a where Source #

ExpField

Minimal complete definition

exp, log

Methods

sqrt :: a -> a Source #

exp :: a -> a Source #

log :: a -> a Source #

Tensor Algebra

class (Banach a, TensorAlgebra a, ExpField r, AdditiveGroup a) => Hilbert a r where Source #

Hilbert

Minimal complete definition

(<?>)

Methods

(<?>) :: a -> a -> r infix 8 Source #

class TensorAlgebra a where Source #

TensorAlgebra

Minimal complete definition

(><), timesleft, timesright

Methods

(><) :: a -> a -> a >< a infixr 8 Source #

timesleft :: a -> (a >< a) -> a Source #

timesright :: (a >< a) -> a -> a Source #

squaredInnerProductNorm :: Hilbert v r => v -> r Source #

squaredInnerProductNorm

innerProductNorm :: Hilbert v r => v -> r Source #

innerProductNorm

innerProductDistance :: Hilbert v r => v -> v -> r Source #

innerProductDistance

Orphan instances