pub struct ModelCompleter { /* private fields */ }Expand description
Model completer that takes partial models and makes them complete
Implementations§
Source§impl ModelCompleter
impl ModelCompleter
Sourcepub fn complete(
&mut self,
partial_model: &FxHashMap<TermId, TermId>,
quantifiers: &[QuantifiedFormula],
manager: &mut TermManager,
) -> Result<CompletedModel, CompletionError>
pub fn complete( &mut self, partial_model: &FxHashMap<TermId, TermId>, quantifiers: &[QuantifiedFormula], manager: &mut TermManager, ) -> Result<CompletedModel, CompletionError>
Complete a partial model using the Ge & de Moura (2009) approach.
Steps:
- Start from the partial SAT+theory model
- Extract function interpretations from Apply terms in the model
- Try to solve macro quantifiers (forall x. f(x) = body)
- Fix incomplete function interpretations (add else values)
- Handle uninterpreted sorts (create finite universes)
- Collect universes for all sorts from ground terms in model
- Set default values for every sort
- Ensure every function has a complete interpretation
Sourcepub fn stats(&self) -> &CompletionStats
pub fn stats(&self) -> &CompletionStats
Get completion statistics
Trait Implementations§
Source§impl Debug for ModelCompleter
impl Debug for ModelCompleter
Auto Trait Implementations§
impl Freeze for ModelCompleter
impl !RefUnwindSafe for ModelCompleter
impl Send for ModelCompleter
impl Sync for ModelCompleter
impl Unpin for ModelCompleter
impl UnsafeUnpin for ModelCompleter
impl !UnwindSafe for ModelCompleter
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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