Struct egg::MultiPattern
source · [−]pub struct MultiPattern<L> { /* private fields */ }Expand description
A set of open expressions bound to variables.
Multipatterns bind many expressions to variables, allowing for simulataneous searching or application of many terms constrained to the same substitution.
Multipatterns are good for writing graph rewrites or datalog-style rules.
You can create multipatterns via the MultiPattern::new function or the
multi_rewrite! macro.
MultiPattern implements both Searcher and Applier.
When searching a multipattern, the result ensures that
patterns bound to the same variable are equivalent.
When applying a mulitpattern, patterns bound a variable occuring in the
searcher are unioned with that e-class.
Multipatterns currently do not support the explanations feature.
Implementations
sourceimpl<L: Language> MultiPattern<L>
impl<L: Language> MultiPattern<L>
sourcepub fn new(asts: Vec<(Var, PatternAst<L>)>) -> Self
pub fn new(asts: Vec<(Var, PatternAst<L>)>) -> Self
Creates a new multipattern, binding the given patterns to the corresponding variables.
use egg::*;
let mut egraph = EGraph::<SymbolLang, ()>::default();
egraph.add_expr(&"(f a a)".parse().unwrap());
egraph.add_expr(&"(f a b)".parse().unwrap());
egraph.add_expr(&"(g a a)".parse().unwrap());
egraph.add_expr(&"(g a b)".parse().unwrap());
egraph.rebuild();
let f_pat: PatternAst<SymbolLang> = "(f ?x ?y)".parse().unwrap();
let g_pat: PatternAst<SymbolLang> = "(g ?x ?y)".parse().unwrap();
let v1: Var = "?v1".parse().unwrap();
let v2: Var = "?v2".parse().unwrap();
let multipattern = MultiPattern::new(vec![(v1, f_pat), (v2, g_pat)]);
// you can also parse multipatterns
assert_eq!(multipattern, "?v1 = (f ?x ?y), ?v2 = (g ?x ?y)".parse().unwrap());
assert_eq!(multipattern.n_matches(&egraph), 2);Trait Implementations
sourceimpl<L: Language, A: Analysis<L>> Applier<L, A> for MultiPattern<L>
impl<L: Language, A: Analysis<L>> Applier<L, A> for MultiPattern<L>
sourcefn apply_one(
&self,
_egraph: &mut EGraph<L, A>,
_eclass: Id,
_subst: &Subst,
_searcher_ast: Option<&PatternAst<L>>,
_rule_name: Symbol
) -> Vec<Id>
fn apply_one(
&self,
_egraph: &mut EGraph<L, A>,
_eclass: Id,
_subst: &Subst,
_searcher_ast: Option<&PatternAst<L>>,
_rule_name: Symbol
) -> Vec<Id>
sourcefn apply_matches(
&self,
egraph: &mut EGraph<L, A>,
matches: &[SearchMatches<'_, L>],
_rule_name: Symbol
) -> Vec<Id>
fn apply_matches(
&self,
egraph: &mut EGraph<L, A>,
matches: &[SearchMatches<'_, L>],
_rule_name: Symbol
) -> Vec<Id>
sourcefn vars(&self) -> Vec<Var>
fn vars(&self) -> Vec<Var>
sourcefn get_pattern_ast(&self) -> Option<&PatternAst<L>>
fn get_pattern_ast(&self) -> Option<&PatternAst<L>>
sourceimpl<L: Clone> Clone for MultiPattern<L>
impl<L: Clone> Clone for MultiPattern<L>
sourcefn clone(&self) -> MultiPattern<L>
fn clone(&self) -> MultiPattern<L>
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresourceimpl<L: Debug> Debug for MultiPattern<L>
impl<L: Debug> Debug for MultiPattern<L>
sourceimpl<L: Language + FromOp> FromStr for MultiPattern<L>
impl<L: Language + FromOp> FromStr for MultiPattern<L>
sourceimpl<L: PartialEq> PartialEq<MultiPattern<L>> for MultiPattern<L>
impl<L: PartialEq> PartialEq<MultiPattern<L>> for MultiPattern<L>
sourcefn eq(&self, other: &MultiPattern<L>) -> bool
fn eq(&self, other: &MultiPattern<L>) -> bool
sourceimpl<L: Language, A: Analysis<L>> Searcher<L, A> for MultiPattern<L>
impl<L: Language, A: Analysis<L>> Searcher<L, A> for MultiPattern<L>
sourcefn search_eclass_with_limit(
&self,
egraph: &EGraph<L, A>,
eclass: Id,
limit: usize
) -> Option<SearchMatches<'_, L>>
fn search_eclass_with_limit(
&self,
egraph: &EGraph<L, A>,
eclass: Id,
limit: usize
) -> Option<SearchMatches<'_, L>>
sourcefn search_eclass(
&self,
egraph: &EGraph<L, N>,
eclass: Id
) -> Option<SearchMatches<'_, L>>
fn search_eclass(
&self,
egraph: &EGraph<L, N>,
eclass: Id
) -> Option<SearchMatches<'_, L>>
sourcefn search(&self, egraph: &EGraph<L, N>) -> Vec<SearchMatches<'_, L>>
fn search(&self, egraph: &EGraph<L, N>) -> Vec<SearchMatches<'_, L>>
EGraph, returning a list of all the
SearchMatches where something was found.
This just calls search_eclass on each eclass. Read more