ASSESS
Assess (Automated Synthesizer for SElf-Stabilizing Systems) implements a set of SMT-based techniques to synthesize distributed self-stabilizing programs. It takes as input (1) the topology of the distributed system in terms of read/write restrictions of processes, (2) the legitimate behavior of the system in the absence of faults, and (3) a set of high-level requirements such as the timing model (asynchronous or synchronous), and stabilization type (weak, strong, or monotonic). The legitimate behavior is specified either explicitly as a state predicate LS, or implicitly as a set of LTL formulas. The tool returns a finite-state self-stabilizing protocol as a set of guarded commands that realize the input specification. The synthesis engine of ASSESS is SMT-based and the tool supports the SMT-solver Z3 and the model finder Alloy. The internal algorithm are sound and complete, meaning that a synthesized solution by Assess is correct by construction and if the tool fails to synthesize a solution, then there does not exist one.
RiTHM
The tool RiTHM (Runtime Time-triggered Heterogeneous Monitoring) takes a C program under inspection and a set of LTL properties as input and generates an instrumented C program that is verified at run time by a time-triggered monitor. The output C program can be instrumented in two ways: (1) it is monitored in a time-triggered fashion with a
fixed polling period, or (2) the monitor is augmented with PID or fuzzy
controllers that ensure minimum variation in monitor polling period while maximizing memory utilization. In both cases, the monitor is invoked in a time-triggered fashion, ensuring that the states of the program can be reconstructed at each invocation by using efficient instrumentation. The monitor verification decision procedure is sound and complete and takes advantage of the GPU many-core technology to speedup monitoring and reduce the runtime overhead.
SYCRAFT
Sycraft (SYmboliC synthesizeR and Adder of Fault-Tolerance) is a tool for transforming distributed fault-intolerant programs to distributed fault-tolerant programs. In Sycraft, a distributed fault-intolerant program is specified in terms of a set of processes and an invariant. Each process is specified as a set of actions in a guarded command language, a set of variables that the process can read, and a set of variables that the process can write. The issue of distribution is addressed in shared-memory model where processes are constrained by their ability in reading and writing program variables. Given a set of fault actions and a safety specification, the tool synthesizes a fault-tolerant program via a symbolic implementation of respective synthesis algorithms. Sycraft has successfully been used to synthesize some of the classic protocols in the literature of fault-tolerant computing in distributed systems (e.g., Byzantine agreement, token ring, etc.).