Hets is a parsing, static analysis and proof management tool incorporating various provers and different specification languages, thus providing a tool for heterogeneous specifications. Logic translations are first-class citizens.
- general-purpose logics: Propositional, QBF, TPTP/SoftFOL, CASL (FOL), HasCASL (HOL)
- logical frameworks: Isabelle, LF, DFOL
- modeling languages: Meta-Object Facility (MOF), Query/View/Transformation (QVT)
- ontologies and constraint languages: OWL, CommonLogic, RelScheme, ConstraintCASL
- reactive systems: CspCASL, CoCASL, ModalCASL, Maude
- programming languages: Haskell, VSE
- logics of specific tools: Reduce, DMU (CATIA)
- minisat and zChaff, which are SAT solvers,
- SPASS, Vampire, Darwin, Hyper and MathServe, which are automatic first-order theorem provers,
- Pellet and Fact++, description logic tableau provers,
- Leo-II and Satallax, automated higher-order provers,
- Isabelle, an interactive higher-order theorem prover,
- CSPCASL-prover, an Isabelle-based prover for CspCASL,
- VSE, an interactive prover for dynamic logic.
The structuring constructs of the heterogeneous specification language are those of the OMG-standardised Distributed Ontology, Model and Specification Language (DOL), extending those of CASL. However, Hets can also read other structuring constructs, like those of Haskell, Maude or OWL. All these are mapped to so-called development graphs and processed with a proof calculus for heterogeneous development graphs that allows to decompose global proof obligations into local ones (during this, Hets also needs to compute colimits of theories over the involved logics).
Hets is based on a graph of logics and logic translations. The overall architecture is depicted below. Adding new logics and logic translations to Hets can be done with moderate effort by adding some Haskell code to the Hets source. With the Latin project, this becomes much easier: logics (and in the near future also logic translations) can be declaratively specified in LF.
A good starting point is the Hets user guide and the Hets user guide for Common Logic users. Furthermore two vidoes showing a heterogeneous proof are available:
For a formal introduction to hets see the introductory paper The Heterogeneous Tool Set by Till Mossakowski, Christian Maeder, Klaus Lüttich and Stefan Wölfl. For more in-depth information about Hets see the thesis Heterogeneous specification and the heterogeneous tool set by Till Mossakowski.
For questions related to hets there is a mailing list.
You can try out Hets using the Web-based interface or install it easily in a docker container.
sudo dpkg --add-architecture i386 # not needed for hets-server
sudo apt-add-repository ppa:hets/hets
sudo apt-get install hets-desktop
sudo dpkg --add-architecture i386 # not needed for hets-server
sudo apt-add-repository -S "deb [trusted=yes] http://pkg.cs.ovgu.de/LNF/linux/ubuntu 22.04/"
sudo apt-get install hets-desktop
- for using Hets as a server providing a RESTful interface, use hets-server. This is a smaller version without GUI dependencies. Note that also hets-desktop can be used as as server.
From here you can get the latest Hets binaries (always freshly compiled from the master branch).
For Hets development additionally type in
sudo apt-add-repository -s "deb http://ppa.launchpad.net/hets/hets/ubuntu bionic main"
sudo apt-get update
sudo apt-get build-dep hets-desktop
Replace 'bionic' with the Ubuntu version that you use. The Hets sources should be obtained from the git repository (see the end of this page).
We provide the AUR-packages hets-desktop-bin
and hets-server-bin
to install 64 bit binaries of Hets/Hets-server.
If you would like to compile Hets yourself, you can install one of the AUR-packages hets-desktop
and hets-server
.
- Please use a docker container.
Download the Hets libraries and set $HETS_LIB to the folder containing these.
Hets is called with
hets filename
or
hets -g filename
For entering the command line mode, just call
hets -I
For a short description of the options, call
hets --help
To support writing CASL specifications we have an emacs mode
With the option "-o pp.tex" hets can produce nice LaTeX output from your specifictions that can be embedded in your publications using the hetcasl.sty style file.
A good starting point is the code documentation for Hets - the Heterogeneous Tool Set.
Since Hets is rather large and complex we recommend following the interactive session in Debugging and Testing Hets to get familiar with the central datastructures of Hets.
The formal background and the general structure of Hets is described in chapter 7 of Heterogeneous specification and the heterogeneous tool set.
Hets is written in Haskell, and is compiled using GHC using a couple of language extensions. Among the Haskell books and tutorials we recommend Real World Haskell. The language definition covers the Haskell98 standard which we are supposed to stick to in most cases. Make sure that you are familiar with at least the most common library functions of the Prelude. For searching or looking up any library functions you may also try Hoogle.
Also look into programming guidelines and things to avoid in Haskell.
Dependencies can be installed as specified in Hets Development
Before committing haskell source files you may check compliance to the programming guidelines:
- Use scan which can be installed by
cabal install scan
. - The comments in your haskell sources should not cause
haddock
to fail. Aftermake
(for re-compiling changed sources)make docs
will callhaddock
. - Also check your source with hlint which you may install by
cabal install hlint
.
Also have a look at the current Release Notes, Debugging and Testing Hets,Code Review and Branching.
If you want to participate in the Hets development feel free to tell us via our mailing list for Hets developers.
If you wish to make larger changes we generally recommend forking this repository. You can however request access to this repository if you plan on contributing regularly.
- Get the git repository and its submodules
git clone https://github.com/spechub/Hets.git cd Hets git submodule update --init --recursive
- Install Stack (use the generic Linux option if you are on Ubuntu).
- Install build- and GUI-dependencies
- Ensure a JDK is installed (version >= 1.7)
- Automatically install dependencies with
./install_dependencies.sh
- Manual install
- Ubuntu:
sudo apt install libglib2.0-dev libcairo2-dev libpango1.0-dev libgtk2.0-dev libglade2-dev libncurses-dev sudo apt install postgresql postgresql-server-dev-9.5 sudo apt install ant
- macOS:
brew cask install xquartz brew install binutils glib libglade cairo gtk fontconfig freetype gettext spechub/hets/udrawgraph brew install ant
- Ubuntu:
- If you work with OWL ontologies, build OWL tools before running hets. Warnings produced by stack (like "You are not the owner of '/.stack-work/'. Aborting to protect file permissions")
can be ignored as the script doesn't use ghc or stack in general.
sudo make install-owl-tools
- Setup Stack for Hets (this needs to be done only once after every time the stack.yaml has changed):
When you invoke
stack setup make restack
make
for the first time, this will give you warnings about not having found a compiler ("No compiler found, expected minor version match with ghc-..."). Don't let this discourage you - it's normal. Runningmake stack
will take care of it and install the compiler. Runningmake restack
does the same thing, asmake stack
, but needs to be run every time the dependencies (stack.yaml
) change. - Build Hets with one of the following:
This uses Stack to build the Hets[-Server] binary (or, in the last case, the Hets code documentation, using haddock). During this process, the specified version of GHC is installed in the user directory, all dependencies are built and finally, the Hets[-Server] binary is compiled.
make make hets make hets_server make docs
- If you want to clean the extra-dependencies of Stack that are put into the Hets working directory, run
make clean_stack
- We recommend the Git - SVN Crash Course.
- For github specific info on checking out this repository see Fetching a remote.
The Hets source code is licensed under the GPLv2 or higher