Path: blob/main/cranelift/isle/veri/veri_engine/src/interp.rs
1693 views
/// Interpret and build an assumption context from the LHS and RHS of rules.1use crate::type_inference::RuleSemantics;2use veri_ir::{BoundVar, Expr};34use std::collections::HashMap;5use std::fmt::Debug;67use cranelift_isle as isle;8use isle::sema::{RuleId, VarId};910/// Assumption consist of single verification IR expressions, which must have11/// boolean type.12#[derive(Clone, Debug)]13pub struct Assumption {14assume: Expr,15}1617impl Assumption {18/// Create a new assumption, checking type.19pub fn new(assume: Expr) -> Self {20// assert!(assume.ty().is_bool());21Self { assume }22}2324/// Get the assumption as an expression.25pub fn assume(&self) -> &Expr {26&self.assume27}28}29pub struct Context<'ctx> {30pub quantified_vars: Vec<BoundVar>,31pub free_vars: Vec<BoundVar>,32pub assumptions: Vec<Assumption>,33pub var_map: HashMap<VarId, BoundVar>,3435// For type checking36pub typesols: &'ctx HashMap<RuleId, RuleSemantics>,37}3839impl<'ctx> Context<'ctx> {40pub fn new(typesols: &'ctx HashMap<RuleId, RuleSemantics>) -> Context<'ctx> {41Context {42quantified_vars: vec![],43free_vars: vec![],44assumptions: vec![],45var_map: HashMap::new(),46typesols,47}48}49}505152