A web-based educational environment for learning and practicing propositional resolution through interactive proof construction.
The application supports both automatic and learner-directed resolution. It is designed to provide immediate feedback during proof construction while keeping the individual reasoning steps visible and inspectable.
The application runs entirely in a web browser:
https://tiveqq.github.io/resolution-method/static/index.html
No installation is required to use the deployed version.
Resolution is commonly introduced through manually constructed proofs. During such exercises, students must correctly transform formulas, identify resolvable clauses, apply the resolution rule, and keep track of the resulting derivation.
This project provides an interactive environment in which these steps can be explored with immediate validation.
The application combines two complementary workflows:
The focus of the project is on the design, functionality, and usability of the tool as an environment for practicing propositional resolution.
The application provides syntax-aware input for propositional formulas and supports both textual and mathematical notation for logical operators.
Supported concepts include:
⊤) and falsity (⊥);Input is parsed and validated before proof generation.
Formulas are transformed into conjunctive normal form (CNF) before resolution is applied.
The application exposes the transformation process so that the intermediate representation used by the resolution procedure can be inspected.
In automatic mode, the application presents the validity-refutation workflow step by step:
Interactive mode allows learners to construct a resolution proof themselves.
Users can:
This mode is intended to support guided trial-and-error exploration rather than simply displaying a completed proof.
The application supports selectable resolution strategies, including:
These strategies influence the selection of clauses during proof construction and search.
Resolution derivations can be inspected as:
The proof-tree visualization supports navigation of larger derivations and interactive node positioning.
Results can be exported in several formats:
The interface is designed to adapt to both desktop and narrower screen layouts.
A typical workflow is:
Propositional formula
|
v
Syntax validation
|
v
Formula representation
|
v
CNF transformation
|
v
Set of clauses
|
+-----------------------+
| |
v v
Automatic resolution Interactive resolution
| (learner-selected steps)
| |
+-----------+-----------+
|
v
Resolution proof
|
+-----+-----+
| |
v v
Tree Table
The application is implemented as a client-side web application.
The main technologies used by the project include:
The processing pipeline operates in the browser without requiring a server-side proof-processing stage.
The application is implemented as a client-side JavaScript project. Source modules are bundled with Webpack, while the propositional-logic lexer and parser are generated from an ANTLR grammar.
To build the project locally, install:
Clone the repository and enter the project directory:
git clone https://github.com/tiveqq/resolution-method.git
cd resolution-method
Install the project dependencies defined in package.json:
npm install
The main parts of the project are organized as follows:
resolution-method/
├── antlr-generated/
│ ├── PropositionalLogic.g4
│ ├── PropositionalLogicLexer.js
│ ├── PropositionalLogicParser.js
│ └── PropositionalLogicVisitor.js
├── src/
│ ├── change-language.js
│ ├── cnf-converter.js
│ ├── index.js
│ ├── monaco-editor.js
│ ├── proof-tree.js
│ ├── resolution-method.js
│ └── ui.js
├── static/
│ ├── index.html
│ └── style.css
└── webpack.config.js
The directories have the following roles:
src/ contains the main application logic, including formula processing,
CNF conversion, resolution algorithms, proof visualization, Monaco Editor
integration, and user-interface logic.antlr-generated/ contains the propositional-logic grammar and the lexer,
parser, and visitor generated by ANTLR.static/ contains the browser entry point and application styles.webpack.config.js defines how the JavaScript modules are bundled for use
in the browser.Webpack bundles the application modules into the JavaScript file used by the browser.
After installing the dependencies, run:
npx webpack
Webpack reads webpack.config.js and generates the bundled output used by
static/index.html.
If Webpack is installed globally, the equivalent command is:
webpack
After building the project, serve the repository using a local HTTP server. For example, with Python:
python3 -m http.server 8000
Then open:
http://localhost:8000/static/index.html
Using a local HTTP server is recommended instead of opening index.html
directly from the filesystem, because the application loads JavaScript
modules and other browser resources.
The propositional-logic grammar is defined in:
antlr-generated/PropositionalLogic.g4
The repository already contains the generated lexer, parser, and visitor, so ANTLR regeneration is not required for a normal build.
Regenerate these files only when the grammar is modified.
Install the ANTLR JavaScript tooling if needed:
npm install antlr4
Then regenerate the JavaScript parser from the grammar using ANTLR with the JavaScript target.
For example, from the directory containing
PropositionalLogic.g4:
antlr4 -Dlanguage=JavaScript -visitor PropositionalLogic.g4
This regenerates the parser-related files used by the application, including the lexer, parser, and visitor.
After changing the grammar, rebuild the browser bundle:
npx webpack
For most changes to the application, the development cycle is:
Edit source files in src/
|
v
Run npx webpack
|
v
Serve the repository locally
|
v
Open static/index.html in a browser
|
v
Test the application
When PropositionalLogic.g4 is changed, regenerate the ANTLR files before
running Webpack.
The application is divided into several modules:
cnf-converter.js — formula representation, CNF conversion, simplification,
and clause extraction.resolution-method.js — resolution rule and resolution strategies.index.js — main application logic, input processing, proof generation,
interactive resolution, undo/redo, DIMACS handling, and explanations.proof-tree.js — proof-tree construction, D3.js visualization, SVG export,
and LaTeX/TikZ generation.monaco-editor.js — Monaco Editor initialization, syntax assistance, and
parser diagnostics.ui.js — dynamic interface elements, resolution tables, clause selection,
and LaTeX output.change-language.js — interface localization.This project is released under the MIT License.
See LICENSE for details.