Skip to content

Partial application #126

Description

@Easyoakland

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions