Features and limits

Write a rule, inspect its inputs and output, simplify it, or compare it with another rule. The sections below explain the available analyses and when their limits matter.

Expression language

FeatureUse and limits
Boolean expressionsUse case-sensitive names, true/false or 1/0, and NOT, AND, OR, XOR, implication (->) and equivalence (<->). Use parentheses to group terms.
Named bindingsWrite F = A & B; and refer to F in later bindings. End each binding with a semicolon. Forward and cyclic references are not supported.
Don't-caresUse the ? suffix when either output is acceptable for Simplify. The dc Inputs control affects only the constrained Result summary.
CommentsUse # or // for a line comment and /* ... */ for a block comment. Block comments do not nest.
PredicatesCompare one variable with a literal, such as age >= 18, or a literal set, such as region in {CA, US}. String comparisons support equality and set membership, not numeric ordering.

Analysis panels

FeatureUse and limits
GraphView the active binding or choose Show all for connected bindings. Pan, zoom, and inspect how the expression is connected.
Truth TableInspect every combination of Boolean inputs and predicate columns. The row count doubles with each column; keep expressions small. Predicate columns can include combinations that are impossible for the underlying values.
Decision TableView compact rules for the expression. Predicate columns describe conditions; use Predicate Variables to inspect value buckets.
SimplifyMinimise a Boolean expression as a two-level sum of products, for up to 12 atoms. Predicate reasoning uses Z3 when loaded; it may retain equivalent terms rather than find a fully minimal form. Expand Why? to follow the reasoning.
RewriteConvert to AND-of-ORs, OR-of-ANDs, or negation normal form; apply De Morgan, eliminate implications, factor terms, or read pseudocode.
K-mapExplore a Gray-coded grid for 2–6 variables. Outside that range, use Truth Table or Simplify.
CoverageGenerate branch, MC/DC, pairwise, prime-implicant, or full truth-table test vectors. Read the generated vectors and coverage summary for the selected criterion.
Equiv DiffCompare two expressions. Row-by-row comparison is available for up to 14 pure Boolean variables. Larger comparisons return a verdict. Boolean differences include a distinguishing input; integer values from SMT counterexamples are not displayed.
NotebookSave and load expressions on this browser. Export entries you want to retain before clearing browser data.

Predicate types and limits

FeatureUse and limits
Types and rangesClick + beside a predicate variable to set its type, numeric range, or enum values. These declarations describe value buckets. Put required integer bounds in the expression itself.
Numeric and set reasoningSMT/Z3 reasons about integer comparisons and sets of integer literals. String and enum predicates remain independent Boolean inputs, even with Z3 loaded. Use integer literals for SMT; decimal comparisons do not provide real-number reasoning. QM and Boolean-only SAT treat all predicates as independent inputs.
Unsupported syntaxCross-variable arithmetic such as a + b > c, set union and intersection, optimisation objectives, and quantified formulas (∀, ∃) are not supported. Use the existing satisfiability and tautology checks for Boolean questions.

Solver

FeatureUse and limits
Automatic selectionQM handles small Boolean simplifications. Equiv Diff selects SAT for more than 14 pure Boolean variables and SMT for predicates. The header controls simplification separately.
Z3 downloadZ3 loads when requested or needed for SMT. Its WebAssembly file is about 33.7 MB decoded and about 7.6 MB over a gzip-compressed connection. It requires a browser with cross-origin isolation and shared-memory support.
Solving before Z3 is readyUntil Z3 is available, Boolean-only solving can treat predicates as independent inputs. Wait for Solver: SMT ✓ before relying on integer comparisons or numeric-set relationships.

Export and import

FeatureUse and limits
CodeExport JavaScript, Python, C, SQL, GitHub Actions conditions, and Lisp expressions. Coverage vectors can also be copied as code.
Graph imagesDownload PNG at screen resolution or SVG with the current theme colours.
ImportImport supported Boolean expressions from JavaScript, Python, SQL, or GitHub Actions. Arbitrary programs and idiomatic language constructs may not parse; inspect the loaded expression before using it.

Saving and sharing

FeatureUse and limits
Share linkThe link restores expression source, display names, and declared variable types, ranges, and enum values. See Sharing for the fields carried by the link.
Local storageSaved expressions and preferences stay in this browser. Export anything you need to retain before clearing browser data.

Interaction and browser support

FeatureUse and limits
Phone and tabletUse the editor, examples, result views, and share controls in the narrow layout. Pan and zoom the graph on touch; edit the expression in the text editor.
KeyboardOpen command search with ⌘K or Ctrl+K. See keyboard shortcuts for panel navigation and applying results.
Language and themeChoose Basic for plain-language labels or Advanced for specialised terms. Teaching mode reveals explanations from info buttons. Choose a light, dark, or system theme.
Nonvisual accessUse the text editor, Truth Table, Decision Table, and copied results to inspect the expression without the visual graph. Graph relationships require visual inspection.
Offline useAfter an online visit, cached app files support offline editing and Boolean analysis. Z3 is a separate download and may be unavailable if it has not been cached. Connect before starting an SMT task.
Install appUse the install control where the browser offers it. On Safari, use Add to Home Screen from the share menu.

Choose a task

Follow the how-to guide to simplify a rule, inspect inputs, compare expressions, or share your work.