Git Product home page Git Product logo

chrisjpm / holbert Goto Github PK

View Code? Open in Web Editor NEW

This project forked from liamoc/holbert

0.0 0.0 0.0 13.64 MB

A graphical interactive proof assistant designed for education. My contributions: applying rules by elimination, proofs by induction, proofs by cases, multi-axiom element and misc css styling. Honours report grade: 76% :tada:

Home Page: http://liamoc.net/holbert

License: BSD 3-Clause "New" or "Revised" License

Haskell 72.35% Makefile 0.32% HTML 19.52% CSS 7.35% SCSS 0.46%
automated-reasoning dissertation dissertation-project haskell higher-order-logic miso natural-deduction proof-assistant proofs theorem-prover theorem-proving thesis thesis-project

holbert's Introduction

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!

holbert's People

Contributors

liamoc avatar chrisjpm avatar rayhanayasmin avatar emanon42 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.