The SZS status values, transcribed from https://szs.tptp.org.
This module is written by hand and maintained by hand. 112 values across three ontologies:
:success— 53 values:no_success— 29 values:data— 30 values
Every atom is created at compile time, so from_string/1 and its counterparts
convert untrusted prover output to an atom without String.to_atom/1 being
reachable from input. This is a security property rather than a stylistic one;
see Tptp.Token for the same constraint and the Credo check enforcing it.
Why this is not generated
The grammar is generated because the BNF is a formal document that changes with every TPTP release and is too large to transcribe reliably. The SZS ontology is neither. It is a prose page of 112 entries that has changed once in this library's lifetime — a doubled letter in one name — and scraping it cost a vendored copy of a Google Sites document, an HTML extractor written against that document's markup, and a generator, all to reproduce a table that can simply be written down. Amending an entry by hand when the page changes is less work than maintaining the machinery that reads it, and is reviewable in the diff.
What the machinery did enforce is kept as tests rather than lost: that every BNF
<status_value> resolves here to a success-ontology mnemonic, that names and
atoms round-trip, and that every value can be written and read back. See
Tptp.SzsTest.
Each value's describe/1 text is quoted from the page. NOTICE carries the
attribution the TPTP's terms require for it.
The isa hierarchy is not modelled
There is no parent/1 or descendant?/2. The SZS ontologies are hierarchies —
EquivalentTheorem isa Equivalent isa Satisfiable — but the hierarchy is
published only as three diagrams (Success.png, NoSuccess.png and Data.png
at the URL above) and does not appear in the text of the page. Transcribing a
diagram by inspection would introduce unverifiable relations into a library
whose contract is fidelity to its sources. What is provided is the partition
the text does state: the ontology a value belongs to, and its subontology
within Success. Publication of a machine-readable ontology would allow the
hierarchy to be added.
Ordering
There is no compare/2 and no precedence table, for the same reason: the page
publishes none. A consumer comparing two prover results nonetheless requires a
basis for the comparison, and an invented ranking admits precedence inversions,
in which a Timeout from the longest-running system outranks a Theorem. Two
published properties suffice:
success?/1. ASuccessvalue constitutes an answer and aNoSuccessvalue its absence. PreferSuccess. This is the whole of the ordering the text supports; noNoSuccessvalue is preferable to anySuccessvalue.subontology/1. WithinSuccess, this identifies the group a value belongs to, allowing two answers to be compared as claims of the same or different kinds without assuming a strength ordering.
A further consideration concerns provenance. An explicit % SZS status line is
the system's own statement of its conclusion, whereas an implementation-specific
output pattern is an inference drawn by the reader. Prefer the line.
Tptp.Szs.status/1 returns :none where a run emitted none, which is the
condition under which a pattern may be used.
Case sensitivity
SAT is Satisfiable and Sat is Saturation, so from_mnemonic/1 is case
sensitive. The lower-case three-letter form occurring inside a TPTP
status(...) annotation has a separate entry point, from_status_value/1,
which searches the success ontology alone, that being the only source
<status_value> draws from, as the test suite verifies against the BNF.
Ass and ASS are a second such pair: Ass is Assurance in the data
ontology and ASS is Assumed in the no-success ontology.
Arguments of Assumed
Every mnemonic on the page is three letters except one. Assumed is
ASS(U,S): the success value S was assumed because the actual result is
unknown for the no-success reason U, where U is drawn from the subontology
beneath Unknown. mnemonic(:assumed) returns "ASS" and from_mnemonic/1
accepts "ASS" alone, since a pair of arguments is not a member of a closed
set of atoms.
A consumer reading such a status line must decompose it: take the text
preceding the first (, resolve it here, and resolve the two arguments, which
are themselves mnemonics, with further calls. The page does not state how the
form is written in a % SZS status line, and the TPTP BNF cannot express it:
<status_value> is a list of plain words, so status(ass(...)) has no
derivation. Treat ASS(...) as a form to recognise rather than to emit.
Summary
Types
Which of the three SZS ontologies a value belongs to.
The top-level grouping a value sits under.
One SZS status value. A closed set of 112 compile-time atoms.
Functions
How many status values there are.
Whether a value describes a form of data rather than a result.
What the page says a status value means, in its own words.
Turn a three-letter mnemonic into an atom. Case sensitive, because case is
meaningful: SAT is Satisfiable and Sat is Saturation.
Turn the lower-case mnemonic inside a TPTP status(...) annotation into an atom.
Turn a OneWord status value into an atom, without creating one.
The three-letter mnemonic for a status value.
The OneWord spelling of a status value.
Whether a value says why nothing was established.
Which of the three ontologies a value belongs to.
The page these values are transcribed from.
The top-level grouping a value sits under.
Whether a value says something was established.
Whether a term is a status value at all.
Every status value, in the order the page lists them.
Types
@type ontology() :: :success | :no_success | :data
Which of the three SZS ontologies a value belongs to.
@type subontology() ::
:success
| :semantic_success
| :type_check_success
| :verify_success
| :no_success
| :data
The top-level grouping a value sits under.
Only Success has subontologies; the other two sections of the page are flat,
so their values report the section itself.
@type t() ::
:success
| :semantic_success
| :unsatisfiability_preserving
| :satisfiability_preserving
| :tautology_preserving
| :equi_satisfiable
| :equi_tautologous
| :model_extending
| :satisfiable
| :finitely_satisfiable
| :finite_theorem
| :theorem
| :satisfiable_axioms_theorem
| :equivalent
| :tautologous_conclusion
| :weaker_conclusion
| :equivalent_theorem
| :tautology
| :weaker_tautologous_conclusion
| :weaker_theorem
| :finite_tautology
| :counter_unsatisfiability_preserving
| :counter_satisfiability_preserving
| :counter_tautology_preserving
| :equi_counter_satisfiable
| :equi_counter_tautologous
| :counter_model_extending
| :counter_satisfiable
| :finitely_counter_satisfiable
| :finite_counter_theorem
| :counter_theorem
| :satisfiable_axioms_counter_theorem
| :counter_equivalent
| :unsatisfiable_conclusion
| :weaker_counter_conclusion
| :equivalent_counter_theorem
| :unsatisfiable
| :weaker_unsatisfiable_conclusion
| :weaker_counter_theorem
| :finitely_unsatisfiable
| :contradictory_axioms
| :satisfiable_conclusion_contradictory_axioms
| :satisfiable_counter_conclusion_contradictory_axioms
| :tautologous_conclusion_contradictory_axioms
| :weaker_conclusion_contradictory_axioms
| :unsatisfiable_conclusion_contradictory_axioms
| :no_consequence
| :type_check_success
| :type_check_partial
| :type_checked_complete
| :verify_success
| :verified_good
| :verified_bad
| :no_success
| :unknown
| :stopped
| :in_progress
| :not_tried
| :not_tried_yet
| :error
| :forced
| :gave_up
| :os_error
| :input_error
| :syntax_error
| :semantic_error
| :type_error
| :unsemantic
| :usage_error
| :user
| :resource_out
| :timeout
| :cpu_timeout
| :wc_timeout
| :memory_out
| :incomplete
| :inappropriate
| :incorrect
| :assumed
| :open
| :not_verified
| :failed_verified
| :data
| :logical_data
| :solution
| :proof
| :interpretation
| :list_of_formulae
| :derivation
| :refutation
| :cnf_refutation
| :model
| :domain_interpretation
| :domain_model
| :finite_interpretation
| :finite_model
| :infinite_interpretation
| :infinite_model
| :herbrand_interpretation
| :herbrand_model
| :formula_herbrand_interpretation
| :formula_herbrand_model
| :saturation
| :not_a_solution
| :assurance
| :incomplete_proof
| :incomplete_interpretation
| :non_logical_data
| :comment
| :free_text
| :verification
| :none
One SZS status value. A closed set of 112 compile-time atoms.
Functions
@spec count() :: pos_integer()
How many status values there are.
Whether a value describes a form of data rather than a result.
iex> Tptp.Szs.Ontology.data?(:cnf_refutation)
true
What the page says a status value means, in its own words.
iex> Tptp.Szs.Ontology.describe(:theorem)
"All models of Ax are models of C."
Turn a three-letter mnemonic into an atom. Case sensitive, because case is
meaningful: SAT is Satisfiable and Sat is Saturation.
A mnemonic the page reuses answers {:ambiguous, values} rather than picking
one — IIn is both InfiniteInterpretation and IncompleteInterpretation.
iex> Tptp.Szs.Ontology.from_mnemonic("THM")
{:ok, :theorem}
iex> Tptp.Szs.Ontology.from_mnemonic("IIn")
{:ambiguous, [:infinite_interpretation, :incomplete_interpretation]}
iex> Tptp.Szs.Ontology.from_mnemonic("thm")
:error
Turn the lower-case mnemonic inside a TPTP status(...) annotation into an atom.
<status_value> in the BNF is the success ontology's mnemonic, lower-cased, and
mix tptp.gen checks on every run that all 34 of them are present here.
iex> Tptp.Szs.Ontology.from_status_value("thm")
{:ok, :theorem}
iex> Tptp.Szs.Ontology.from_status_value("prf")
:error
Turn a OneWord status value into an atom, without creating one.
iex> Tptp.Szs.Ontology.from_string("Theorem")
{:ok, :theorem}
iex> Tptp.Szs.Ontology.from_string("NotAStatus")
:error
The three-letter mnemonic for a status value.
iex> Tptp.Szs.Ontology.mnemonic(:theorem)
"THM"
The OneWord spelling of a status value.
iex> Tptp.Szs.Ontology.name(:counter_satisfiable)
"CounterSatisfiable"
Whether a value says why nothing was established.
iex> Tptp.Szs.Ontology.no_success?(:timeout)
true
Which of the three ontologies a value belongs to.
iex> Tptp.Szs.Ontology.ontology(:theorem)
:success
iex> Tptp.Szs.Ontology.ontology(:timeout)
:no_success
@spec source() :: binary()
The page these values are transcribed from.
The page carries no version number, so there is nothing finer to report. The transcription was last checked against it on 2026-09-10.
@spec subontology(t()) :: subontology()
The top-level grouping a value sits under.
iex> Tptp.Szs.Ontology.subontology(:theorem)
:semantic_success
iex> Tptp.Szs.Ontology.subontology(:verified_good)
:verify_success
Whether a value says something was established.
iex> Tptp.Szs.Ontology.success?(:theorem)
true
iex> Tptp.Szs.Ontology.success?(:gave_up)
false
Whether a term is a status value at all.
iex> Tptp.Szs.Ontology.value?(:theorem)
true
iex> Tptp.Szs.Ontology.value?(:banana)
false
@spec values() :: [t()]
Every status value, in the order the page lists them.