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 simultaneous 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 multipattern, 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>
Apply a single substitution. Read more
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>
Apply many substitutions. Read more
sourcefn vars(&self) -> Vec<Var>
fn vars(&self) -> Vec<Var>
Returns a list of variables that this Applier assumes are bound. Read more
sourcefn get_pattern_ast(&self) -> Option<&PatternAst<L>>
fn get_pattern_ast(&self) -> Option<&PatternAst<L>>
For patterns, get the ast directly as a reference.
sourceimpl<L: Clone> Clone for MultiPattern<L>
impl<L: Clone> Clone for MultiPattern<L>
sourcefn clone(&self) -> MultiPattern<L>
fn clone(&self) -> MultiPattern<L>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl<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
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &MultiPattern<L>) -> bool
fn ne(&self, other: &MultiPattern<L>) -> bool
This method tests for !=
.
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>>
Similar to search_eclass
, but return at most limit
many matches. Read more
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>>
Search one eclass, returning None if no matches can be found. This should not return a SearchMatches with no substs. Read more
sourcefn search(&self, egraph: &EGraph<L, N>) -> Vec<SearchMatches<'_, L>>
fn search(&self, egraph: &EGraph<L, N>) -> Vec<SearchMatches<'_, L>>
Search the whole EGraph
, returning a list of all the
SearchMatches
where something was found.
This just calls Searcher::search_with_limit
with a big limit. Read more
sourcefn search_with_limit(
&self,
egraph: &EGraph<L, N>,
limit: usize
) -> Vec<SearchMatches<'_, L>>
fn search_with_limit(
&self,
egraph: &EGraph<L, N>,
limit: usize
) -> Vec<SearchMatches<'_, L>>
sourcefn n_matches(&self, egraph: &EGraph<L, N>) -> usize
fn n_matches(&self, egraph: &EGraph<L, N>) -> usize
Returns the number of matches in the e-graph
sourcefn get_pattern_ast(&self) -> Option<&PatternAst<L>>
fn get_pattern_ast(&self) -> Option<&PatternAst<L>>
For patterns, return the ast directly as a reference
impl<L: Eq> Eq for MultiPattern<L>
impl<L> StructuralEq for MultiPattern<L>
impl<L> StructuralPartialEq for MultiPattern<L>
Auto Trait Implementations
impl<L> RefUnwindSafe for MultiPattern<L> where
L: RefUnwindSafe,
impl<L> Send for MultiPattern<L> where
L: Send,
impl<L> Sync for MultiPattern<L> where
L: Sync,
impl<L> Unpin for MultiPattern<L> where
L: Unpin,
impl<L> UnwindSafe for MultiPattern<L> where
L: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcepub fn equivalent(&self, key: &K) -> bool
pub fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more