pub struct ACSModelChecker {
pub(crate) ta_spec: Vec<(DisjunctionTargetConfig, Vec<IntervalThresholdAutomaton>)>,
pub(crate) ctx: SMTSolverBuilder,
}Expand description
Counter system based model checker
This crate implements a counter system based model checker as described
in the paper
“Parameterized Verification of Round-based Distributed Algorithms via Extended Threshold Automata”.
This model checker will construct the explicit counter system (ACS in the
paper), starting from potential error states and checking whether an initial
state is reachable.
If a path is found, the SMT checker will be used to check whether the path
is spurious.
Note that this model checker does not support “reachability” specifications, i.e. specifications, that require a location to be not covered by any process.
Fields§
§ta_spec: Vec<(DisjunctionTargetConfig, Vec<IntervalThresholdAutomaton>)>Threshold automata and specifications to check
ctx: SMTSolverBuilderSMT solver builder used for spurious checks
Trait Implementations§
Source§impl Clone for ACSModelChecker
impl Clone for ACSModelChecker
Source§fn clone(&self) -> ACSModelChecker
fn clone(&self) -> ACSModelChecker
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ACSModelChecker
impl Debug for ACSModelChecker
Source§impl ModelChecker for ACSModelChecker
impl ModelChecker for ACSModelChecker
Source§type ModelCheckerContext = SMTSolverBuilder
type ModelCheckerContext = SMTSolverBuilder
Context for the model checker which for example includes interfaces to
create solvers or BDD libraries
Source§type ModelCheckerOptions = Option<()>
type ModelCheckerOptions = Option<()>
Options for the model checker
Source§type SpecType = ReachabilityProperty
type SpecType = ReachabilityProperty
Internal specification representation the model checker uses
Source§type ThresholdAutomatonType = IntervalThresholdAutomaton
type ThresholdAutomatonType = IntervalThresholdAutomaton
Internal representation of a threshold automaton the model checker works
on
Source§type InitializationError = ACSModelCheckerInitializationError
type InitializationError = ACSModelCheckerInitializationError
Error type for errors that can occur during initialization of the model
checker
Source§type ModelCheckingError = DummyError
type ModelCheckingError = DummyError
Error type for errors that can occur during the run of the model checker
Source§fn initialize(
_mode: Self::ModelCheckerOptions,
ta_spec: Vec<(<<Self as ModelChecker>::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::InternalSpecType, Vec<Self::ThresholdAutomatonType>)>,
ctx: Self::ModelCheckerContext,
) -> Result<Self, Self::InitializationError>
fn initialize( _mode: Self::ModelCheckerOptions, ta_spec: Vec<(<<Self as ModelChecker>::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::InternalSpecType, Vec<Self::ThresholdAutomatonType>)>, ctx: Self::ModelCheckerContext, ) -> Result<Self, Self::InitializationError>
Initialize the model checker with the internal threshold automaton and
specification representation Read more
Source§fn verify(
self,
abort_on_violation: bool,
) -> Result<ModelCheckerResult, Self::ModelCheckingError>
fn verify( self, abort_on_violation: bool, ) -> Result<ModelCheckerResult, Self::ModelCheckingError>
Start the model checker Read more
§fn new(
ctx_opts: Option<<Self::ModelCheckerContext as ModelCheckerContext>::ContextOptions>,
mc_opts: Self::ModelCheckerOptions,
preprocessors: Vec<Box<dyn Preprocessor<GeneralThresholdAutomaton, <Self::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::InternalSpecType, Self::ModelCheckerContext>>>,
ta: GeneralThresholdAutomaton,
spec: impl Iterator<Item = (String, ELTLExpression)>,
) -> Result<Self, ModelCheckerSetupError<<Self::ThresholdAutomatonType as TATrait<Self::ModelCheckerContext, <Self::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::InternalSpecType>>::TransformationError, <Self::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::TransformationError, <Self::ModelCheckerContext as ModelCheckerContext>::CreationError, Self::InitializationError>>
fn new( ctx_opts: Option<<Self::ModelCheckerContext as ModelCheckerContext>::ContextOptions>, mc_opts: Self::ModelCheckerOptions, preprocessors: Vec<Box<dyn Preprocessor<GeneralThresholdAutomaton, <Self::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::InternalSpecType, Self::ModelCheckerContext>>>, ta: GeneralThresholdAutomaton, spec: impl Iterator<Item = (String, ELTLExpression)>, ) -> Result<Self, ModelCheckerSetupError<<Self::ThresholdAutomatonType as TATrait<Self::ModelCheckerContext, <Self::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::InternalSpecType>>::TransformationError, <Self::SpecType as SpecificationTrait<Self::ModelCheckerContext>>::TransformationError, <Self::ModelCheckerContext as ModelCheckerContext>::CreationError, Self::InitializationError>>
Construct a new instance of the model checker Read more
Auto Trait Implementations§
impl Freeze for ACSModelChecker
impl RefUnwindSafe for ACSModelChecker
impl Send for ACSModelChecker
impl Sync for ACSModelChecker
impl Unpin for ACSModelChecker
impl UnwindSafe for ACSModelChecker
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more