Tptp.Szs.Ontology (Tptp v0.1.0)

Copy Markdown View Source

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. A Success value constitutes an answer and a NoSuccess value its absence. Prefer Success. This is the whole of the ordering the text supports; no NoSuccess value is preferable to any Success value.
  • subontology/1. Within Success, 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.

t()

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

ontology()

@type ontology() :: :success | :no_success | :data

Which of the three SZS ontologies a value belongs to.

subontology()

@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.

t()

@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

count()

@spec count() :: pos_integer()

How many status values there are.

data?(value)

@spec data?(t()) :: boolean()

Whether a value describes a form of data rather than a result.

iex> Tptp.Szs.Ontology.data?(:cnf_refutation)
true

describe(atom)

@spec describe(t()) :: binary()

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."

from_mnemonic(word)

@spec from_mnemonic(binary()) :: {:ok, t()} | {:ambiguous, [t()]} | :error

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

from_status_value(word)

@spec from_status_value(binary()) :: {:ok, t()} | :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

from_string(word)

@spec from_string(binary()) :: {:ok, t()} | :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

mnemonic(atom)

@spec mnemonic(t()) :: binary()

The three-letter mnemonic for a status value.

iex> Tptp.Szs.Ontology.mnemonic(:theorem)
"THM"

name(atom)

@spec name(t()) :: binary()

The OneWord spelling of a status value.

iex> Tptp.Szs.Ontology.name(:counter_satisfiable)
"CounterSatisfiable"

no_success?(value)

@spec no_success?(t()) :: boolean()

Whether a value says why nothing was established.

iex> Tptp.Szs.Ontology.no_success?(:timeout)
true

ontology(atom)

@spec ontology(t()) :: ontology()

Which of the three ontologies a value belongs to.

iex> Tptp.Szs.Ontology.ontology(:theorem)
:success
iex> Tptp.Szs.Ontology.ontology(:timeout)
:no_success

source()

@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.

subontology(atom)

@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

success?(value)

@spec success?(t()) :: boolean()

Whether a value says something was established.

iex> Tptp.Szs.Ontology.success?(:theorem)
true
iex> Tptp.Szs.Ontology.success?(:gave_up)
false

value?(arg1)

@spec value?(term()) :: boolean()

Whether a term is a status value at all.

iex> Tptp.Szs.Ontology.value?(:theorem)
true
iex> Tptp.Szs.Ontology.value?(:banana)
false

values()

@spec values() :: [t()]

Every status value, in the order the page lists them.