No description or website provided.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin added directory bin Nov 9, 2011
doc Whitespace and .gitignore. Dec 25, 2016
examples/ltal compile under haskell-2010 Jul 17, 2012
tools Whitespace and .gitignore. Dec 25, 2016
.gitignore Removed generated Lexer.hs and Parser.hs from version control. Dec 25, 2016
.hgignore restored TheMonad.hs added ignore file Nov 10, 2011
.travis.yml Updated .cabal file and added .travis file. Dec 25, 2016
LICENSE Updated .cabal file and added .travis file. Dec 25, 2016
Makefile alpha equality for sharing optimization Nov 8, 2011
README installation instructions in README Nov 9, 2011 README: helf does not parse <-. Dec 25, 2016


A Haskell implementation of the Edinburgh Logical Framework.

helf parses and typechecks .elf files written for the Twelf implementation of the Logical Framework. helf is mainly a laboratory to experiment with different representation of lambda-terms for bidirectional typechecking.


helf only understands a subset of the Twelf language and implements only a small subset of Twelf's features.

  • helf does not parse the backarrow <- notation for function space.
  • helf only understands the fixity pragmas for operators. It ignores all other pragmas.
  • helf only implements bidirectional type checking. It does not have unification or type reconstruction.
  • helf does not give nice error messages.


Requires GHC and cabal, for instance via the Haskell Platform. In a shell, type

  cabal install helf


File eval.elf:

% Untyped lambda calculus.

tm   : type.
abs  : (tm -> tm) -> tm.
app  : tm -> (tm -> tm).

% cbn weak head evaluation.

eval : tm -> tm -> type.

eval/abs : {M : tm -> tm}
  eval (abs M) (abs M).

eval/app : {M : tm} {M' : tm -> tm} {N : tm} {V : tm}
  eval M (abs M') ->
  eval (M' N) V   ->
  eval (app M N) V.

Type check with:

  helf eval.elf

For more examples, see test/succeed/.