Skip to main content

CompletedModel

Struct CompletedModel 

Source
pub struct CompletedModel {
    pub assignments: FxHashMap<TermId, TermId>,
    pub function_interps: FxHashMap<Spur, FunctionInterpretation>,
    pub universes: FxHashMap<SortId, Vec<TermId>>,
    pub defaults: FxHashMap<SortId, TermId>,
    pub generation: u32,
}
Expand description

A completed model that assigns values to all relevant terms

Fields§

§assignments: FxHashMap<TermId, TermId>

Term assignments (term -> value)

§function_interps: FxHashMap<Spur, FunctionInterpretation>

Function interpretations

§universes: FxHashMap<SortId, Vec<TermId>>

Universes for uninterpreted sorts (sort -> finite set of values)

§defaults: FxHashMap<SortId, TermId>

Default values for each sort

§generation: u32

Generation number

Implementations§

Source§

impl CompletedModel

Source

pub fn new() -> Self

Create a new empty completed model

Source

pub fn eval(&self, term: TermId) -> Option<TermId>

Get the value of a term in this model

Source

pub fn set(&mut self, term: TermId, value: TermId)

Set the value of a term

Source

pub fn universe(&self, sort: SortId) -> Option<&[TermId]>

Get the universe for a sort

Source

pub fn add_to_universe(&mut self, sort: SortId, value: TermId)

Add a value to a sort’s universe

Source

pub fn default_value(&self, sort: SortId) -> Option<TermId>

Get the default value for a sort

Source

pub fn set_default(&mut self, sort: SortId, value: TermId)

Set the default value for a sort

Source

pub fn has_uninterpreted_sort(&self, sort: SortId) -> bool

Check if a sort has an uninterpreted universe

Source

pub fn eval_apply( &self, func: Spur, evaluated_args: &[TermId], ) -> Option<TermId>

Evaluate a function application f(v1, …, vn) under this model.

First evaluates each argument to its model value, then looks up the function interpretation table. Falls back to else_value or sort default.

Source

pub fn collect_universes_from_model( &mut self, quantifiers: &[QuantifiedFormula], manager: &TermManager, )

Collect the finite universe for each sort appearing in bound variables of the given quantifiers, by scanning ground terms in the current model.

For interpreted sorts (Int, Real, Bool, BV), collects values that actually appear in the model assignments. For uninterpreted sorts, uses existing universe or creates one from model values.

Source

pub fn complete_function_interpretations(&mut self)

Complete all function interpretations by ensuring they have an else_value.

For each function f: S1 x … x Sn -> S that appears in the model:

  • If it has explicit entries but no else_value, set else_value to the most common result value (or the sort default).
  • If it has no entries at all, set else_value to the sort default.

IMPORTANT: For functions with EXPLICIT entries (finite interpretation from ground assertions), do NOT set else_value. Using “most common result” as else_value is unsound: it makes f(v) evaluate to a wrong value when v is not in the explicit entries, causing MBQI to generate a spurious False evaluation and add an empty SAT clause.

Only set else_value for completely uninterpreted functions (no entries).

Trait Implementations§

Source§

impl Clone for CompletedModel

Source§

fn clone(&self) -> CompletedModel

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CompletedModel

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CompletedModel

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more