Enter a formula of standard propositional, predicate, or modal logic. The page will try to find either a countermodel or a tree proof (a.k.a. semantic tableau).
- ∃y∃z∀x((Fx→Gy)∧(Gz→Fx)) → ∀x∃y(Fx↔Gy)
- N(0) ∧ ∀i(N(i)→N(s(i))) → N(s(s(s(0))))
- ∀y∃xFxy → ∃x∀yFxy
- p∨q, ¬p |= q
To enter logic symbols, use the buttons above the text field, or type ~ for ¬, & for ∧, v for ∨, -> for →, <-> for ↔, (Ax) for ∀x, (Ex) for ∃x,  for □, <> for ◇. You can also use LaTeX commands.
If you want to test an argument with premises and conclusion, use |= to separate the premises from the conclusion, and use commas to separate the premises. See the last example in the list above.
Syntax of formulas
Any alphabetic character is allowed as a propositional constant, predicate, individual constant, or variable. The character may be followed by digits as indices. Predicates and function terms must be in prefix notation. Function terms must have their arguments enclosed in brackets. So F2x17, Rab, R(a,b), Raf(b), F(+(a,b)) are ok, but not Animal(Fred), aRb, or F(a+b). (In fact, these are also ok, but they won't be parsed as you might expect.) The order of precedence among connectives is ¬, ∧, ∨, →, ↔. Association is to the right. Quantifier symbols in sequences of quantifiers must not be omitted: write ∀x∀yRxy instead of ∀xyRxy.
Besides classical propositional logic and first-order predicate logic (with functions, but without identity), a few normal modal logics are supported. If you enter a modal formula, you will see a choice of how the accessibility relation should be constrained. For modal predicate logic, constant domains and rigid terms are assumed.
The source is on github.
Comments, bug reports and suggestions are always welcome: