Skip to main content

Introduction to TPTP & Automated Reasoning

Welcome! This guide introduces the TPTP language (Thousands of Problems for Theorem Provers) and lets you run problems live using the Vampire theorem prover below.


What is TPTP?​

TPTP is a standard language and library for sharing logic problems. In the FOF (First-Order Form) dialect, each statement is a named formula with a role:

fof(name, role, formula).

Common roles

  • axiom: Assumed to be true (background knowledge)
  • hypothesis: Optional premise
  • conjecture: The statement we want to prove (or refute)

Quantifiers & Connectives (FOF)

  • Universal: ! [X] : φ
  • Existential: ? [X] : φ
  • Connectives: & (and), | (or), ~ (not), => (implies), <=> (iff)

Example: Who Killed Agatha? (PUZ001+1)​

Here’s a classic TPTP puzzle. Read it, then run it below in Vampire.

% Minimal PUZ001+1.p
fof(someone_killed_agatha, axiom, ( ? [X] : ( lives(X) & killed(X,agatha) ) )).
fof(agatha_lives, axiom, lives(agatha)).
fof(butler_lives, axiom, lives(butler)).
fof(charles_lives, axiom, lives(charles)).
fof(only_three, axiom, ( ! [X] : ( lives(X) => (X = agatha | X = butler | X = charles) ) )).
fof(killer_hates, axiom, ( ! [X,Y] : ( killed(X,Y) => hates(X,Y) ) )).
fof(killer_not_richer, axiom, ( ! [X,Y] : ( killed(X,Y) => ~ richer(X,Y) ) )).
fof(charles_rule, axiom, ( ! [X] : ( hates(agatha,X) => ~ hates(charles,X) ) )).
fof(agatha_hates_all_but_butler, axiom, ( ! [X] : ( X != butler => hates(agatha,X) ) )).
fof(butler_hates_not_richer, axiom, ( ! [X] : ( ~ richer(X,agatha) => hates(butler,X) ) )).
fof(butler_hates_agatha_hates, axiom, ( ! [X] : ( hates(agatha,X) => hates(butler,X) ) )).
fof(no_total_haters, axiom, ( ! [X] : ? [Y] : ~ hates(X,Y) )).
fof(agatha_ne_butler, axiom, agatha != butler).
fof(goal, conjecture, killed(agatha,agatha)).

Try it now​

Ready.

Tips for Writing Your Own Problems​

  • Keep function and predicate names lowercase (lives(agatha)), variables uppercase (X, Y).
  • Each formula ends with a period.
  • Start small: add a few axioms, then a single conjecture.
  • If Vampire times out, try adding --time_limit 2 in the arguments box.

Next Steps​

  • Learn more: FOF syntax essentials
  • Add arithmetic or equality reasoning
  • Explore proof outputs and strategies (--proof on, --show_options on)