Two functions are equal iff they have the same domain and range and the same outputs for the same inputs. Simple to state, but extremely difficult to implement in a useful way, and impossible to implement in a perfect way.

If you had a compiler or algorithm capable of determining function equality, you could use it to prove or disprove arbitrary theorems in mathematics.

Regards,

John A. De Goes
N-BRAIN, Inc.
The Evolution of Collaboration

http://www.n-brain.net    |    877-376-2724 x 101

On Apr 18, 2009, at 9:39 AM, Eugene Kirpichov wrote:

Could you then provide an example of two functions that *are* equal,
or, even better, a definition of equality for arbitrary functions?
Since Haskell may be compiled into C, this must be a definition that
is implementable in C.

2009/4/18 michael rice <nowg...@yahoo.com>:
Though I haven't tried it out, it's trying to use my function to count
functions.

The first argument is the identity function.

The second argument is a list of a different form of the identity function.

Though the two identity functions, given the same input, would produce the
same output, I doubt they would be equal.

So my guess at an answer would be zero.

Michael

--- On Sat, 4/18/09, Eugene Kirpichov <ekirpic...@gmail.com> wrote:

From: Eugene Kirpichov <ekirpic...@gmail.com>
Subject: Re: [Haskell-cafe] General function to count list elements?
To: "michael rice" <nowg...@yahoo.com>
Cc: haskell-cafe@haskell.org
Date: Saturday, April 18, 2009, 11:03 AM

What should

count (\x -> x) (replicate 10 (\y -> if 1==1 then y else undefined))

return?

2009/4/18 michael rice <nowg...@yahoo.com>:
Is there a general function to count list elements. I'm trying this

count :: a -> [a] -> Int
count x ys = length (filter (== x) ys)

with this error upon loading

=============

[mich...@localhost ~]$ ghci count
GHCi, version 6.10.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( count.hs, interpreted )

count.hs:2:29:
    Could not deduce (Eq a) from the context ()
      arising from a use of `==' at count.hs:2:29-32
    Possible fix:
      add (Eq a) to the context of the type signature for `count'
    In the first argument of `filter', namely `(== x)'
    In the first argument of `length', namely `(filter (== x) ys)'
    In the expression: length (filter (== x) ys)
Failed, modules loaded: none.
Prelude>

=============

Not sure what it's trying to tell me other than I need an (Eq a)
somewhere.

Michael




_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe





--
Eugene Kirpichov
Web IR developer, market.yandex.ru





--
Eugene Kirpichov
Web IR developer, market.yandex.ru
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to