• Stars
    star
    158
  • Rank 237,131 (Top 5 %)
  • Language
    Haskell
  • License
    BSD 3-Clause "New...
  • Created about 4 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A graphical interactive proof assistant designed for education

Holbert

Holbert is an interactive theorem prover, or proof assistant, based on higher order logic and natural deduction. Furthermore, Holbert is graphical. It presents proofs and rules using conventional inference rule notation and proof trees. It is designed to be used by students, without any expertise on using a theorem prover. It does not feature proof scripts (in the traditional sense), tactics, or other such complications.

You can try Holbert out by trying the live demo here (this version may not be the latest one available from GitHub). This Holbert instance explains more about the rationale behind its design and my intended goals with it.

Like Isabelle, Holbert is just a pure meta-logic. It does not define any connectives (like conjunction or disjunction) itself, although all can be defined within the system. For binding structures and quantifiers, higher order abstract syntax can be used.

Unlike conventional theorem provers, Holbert’s term language is just the untyped lambda calculus. While this technically makes the logic unsound, it is much simpler to use as a pedagogical tool.

Holbert is intended as a tool for education, and not as an industrial-strength proof assistant where theorems must be trusted. So, just avoid writing fixed point combinators and you should be fine.

Building, Installing

Holbert is written in GHC Haskell, intended to be compiled with ghcjs. It uses the Miso framework and the optics-core library. Acquiring GHCJS can be difficult, but I was able to follow the instructions on the Miso readme to install it using nix, and then I just used cabal from then on once I had the ghcjs binaries.

Once it is set up, make sure that the OUTPUT variable in the Makefile points to wherever cabal builds the jsexe directory for the compiled app. To find out what this is, you can type:

cabal configure --ghcjs
cabal build

The correct directory to set OUTPUT to will be listed as the last line in the build log (Linking ...), but you can also find it by typing:

find . | grep jsexe | head -1

Once the OUTPUT directory is set, you can build Holbert properly (including all resources) by typing:

make

And if you have python3 there is a shortcut to start a server with the app with

make server

Licenses

Holbert is released under the BSD3 license. It includes the following free projects:

  • Computer Modern font families, released under the SIL Open Font License.
  • The Neo Euler font, also released under the SIL Open Font License.
  • The Typicons icon font, also released under the SIL Open Font License.

Some code for the unification engine were taken from Tobias Nipkow’s paper on the topic, as well as from Daniel Gratzer’s higher order unification implementation in Haskell.

The following MIT licensed JS libraries are used:

Future work

  • Support for deferred proof steps to lemmas.
  • “Books”, multiple interlinked documents.
  • (Built-in) support for equality
  • (Built-in) support for induction
  • And much much more!

More Repositories

1

learn-you-an-agda

Learn you an Agda (and achieve enlightenment)
Agda
310
star
2

patches-vector

A library for patches (diffs) on vectors: composable, mergeable and invertible
Haskell
55
star
3

latex-formulae

Libraries and tools for rendering math to images using real LaTeX, from Haskell, Pandoc and Hakyll
Haskell
54
star
4

dixi

A wiki based on firm theoretical foundations
Haskell
52
star
5

wizards

High level, generic library for interrogative user interfaces in Haskell
Haskell
41
star
6

hilbert

An intensely interactive, graphical theorem prover based on natural deduction
Haskell
30
star
7

desktop_games

a collection of desktop games written in rust
Rust
19
star
8

dddp

Deferring the Details and Deriving Programs
TeX
14
star
9

pongell

crappy pong clone written in haskell
9
star
10

composition-tree

Composition trees for arbitrary monoids.
Haskell
9
star
11

gentzen

A beginner's theorem prover
Haskell
8
star
12

agda-snippets

Library and tool to render the snippets in literate Agda files to hyperlinked HTML, leaving the rest of the text untouched.
Haskell
8
star
13

tesserae

A library for manipulating 8x8 2-color tile graphics in the spirit of 8-bit text mode drawing.
Rust
8
star
14

outside-in

Formalisation of The GHC Team's OutsideIn(X) in Agda.
8
star
15

opardum-server

operational transforms based collaborative editing server written all in literate haskell
JavaScript
7
star
16

tea-hs

2d game creation library for Haskell
Haskell
6
star
17

me-em

Model Examples, Example Models
Agda
6
star
18

standard

Sphere Standard Engine
4
star
19

spacemacs-agda

A little agda layer for spacemacs
Emacs Lisp
4
star
20

liamoc.net

my gnu-make-powered website
TeX
4
star
21

pl-course-book

A book based on course notes written over the years for a UNSW PL course
TeX
3
star
22

pretty-show-ansi-wl

Pretty-show, but for ansi-wl-pprint
Haskell
2
star
23

gameupdater_client

Client for GameUpdater
2
star
24

botz-rs

a port of Kevin Laity's classic physics toy to Rust and egui
Rust
2
star
25

sfont-hs

Haskell port of the SFont Library
Haskell
2
star
26

sprig-hs

SDL Primitive Generator bindings to Haskell
Haskell
2
star
27

gameupdater_server

Server for GameUpdater
2
star
28

6502_mep

Micro Entertainment Pack games for 6502 systems
Assembly
2
star
29

elm-redex

An 8-hour project, writing an interactive untyped lambda calculus interpreter/rewriter in elm.
JavaScript
2
star
30

generators

composable monadic random value generators
Haskell
2
star
31

rust-tetris

A small tetris clone in Rust
Rust
1
star
32

geordi

Well-typed, minimalist web-framework for GHC Haskell
Haskell
1
star