# Lambda Graph Generator

The Lambda Graph Generator is a tool for visualizing the structure of programs written in Lambda Calculus. Traditionally, Lambda Calculus is presented in text-based algebraic notation, often looking something like this:

(λmnf.n(mf))(λfx.f(fx))(λfx.fx)

But what if there was a better way to present this? The Lambda Graph Generator produces geometric constructions which communicate the structure of Lambda Calculus expressions geometrically, rather than algebraically.

In Lambda Calculus, everything is an abstraction, similar to a function in other programming languages, and the Generator represents these abstractions as double rings. On the edge of these rings are hollow circles, representing inputs to the abstraction, and a solid black circle which represents its output. Within the abstraction, paths drawn between the element track the flow of data through the expression. Where paths meet, the path which terminates is applied into the other as an input, allowing us to model complex operations.

By translating the textual representation of a program into geometric relationships, the Lambda Graph Generator takes advantage of the brain’s natural strengths in vision to communicate this abstract programming language more clearly. The brain has evolved to be very good at recognizing geometric and spatial patterns and isn’t quite so good at working with other types of patterns, such as those present in a textual form of program code. Exploring the language of Lambda Calculus in this way affords us a method to teach it to people who may have a difficult time approaching the byzantine algebraic notation that is currently used for Lambda Calculus, but are very comfortable with geometric reasoning.

As the Lambda Graph Generator is intended primarily as a tool to present Lambda Calculus in an alternative form, I intended to offer it as a supplemental learning tool to instructors in the School of Computer Science at Carnegie Mellon for the use of their students.

The source for this project is available on GitHub. Check it out!