Inconsistent assumptions make every test pass
A rule checked under assumptions that cannot all hold passes every test for a bad reason. Below, A AND B under the assumptions A and NOT A is reported both always true and always false, each verdict marked vacuous and the scope marked inconsistent.
Assumptions restrict the rows a check considers to the admissible ones. The two assumptions here, “A is always true” and “A is never true”, leave no admissible row. With nothing to examine, the tautology check finds no counterexample and reports “holds”; the contradiction check finds no witness and also reports “holds”; the satisfiability check finds no witness and reports “violated”. Every one of them carries the vacuous flag, and the scope line says the assumptions are inconsistent.
The engine does not hide this behind a green tick because the honest-results rule requires that a vacuous verdict be labelled. The flag is the signal to look at the assumptions, not the rule. In practice inconsistency arrives gradually: one assumption added for a special case, another added months later that contradicts it, and from then on every check of that model passes.
The remedy is to check the assumptions themselves for consistency, which the engine does as part of every scoped check, and to keep assumptions few and documented. The vacuous-truth page shows the same effect with premises instead of assumptions, and the glossary entry on assumptions explains the scope they create.
rule := A AND B · output Truth table
| # | A | B | rule | k1 | k2 | Scope |
|---|---|---|---|---|---|---|
| 0 | FALSE | FALSE | FALSE | FALSE | TRUE | excluded |
| 1 | FALSE | TRUE | FALSE | FALSE | TRUE | excluded |
| 2 | TRUE | FALSE | FALSE | TRUE | FALSE | excluded |
| 3 | TRUE | TRUE | TRUE | TRUE | FALSE | excluded |
Plain-language reading
Beginnerrule is true exactly when both A and B are true.
In every other case, rule is false.
About the operators:
- AND is true only when all of its parts are true.
Intermediaterule is true exactly when both A and B are true.
In every other case, rule is false.
Advancedrule is true exactly when both A and B are true [conjunction ∧].
In every other case, rule is false.
Formal notation: A ∧ B
The common slip
Adding an assumption to make a stubborn check pass. If the new assumption contradicts an existing one, every check passes from then on, and the vacuous flag is the only sign.
Questions
How can a formula be both a tautology and a contradiction?
Only over an empty set of rows. Both verdicts are statements about every admissible row, and there are none, so both are vacuously true. The flags on the verdicts say exactly that.
Does the engine still show the full truth table?
Yes, with every row marked out of scope. A table where no row is in scope is the visual form of the same warning.
Related
Worked examples
- BCD digit greater than five: four-variable K-map with don’t-cares
- Leap year rule: (div4 AND NOT div100) OR div400
Tools
- Logical equivalence checker: two expressions, exact verdict, counterexample
- Truth table generator: any Boolean expression, up to 12 variables, with intermediate columns
See also
- Vacuous truth: a property that holds because nothing satisfies the assumptions
- Assumption (domain constraint): meaning and examples
- Vacuous truth in logic: meaning and examples
- Leap year rule: (div4 AND NOT div100) OR div400
- BCD digit greater than five: four-variable K-map with don’t-cares
- A review checklist for decision rules (for analysts and reviewers)
Pitfalls
Generated from the Tangibool engine, semantics tangibool-semantics/1, engine 1.0.0, build . Every table, map, simplification and verdict on these pages was computed by the Tangibool engine when the site was built, and every claim was re-checked by the same exact checker the app uses. Limits are stated where they apply. © 2026 Foreranger LTD.