Evaluates ShotTx on one ShotTx.Benchmark.HolSuite problem and renders the
outcome as a CSV row.
The configuration evaluated is the @params module attribute below. It is
%Parameters{} — the shipped defaults — so the numbers this produces are
what a user gets from a bare ShotTx.Prover.prove/1. Edit the attribute, or
pass a %Parameters{} to evaluate/2, to evaluate a different one.
One problem per BEAM
This module deliberately evaluates a single problem per invocation.
ShotTx keeps shared state across proof sessions — the node-wide
:term_pool (released only by ShotTx.Prover.release_term_pool/0) and the
session registries — and enough of it survives a problem to change the
answer for later ones in the same node: during development of this suite,
one problem returned thm, csa and prover_error depending on what ran
before it. Sweeping the suite inside one node therefore does not measure
the prover; it measures the prover plus its history.
scripts/run_hol_benchmark.sh drives the sweep with a fresh node per
problem for that reason.
Independent of ordering, a handful of problems are genuinely nondeterministic run-to-run — the search is parallel, and which worker reaches a verdict first is a race. Repeat a surprising row before believing it.
CSV columns
id, section, variant, livebook_note, result, time_ms, steps,
rules_total, active_branches_max, branches_closed, branches_saturated,
csp_calls, csp_succeeded, detailsresult—thm|csa|unk|timeout|parser_error|prover_error|hard_timeout.livebook_note— whatstructured_hol_problems.livemdclaims for this problem (THM,Timeout, or empty). Recorded for reference only; it is the author's observation, not ground truth.time_ms— wall-clock milliseconds for parse plus proof search, measured afterwarm_up/1so it excludes module loading.
Summary
Functions
The CSV header line, newline included.
Renders a row from evaluate/2 as a CSV line, newline included.
The parameter configuration this runner evaluates.
Runs one proof attempt so the measured attempt does not pay for loading the prover's modules and warming the JIT — on the order of a third of a second, which would otherwise be charged to every problem.
Functions
@spec csv_header() :: String.t()
The CSV header line, newline included.
Renders a row from evaluate/2 as a CSV line, newline included.
evaluate(problem, params \\ %{__struct__: ShotTx.Data.Parameters, atom_decomposition: true, beta_variant: true, contradiction_agent: true, demodulation: true, equivalence_processing: :bidirectional_imp, finite_o_quantification: true, formula_cost: &ShotTx.Prover.Rules.rule_cost/1, formula_cost_strategy: :default, initial_gamma_limit: 1, initial_prim_limit: 1, instance_based_gamma: true, instance_based_gamma_limit: 0, iterative_deepening: true, model_agent_backend: :none, model_agent_budget_ms: 5000, model_agent_max_frontier: 100, model_agent_max_in_flight: 2, model_agent_min_delta_ms: 200, model_agent_min_frontier: 3, orient: :none, prim_subst_after: 1, prim_subst_batch_size: 8, primitive_substitution: true, progress_interval_ms: 2000, simplification: :deep, suggestion_cascade_ceiling: 3, suggestions_enabled: true, term_order: %{__struct__: ShotTo.Parameters, accessible: :all, basic_sorts: :all, const_precedence: &:erlang.phash2/1, sort_precedence: %{}, status: %{}}, timeout: 5000, unfold_defs: :lazy, unification_depth: 8, worker_pool_size: :auto, worker_yield_limit: 10})
@spec evaluate(ShotTx.Benchmark.HolSuite.problem(), ShotTx.Data.Parameters.t()) :: map()
Proves one problem and returns its row as a map.
@spec params() :: ShotTx.Data.Parameters.t()
The parameter configuration this runner evaluates.
warm_up(params \\ %{__struct__: ShotTx.Data.Parameters, atom_decomposition: true, beta_variant: true, contradiction_agent: true, demodulation: true, equivalence_processing: :bidirectional_imp, finite_o_quantification: true, formula_cost: &ShotTx.Prover.Rules.rule_cost/1, formula_cost_strategy: :default, initial_gamma_limit: 1, initial_prim_limit: 1, instance_based_gamma: true, instance_based_gamma_limit: 0, iterative_deepening: true, model_agent_backend: :none, model_agent_budget_ms: 5000, model_agent_max_frontier: 100, model_agent_max_in_flight: 2, model_agent_min_delta_ms: 200, model_agent_min_frontier: 3, orient: :none, prim_subst_after: 1, prim_subst_batch_size: 8, primitive_substitution: true, progress_interval_ms: 2000, simplification: :deep, suggestion_cascade_ceiling: 3, suggestions_enabled: true, term_order: %{__struct__: ShotTo.Parameters, accessible: :all, basic_sorts: :all, const_precedence: &:erlang.phash2/1, sort_precedence: %{}, status: %{}}, timeout: 5000, unfold_defs: :lazy, unification_depth: 8, worker_pool_size: :auto, worker_yield_limit: 10})
@spec warm_up(ShotTx.Data.Parameters.t()) :: :ok
Runs one proof attempt so the measured attempt does not pay for loading the prover's modules and warming the JIT — on the order of a third of a second, which would otherwise be charged to every problem.