SMTS


SMTS is a comprehensive divide-and-conquer distributed/parallel SMT solving framework where the input formula is partitioned into a tree structure in an iterative way. It also supports sharing of lemmas between solvers and allows a combination with portfolio solving. The tool is designed using a client-server architecture with TCP/IP communication, implemented in C++ and Python.

The framework is currently instantiated with OpenSMT as the underlying solver. The project is developed open-source and maintained at Github .

The theoretical aspects and underlying algorithms with parameters are described in [1]. The sections below add details on further optimizations and provide the full list of parameters with their default values.

Since 2021, SMTS consistently dominates in SMT-COMP parallel and cloud tracks in divisions that include the logics QF_UF, QF_LRA and QF_LIA. Refer to the following links at smt-comp.github.io for concrete results in the logics QF_LRA and QF_LIA:

 

Further Partitioning Optimizations

Expansion Boost Factor. In order to make the expansion avoidance more flexible, the partition tree expansion algorithm (Alg. 4, [1]) can further be parametrized by an expansion boost factor b ∈ [-1,1] by changing the expression 1/p in r ≥ 1/p (in line 8) to (1/p)(1 - b2) + (b/2)(1 + b):

  • With b = 0, the parameter has no effect and the expression evaluates to 1/p.
  • With b = -1, the expansion always aborts (at that point).
  • With b = 1, the expansion never aborts (at that point).

The behavior also depends on the number of generated children p. If p = 2, the polynomial simplifies to a linear expression (1 + b)/2, but other values are viable too.

 

List of Parameters

The table below compiles the list of parameters for the partitioning algorithms (Section 3, [1]), sorted in alphabetical order. 

The variables refer to the configuration variables used in server/config/default.py

It also includes parameters that have only been mentioned within optimizations in Section 3 and in the “Further Partitioning Optimizations” section above.

Name Variable Description Default
b ∈ [-1,1] partitioning_boost_factor expansion boost factor 0
dynTSMult > 1 dynamic_node_timeout_factor multiplier of TS when TS is increased 2
dynTSThreshold ≥ 1 dynamic_node_timeout_threshold_factor threshold factor of TS when to increase TS 4
k ≥ 1 max_tree_size_factor maximum factor of the size of the tree 2
minPortfolio ≥ 1 portfolio_min minimum size of internal portfolios 1
nodeTSThreshold ≥ 1 n_timeouts_to_count_partition |tree| counts only nodes with node.time < . TS 4
p ≥ 2 partition_policy #created child nodes when partitioning 2
T> 0 node_timeout solver timeout 32

Published papers:

  1. Parallel SMT Solving via Iterative Tree Partitioning Tomáš Kolárik, Antti E. J. Hyvärinen, Seyedmasoud Asadzadeh , Natasha Sharygina, TACAS 2026: 130-149