Harry Chesley wrote:
But here's the thing that makes it hard (at least for me): two
programs are considered the same if they can be made to match by
rearranging the order of the input parameters. I.e., "f(a), g(b)" is
the same as "f(b), g(a)". Although parameters can be reordered, they
cannot be substituted ("f(a), g(b)" is _not_ the same as "f(a),
g(a)").

Are you sure you've got this right? I'd have thought that "rearranging the order of input parameters" just means that if you have h(a,b) == h'(b,a) for some h and h' then you are allowed to substitute h' for h as long as you also swap the params around.

f(b),g(a) can only be obtained from f(a),g(b) by substituting the params for f and g respectively, which is not the same as rearranging the order of f and g's params, and which as you've said, is not allowed.

Also, what is the meaning of "f(a), g(b)"? If f and g are just side effect-free functions, is this not equivalent to just g(b)?

I'd suggest the first step is to define a formal semantics for the meaning of the programs to help illuminate what is/isn't equivalent, then think about rewrite rules/ search strategies/heuristics etc, and only at the very end try to work out how to code it in Haskell. (Of course the problem of comparing two functions in a TM-complete language is undecidable so unless your functional language is very restricted no such algorithm will work for every input)

Regards, Brian.



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

Reply via email to