Forge: A Tool and Language for Teaching Formal Methods
See the code
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 forge/froglet) 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). Clone this repo, and then:
cd Forge
raco pkg install ./forge
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.
forge subdirectory contains the forge Racket package.
#lang forge) is defined in the package root (main.rkt);#lang forge/temporal) is defined in temporal/main.rkt.forge/examples/ subdirectory contains a set of curated examples that can be run without reference to the Forge book or other resources.OLD and Notes subdirectories contain old code snippets and developer notes, much of which is outdated but retained for reference. We are in the process of moving these to a different respository.We are grateful for support from the U.S. National Science Foundation (award #2208731) and Brown University.
Racket
51.9%
JavaScript
18.2%
GLSL
14.9%
Java
9.3%
SMT
3.1%
Forge: A Tool and Language for Teaching Formal Methods
See the code
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 forge/froglet) 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). Clone this repo, and then:
cd Forge
raco pkg install ./forge
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.
forge subdirectory contains the forge Racket package.
#lang forge) is defined in the package root (main.rkt);#lang forge/temporal) is defined in temporal/main.rkt.forge/examples/ subdirectory contains a set of curated examples that can be run without reference to the Forge book or other resources.OLD and Notes subdirectories contain old code snippets and developer notes, much of which is outdated but retained for reference. We are in the process of moving these to a different respository.We are grateful for support from the U.S. National Science Foundation (award #2208731) and Brown University.
Racket
51.9%
JavaScript
18.2%
GLSL
14.9%
Java
9.3%
SMT
3.1%