# Power function

### From HaskellWiki

(formatted my post to Haskell-Cafe) |
(format table) |
||

Line 31: | Line 31: | ||

I also think the following symbols are more systematic and intuitive. |
I also think the following symbols are more systematic and intuitive. |
||

They are used in NumericPrelude. |
They are used in NumericPrelude. |
||

− | <code> |
+ | {| |

− | any ring (provides *) ^ cardinal |
+ | | basis type || provides || symbol || exponent type || definition |

− | any field (provides /) ^- integer |
+ | |- |

− | an algebraic field (provides 'root') |
+ | | any ring || <hask> * </hask> || <hask> ^ </hask> || cardinal || repeated multiplication |

− | ^/ rational (computing a list of powers |
+ | |- |

− | depending on the denominator |
+ | | any field || <hask> / </hask> || <hask> ^- </hask> || integer || multiplication and division |

− | of the rational) |
+ | |- |

− | positive real |
+ | | an algebraic field || <hask>root</hask> || <hask> ^/ </hask> || rational || list of polynomial zeros (length = denominator of the exponent) |

− | (including transcendent) ^? anything (unqiue via exponential series) |
+ | |- |

− | </code> |
+ | | positive real || <hask> log </hask> || ^? || any ring with a notion of limit || exponential series |

+ | |} |
||

+ | |||

+ | * examples for rings are: Polynomials, Matrices, Residue classes |
||

+ | * examples for fields: Fractions of polynomials (rational functions), Residue classes with respect to irreducible divisors, in fact we do not need fields, we only need the division and associativity, thus invertible Matrices are fine |
||

+ | |||

That is <hask>(^-)</hask> replaces <hask>(^^)</hask>, |
That is <hask>(^-)</hask> replaces <hask>(^^)</hask>, |

## Revision as of 19:22, 10 October 2007

## 1 Question

Why are there several notions of power in Haskell, namely

## 2 Answer

The reason is that there is no definition for the power function which covers all exotic choices for basis and exponent.
It is even sensible to refine the set of power functions as it is done in the NumericPrelude project.
In mathematical notation we don't respect types and we do not distinguish between powers of different types.
However if we assume the most general types for both basis and exponent, the result of the power is no longer unique.
Actually all possible solutions of say 1^{x},
where *x* is irrational is dense in the complex unit circle.
In the past I needed the power of two complex numbers only once, namely for the Cauchy wavelet (see also: [1]):

However, I could not use the built-in complex power function

because the resulting function became discontinuous. Of course, powers of complex numbers have the problem of branch cuts and the choice of the branch built into the implementation of the complex power is quite arbitrary and might be inappropriate.

But also for real numbers there are problems:

For computingand a real 10^{15}th root of − 1 does not exist.

So I propose some balancing: The more general the basis the less general the exponent and vice versa. I also think the following symbols are more systematic and intuitive. They are used in NumericPrelude.

basis type | provides | symbol | exponent type | definition |

any ring | * |
^ |
cardinal | repeated multiplication |

any field | / |
^- |
integer | multiplication and division |

an algebraic field | root |
^/ |
rational | list of polynomial zeros (length = denominator of the exponent) |

positive real | log |
^? | any ring with a notion of limit | exponential series |

- examples for rings are: Polynomials, Matrices, Residue classes
- examples for fields: Fractions of polynomials (rational functions), Residue classes with respect to irreducible divisors, in fact we do not need fields, we only need the division and associativity, thus invertible Matrices are fine

## 3 See also

- Haskell-Cafe: Proposal for restructuring Number classes