Introduction¶
calchylus
is a computer installable Hy module that is used to evaluate
Lambda expressions, and furthermore through this documentation, shine light to
the basics of Lambda calculus (also written as λ-calculus).
Note
Lambda calculus is a formal system in mathematical logic for expressing computation that is based on function abstraction and application using variable binding and substitution.
The target audience is those who:
- are interested in the theory and the history of the programming languages
- may have or are interested to gain some experience in Python and/or Lisp
- who wants to narrow the gap between mathematical notation and programming languages, especially by means of logic
Andrew Bayer writes in his blog post about formal proofs and deduction:
Traditional logic, and to some extent also type theory, hides computation behind equality.
Lambda calculus, on the other hand, reveals how the computation in logic is done by manipulation of the Lambda terms. Manipulation rules are simple and were originally made with a paper and a pen, but now we rather use computers for the task. Lambda calculus also addresses the problem, what can be proved and solved and what cannot be computed in a finite time. Formally these are called the decidability and the halting problem.
Beside evaluating Lambda expressions, calchylus
module can serve as a
starting point for a mini programming language. Via custom macros
representing well known Lambda forms, calchylus
provides all necessary
elements for boolean, positive integer, and list data types as well as
conditionals, loops, variable setters, imperative do structure, logical
connectives, and arithmetic operators. You can build upon that, for example
real numbers, even negative complex numbers if that makes any sense. Your
imagination is really the only limit.
Finally, when investigating the open source calchylus
implementation that is
hosted on GitHub , one can expect to get a good understanding of the higher
order functions and the combinatory logic, not the least of the fixed point
combinator or shortly, ϒ combinator:
$$\Large ϒ = 𝜆x.(𝜆y.x \space (y \space y)) \space (𝜆y.x \space (y \space y))$$