lambda-explorer icon indicating copy to clipboard operation
lambda-explorer copied to clipboard

Partial application

Open Easyoakland opened this issue 2 years ago • 1 comments

NAND TRUE yields a function which works correctly (λf₂.λa.λb.f₂ba). But when using (NAND TRUE) TRUE get an incorrect result (λa.λb.a) which is different from manually writing (λf₂.λa.λb.f₂ba) TRUE which yields λa.λb.b.

Am I conceptualizing this incorrectly or is this a bug?

> TRUE
λa.λb.a
<function, church boolean true>
> NAND
λf₁.λf₂.λa.λb.f₁(f₂ba)a
<function>
> NAND TRUE
λf₂.λa.λb.f₂ba
<function>
> NAND TRUE TRUE
λa.λb.a
<function, church boolean true>
> (λf₂.λa.λb.f₂ba) TRUE
λa.λb.b
<function, church numeral 0, church boolean false>
> (NAND TRUE) TRUE
λa.λb.a
<function, church boolean true>
> (λf₂.λa.λb.f₂ba) TRUE
λa.λb.b
<function, church numeral 0, church boolean false>(-)
Free Variables:
Rendered from AST: (λf₂.λa.λb.f₂ba)(λa.λb.a)
Beta-reduced: λa.λb.(λa.λb.a)ba
Eta-reduced: [eta irreducible]
Normal Form: λa.λb.b
Normal As Church Numeral: 0
Normal As Church Boolean: false
steps to normal form:

    (λf₂.λa.λb.f₂ba)(λa.λb.a)
    λa.λb.(λa.λb.a)ba
    λa.λb.(λε₁.b)a
    λa.λb.b

> (NAND TRUE) TRUE
λa.λb.a
<function, church boolean true>
Free Variables:
Rendered from AST: (λf₁.λf₂.λa.λb.f₁(f₂ba)a)(λa.λb.a)(λa.λb.a)
Beta-reduced: [beta irreducible]
Eta-reduced: [eta irreducible]
Normal Form: λa.λb.a
Normal As Church Numeral: [not a church numeral]
Normal As Church Boolean: true
steps to normal form:

    (λf₁.λf₂.λa.λb.f₁(f₂ba)a)(λa.λb.a)(λa.λb.a)
    (λf₂.λa.λb.(λa.λb.a)(f₂ba)a)(λa.λb.a)
    λa.λb.(λa.λb.a)((λa.λb.a)ba)a
    λa.λb.(λε₁.(λa.λb.a)ba)a
    λa.λb.(λε₁.λb.a)ba
    λa.λb.(λε₁.a)a
    λa.λb.a

Easyoakland avatar Dec 04 '23 09:12 Easyoakland

Likely related: https://github.com/evinism/lambda-explorer/issues/125

evinism avatar Jan 20 '24 18:01 evinism