Skip to content

tarao/lambda-scala

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 

Type level lambda calculus in Scala

This repository demonstrates an implementation of lambda calculus in Scala types.

Untyped lambda calculus

import lambda._
case class Equals[A >: B <: B, B]() // this checks type equality

type S = x ->: y ->: z ->: ( x @@ z @@ (y @@ z) )
type K = x ->: y ->: x

type result = ( S @@ K @@ K @@ a ) # ->*
Equals[result, a]

More examples are found in TermSpec.scala.

Syntax

Code
Variables a, b, ..., z
Abstraction v ->: M
Application M @@ N
Terms M, N
1-step beta reduction M # ->
Multi-step beta reduction M # ->*
  • You can define your own variables by calling #next of existing (last defined) variable

    type variableName1 = z #next
    type variableName2 = variableName1 #next
  • You may need parenthesis to avoid ambiguity

Capture-avoiding substitutions

Lambda terms are converted internally to De Bruijn indexed terms and indices are shifted during substitution to ensure capture-avoiding semantics.

License

  • Copyright (C) INA Lintaro
  • MIT License

References

About

Type level lambda calculus in Scala

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages