pub enum BoundedExpr {
Show 25 variants
Var(String),
Bool(bool),
Int(i64),
And(Box<BoundedExpr>, Box<BoundedExpr>),
Or(Box<BoundedExpr>, Box<BoundedExpr>),
Not(Box<BoundedExpr>),
Implies(Box<BoundedExpr>, Box<BoundedExpr>),
Eq(Box<BoundedExpr>, Box<BoundedExpr>),
Lt(Box<BoundedExpr>, Box<BoundedExpr>),
Gt(Box<BoundedExpr>, Box<BoundedExpr>),
Lte(Box<BoundedExpr>, Box<BoundedExpr>),
Gte(Box<BoundedExpr>, Box<BoundedExpr>),
Unsupported(String),
BitVecConst {
width: u32,
value: u64,
},
BitVecVar(String, u32),
BitVecBinary {
op: BitVecBoundedOp,
left: Box<BoundedExpr>,
right: Box<BoundedExpr>,
},
BitVecExtract {
high: u32,
low: u32,
operand: Box<BoundedExpr>,
},
BitVecConcat(Box<BoundedExpr>, Box<BoundedExpr>),
ArraySelect {
array: Box<BoundedExpr>,
index: Box<BoundedExpr>,
},
ArrayStore {
array: Box<BoundedExpr>,
index: Box<BoundedExpr>,
value: Box<BoundedExpr>,
},
IntBinary {
op: ArithBoundedOp,
left: Box<BoundedExpr>,
right: Box<BoundedExpr>,
},
Comparison {
op: CmpBoundedOp,
left: Box<BoundedExpr>,
right: Box<BoundedExpr>,
},
ForAll {
var: String,
sort: BoundedSort,
body: Box<BoundedExpr>,
},
Exists {
var: String,
sort: BoundedSort,
body: Box<BoundedExpr>,
},
Apply {
name: String,
args: Vec<BoundedExpr>,
},
}Expand description
A verification expression in the bounded timestep model. This is a Z3-ready IR — each node maps directly to a Z3 AST construct.
Variants§
Var(String)
Boolean variable: “signal@timestep”
Bool(bool)
Boolean literal
Int(i64)
Integer literal
And(Box<BoundedExpr>, Box<BoundedExpr>)
Conjunction
Or(Box<BoundedExpr>, Box<BoundedExpr>)
Disjunction
Not(Box<BoundedExpr>)
Negation
Implies(Box<BoundedExpr>, Box<BoundedExpr>)
Implication: a → b
Eq(Box<BoundedExpr>, Box<BoundedExpr>)
Equality: a == b
Lt(Box<BoundedExpr>, Box<BoundedExpr>)
Less than: a < b
Gt(Box<BoundedExpr>, Box<BoundedExpr>)
Greater than: a > b
Lte(Box<BoundedExpr>, Box<BoundedExpr>)
Less than or equal: a <= b
Gte(Box<BoundedExpr>, Box<BoundedExpr>)
Greater than or equal: a >= b
Unsupported(String)
Unsupported construct (fail closed, not silently true)
BitVecConst
Bitvector constant with explicit width
BitVecVar(String, u32)
Bitvector variable with known width
BitVecBinary
Bitvector binary operation
BitVecExtract
Bitvector extraction: operand[high:low]
BitVecConcat(Box<BoundedExpr>, Box<BoundedExpr>)
Bitvector concatenation
ArraySelect
Array select: array[index]
ArrayStore
Array store: array[index] := value
IntBinary
Integer arithmetic binary operation
Comparison
Comparison returning Bool from Int/BV operands
ForAll
Universal quantifier
Exists
Existential quantifier
Apply
Uninterpreted function application (system functions like $onehot0, $bits, $clog2)
Trait Implementations§
Source§impl Clone for BoundedExpr
impl Clone for BoundedExpr
Source§fn clone(&self) -> BoundedExpr
fn clone(&self) -> BoundedExpr
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BoundedExpr
impl Debug for BoundedExpr
Source§impl PartialEq for BoundedExpr
impl PartialEq for BoundedExpr
Source§fn eq(&self, other: &BoundedExpr) -> bool
fn eq(&self, other: &BoundedExpr) -> bool
self and other values to be equal, and is used by ==.impl StructuralPartialEq for BoundedExpr
Auto Trait Implementations§
impl Freeze for BoundedExpr
impl RefUnwindSafe for BoundedExpr
impl Send for BoundedExpr
impl Sync for BoundedExpr
impl Unpin for BoundedExpr
impl UnsafeUnpin for BoundedExpr
impl UnwindSafe for BoundedExpr
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.