FlatTerm

Struct FlatTerm 

Source
pub struct FlatTerm<L: Language> {
    pub node: L,
    pub backward_rule: Option<Symbol>,
    pub forward_rule: Option<Symbol>,
    pub children: FlatExplanation<L>,
}
Expand description

A single term in an flattened explanation. After the first term in a FlatExplanation, each term will be annotated with exactly one backward_rule or one forward_rule. This can appear in children FlatTerms, indicating that the child is being rewritten.

When forward_rule is provided, the previous FlatTerm can be rewritten to this FlatTerm by applying the rule. When backward_rule is provided, the previous FlatTerm is given by applying the rule to this FlatTerm. Rules are either the string of the name of the rule or the reason provided to union_instantiations.

Fields§

§node: L

The node representing this FlatTerm’s operator. The children of the node should be ignored.

§backward_rule: Option<Symbol>

A rule rewriting this FlatTerm back to the last FlatTerm.

§forward_rule: Option<Symbol>

A rule rewriting the last FlatTerm to this FlatTerm.

§children: FlatExplanation<L>

The children of this FlatTerm.

Implementations§

Source§

impl<L: Language> FlatTerm<L>

Source

pub fn remove_rewrites(&self) -> FlatTerm<L>

Remove the rewrite annotation from this flatterm, if any.

Source§

impl<L: Language + Display + FromOp> FlatTerm<L>

Source

pub fn get_string(&self) -> String

Convert this FlatTerm to an S-expression. See get_flat_string for the format of these expressions.

Source

pub fn get_recexpr(&self) -> RecExpr<L>

Convert this FlatTerm to a RecExpr.

Source§

impl<L: Language> FlatTerm<L>

Source

pub fn new(node: L, children: FlatExplanation<L>) -> FlatTerm<L>

Construct a new FlatTerm given a node and its children.

Source

pub fn rewrite(&self, lhs: &PatternAst<L>, rhs: &PatternAst<L>) -> FlatTerm<L>

Rewrite the FlatTerm by matching the lhs and substituting the rhs. The lhs must be guaranteed to match.

Source

pub fn has_rewrite_forward(&self) -> bool

Checks if this term or any child has a forward_rule.

Source

pub fn has_rewrite_backward(&self) -> bool

Checks if this term or any child has a backward_rule.

Trait Implementations§

Source§

impl<L: Clone + Language> Clone for FlatTerm<L>

Source§

fn clone(&self) -> FlatTerm<L>

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<L: Debug + Language> Debug for FlatTerm<L>

Source§

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

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

impl<L: Language + Display + FromOp> Display for FlatTerm<L>

Source§

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

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

impl<L: Language> PartialEq for FlatTerm<L>

Source§

fn eq(&self, other: &FlatTerm<L>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<L: Eq + Language> Eq for FlatTerm<L>

Auto Trait Implementations§

§

impl<L> Freeze for FlatTerm<L>
where L: Freeze,

§

impl<L> RefUnwindSafe for FlatTerm<L>
where L: RefUnwindSafe,

§

impl<L> Send for FlatTerm<L>
where L: Send,

§

impl<L> Sync for FlatTerm<L>
where L: Sync,

§

impl<L> Unpin for FlatTerm<L>
where L: Unpin,

§

impl<L> UnwindSafe for FlatTerm<L>
where L: UnwindSafe,

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.