Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can fixed-point functions be used on polynomials?

I was thinking of a way to represent algebraic numbers in Haskell as a stream of approximations. You could probably do this by some root finding algorithm. But that's no fun. So you could add x to the polynomial, reducing the problem to finding it's fixed points.

So if you have a function in Haskell like

f :: Double -> Double
f x = x ^ 2 + x

I don't conceptually understand why fix doesn't work, which is to say, I can easily verify for myself that it doesn't work, but isn't 0 the true least fixed point of f? Is there another simple (as in definition size) fixed point function that would work?

like image 491
Senjougahara Hitagi Avatar asked Nov 02 '22 17:11

Senjougahara Hitagi


1 Answers

Here is the implementation of the fix function:

fix :: (a -> a) -> a
fix f = let x = f x in x

It doesn't work for primitive types like Double. It's intended for types that have a more complex structure to them. For instance:

g :: Maybe Int -> Maybe Int
g i = Just $ case i of
    Nothing -> 3
    Just _ -> 4

This function will work with fix because it yields information about its result faster than it reads its input. in other words, the Just portion is known without looking at i at all, which enables it to reach a fixed point.

When your function is Double -> Double, and examines its input, fix won't work because there's no way to partially evaluate a Double.

like image 133
NovaDenizen Avatar answered Nov 13 '22 00:11

NovaDenizen