beautifHOL: A pretty-printer for higher-order logic

[ program, text ] [ Propose Tags ]

This is a pretty-printer for higher-order logic (HOL). It reads in a formula and outputs it to standard out. A paper describes its design and motivation at the project website. The approach expands upon Leslie Lamport's paper, "How to Write a Long Formula," available at

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1, 0.10, 0.11
Dependencies array, base, haskell98, mtl [details]
License LicenseRef-GPL
Author Lee Pike <>
Maintainer Lee Pike <>
Category Text
Home page
Uploaded by LeePike at 2009-01-20T02:58:45Z
Distributions NixOS:0.11
Reverse Dependencies 1 direct, 0 indirect [details]
Executables beautifHOL
Downloads 2684 total (7 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2017-01-02 [all 8 reports]

Readme for beautifHOL-0.1

[back to package description]
# README for beautifHOL, a HOL prettyprinter
# Based on the paper found at
# Lee Pike <> (remove dashes)
# Jan 5, 2009
# Copyright 2008

#  This file is part of beautifHOL.
# BSD3.

This README contains the following sections:

* Program Description
* License information
* Installation information 
* Usage information
* How to modify the program
* Todos (including known bugs)


This is a pretty-printer for higher-order logic (HOL).  It reads in a formula
and outputs it to standard out.  More information about the pretty-printer can
be found in the paper, "How to Pretty-Print a Long Formula"


BSD3 license.


This program is distributed as a Cabal package, a packaging system for Haskell
programs.  For information on how to install a Cabal package, see
<>.  The
easiest way to install a Cabal package is to use cabal-install:
<>.  Instructions for
getting cabal-install are located there.


If you install this program using Cabal (describe above), then the executable,
beautifulHOL, should be in your path.  Then issue

          > beautifHOL

to interact with the program in a read-eval-print loop.  From there, you can
enter HOL formulas.  Examples of the syntax can be found in the file
formulas.txt.  Be sure to terminate a formula with a semicolon.  After entering
a formula, its pretty-printed rendering will be sent to standard out.

The available options to the program can be seen by issuing

          > beautifHOL --help

Among others, there is an option to suppress labels (--nolabel) and an option to
read in a set of formulas from a file and print their renderings to
standard-out.  For example, issuing

          > beautifHOL --f formulas.txt

will render all the example formulas.

The syntax of the current input language is documented in

To modify the input language to use with other variants of HOL, you will need
the BNF Converter (BNFC).  BNFC is an GPL-licensed that generates a
compiler-front end from a labeled Bakus Normal Form language specification.  It
also generates docs, etc.  BNFC is available at
<>.  The latest
version can be obtained by issuing

  darcs get --partial

There are only three files you need to modify:
  *, the BNF specification of the input grammar, read in by BNFC.
  * PrintHOL.hs, the guts of the pretty-printer.
  * ConfigHOL.hs, 


  ==Code Cleanups==
  * Remove dead code.
  * Run HPC and HLint over this.
  * How spaces are handled needs to be reimplemented.
  * Should be reimplemented to use SPJ/John Hughes pretty-printing library:
    pretty on Hackage

  ==New Functionality== 
  * Desired new functionality is described in the accompanying paper, "How to
    Pretty-Print a Long Formula" (pphol.pdf).
  * Better parse-error messages.

  * Can't have a breakline char -- it'll break things if it's really a string (e.g., Latex).
  * There are known issues with using different widths for spcStr, argSepStr, etc.
  * Parsing doesn't work if there is whitespace between relation or function
    identifiers and parentheses.
  * In ConfigHOL.hs, "in" is defined "in " to fix a pretty-printing bug.