For now, a purely client-side reimplementation of Logitext. This is an implementation of the intuitionistic system LJ. For an implementation of the classical LK, see here.

As you work the URL changes and you can give someone else your current URL to give them a link to the derivation exactly as you currently have it.

The system implements LJ. It lacks Cut, so you can only make cut-free proofs (but Gentzen's Hauptsatz says that's all you need [modulo an exponential difference in size...]). Contraction is also limited to certain cases with quantifiers. There should never be any benefit (or at least need) to perform contraction otherwise.

If you find you can repeatably prove something that is false, contact me.

The parser isn't very friendly yet. Below is the BNF, but basically usual ASCII formulations of logical symbols should work. You will need to fully parenthesize the result. You can use y_0 to get y0.

    Term ::= NAME (LPAREN TermList RPAREN)?
    TermList ::= Term (COMMA Term)*

    Formula ::= AtomicFormula FormulaTail
              | UnaryConnective AtomicFormula
              | Quantifier NAME PERIOD AtomicFormula
    AtomicFormula ::= NAME (LPAREN TermList RPAREN)?
                    | NullaryConnective
                    | LPAREN Formula RPAREN
    FormulaTail ::= BinaryConnective AtomicFormula
                  | EMPTY
    NullaryConnective ::= TOP | BOTTOM
    UnaryConnective ::= NOT
    BinaryConnective ::= AND | OR | IMPLIES
    Quantifier ::= FORALL | EXISTS

    Goal ::= FormulaList TURNSTILE Formula
    FormulaList ::= Formula (COMMA Formula)*
                  | EMPTY

    NAME: /[a-zA-Z][a-zA-Z0-9]*(_[0-9]+)?/
    LPAREN: /\(/
    RPAREN: /\)/
    COMMA: /,/
    PERIOD: /\./
    TURNSTILE: /\|-|⊢/
    BOT: /false|_\|_|⊥/i
    TOP: /true|⊤/i
    NOT: /~|¬/
    AND: /\/\\|∧/
    OR: /\\\/|∨/
    IMPLIES: /->|=>|⇒|→/
    FORALL: /forall|∀/i
    EXISTS: /exists|∃/i