codereport/blackbird

is phoenix/phi and Phi1 implemented incorrectly?

Cazadorro opened this issue · 0 comments

I'm looking at this page https://combinatorylogic.com/table.html (from your presentation) which states that phoenix / big phi is

λabcd.a(bd)(cd)

and this source cooberates this https://blog.lahteenmaki.net/combinator-birds.html

Φ x y z w = x (y w) (z w)

Both of these statements say the same thing, in that, you take the last function parameters, apply w to them, and then pass their results to x, which is assumed to have an arity of 2.

This repos version is this:

auto _phi = [](auto f, auto g, auto h) { return [=](auto x) { return g(f(x), h(x)); }; };

which I believe translates to:

λfghx.g(fx)(hx)

which is the same as

λabcd.b(ad)(cd)

which does not match up with the definition from https://combinatorylogic.com/table.html. I want to clarify whether there is an error here, or there's a reason the definition looks different here.