Welcome to Forge! Forge is a tool and language built for teaching introductory formal methods and modeling.
Forge is heavily adapted from the excellent Alloy, a more widely used and somewhat more scalable tool. Forge and Alloy even use the same engines! Forge adds a number of features designed to support teaching and learning, including:
#lang froglet
, previously #lang forge/bsl
) for starting out without using relational operators;inst
) for optimization and testing;Forge also uses Sterling, an expanded and scriptable visualizer.
The Forge documentation page is the best resource for Forge syntax, etc.; the Wiki on this repo may not be up to date. Note that the documentation is a living document and work in progress; we will be updating it live as students and other users ask questions.
For broader historical context on Forge, the Alloy documentation or an Alloy demo may be useful. We don't suggest using these as reference for Forge itself, however.
To contribute, fork the repository (or open a new branch if a core contributor) and make your changes. When making a pull request back into main, please prepend the pull request title with one of [patch]
, [minor]
, or [major]
so that the corresponding version number is updated. If no version update is specified, the minor version will be updated automatically.
To install from source, use the following commands. Make sure that you have Racket installed (any version should work, although we suggest the latest: 8.3), and the raco
package manager is in your path. You will also need Java installed (we suggest version 11 or later).
git clone https://github.com/tnelson/Forge
cd Forge
raco pkg install ./forge ./froglet
To update, git pull
the repo and run raco setup forge
to recompile.
Running on the development branch, dev
, requires checkout dev
before installing; this may be unstable, however.
We are grateful for support from the U.S. National Science Foundation (award #2208731) and Brown University.