[][src]Struct chalk_engine::ExClause

pub struct ExClause<I: Interner> {
    pub subst: Substitution<I>,
    pub ambiguous: bool,
    pub constraints: Vec<InEnvironment<Constraint<I>>>,
    pub subgoals: Vec<Literal<I>>,
    pub delayed_subgoals: Vec<InEnvironment<Goal<I>>>,
    pub answer_time: TimeStamp,
    pub floundered_subgoals: Vec<FlounderedSubgoal<I>>,
}

The paper describes these as A :- D | G.

Fields

subst: Substitution<I>

The substitution which, applied to the goal of our table, would yield A.

ambiguous: bool

True if any subgoals were depended upon negatively and were not fully evaluated, or if we encountered a CannotProve goal. (In the full SLG algorithm, we would use delayed literals here, but we don't bother, as we don't need that support.)

constraints: Vec<InEnvironment<Constraint<I>>>

Region constraints we have accumulated.

subgoals: Vec<Literal<I>>

Subgoals: literals that must be proven

delayed_subgoals: Vec<InEnvironment<Goal<I>>>

We assume that negative literals cannot have coinductive cycles.

answer_time: TimeStamp

Time stamp that is incremented each time we find an answer to some subgoal. This is used to figure out whether any of the floundered subgoals may no longer be floundered: we record the current time when we add something to the list of floundered subgoals, and then we can compare whether its value has changed since then. This is not the same TimeStamp of Forest's clock.

floundered_subgoals: Vec<FlounderedSubgoal<I>>

List of subgoals that have floundered. See FlounderedSubgoal for more information.

Trait Implementations

impl<I: Clone + Interner> Clone for ExClause<I>[src]

impl<I: Debug + Interner> Debug for ExClause<I>[src]

impl<I: Eq + Interner> Eq for ExClause<I>[src]

impl<I: Interner, _TI> Fold<I, _TI> for ExClause<I> where
    _TI: TargetInterner<I>, 
[src]

type Result = ExClause<_TI>

The type of value that will be produced once folding is done. Typically this is Self, unless Self contains borrowed values, in which case owned values are produced (for example, one can fold over a &T value where T: Fold, in which case you get back a T, not a &T). Read more

impl<I: Interner> HasInterner for ExClause<I>[src]

type Interner = I

The interner associated with the type.

impl<I: Hash + Interner> Hash for ExClause<I>[src]

impl<I: PartialEq + Interner> PartialEq<ExClause<I>> for ExClause<I>[src]

impl<I: Interner> StructuralEq for ExClause<I>[src]

impl<I: Interner> StructuralPartialEq for ExClause<I>[src]

impl<I: Interner> Visit<I> for ExClause<I>[src]

Auto Trait Implementations

impl<I> RefUnwindSafe for ExClause<I> where
    <I as Interner>::InternedGoal: RefUnwindSafe,
    <I as Interner>::InternedLifetime: RefUnwindSafe,
    <I as Interner>::InternedProgramClauses: RefUnwindSafe,
    <I as Interner>::InternedSubstitution: RefUnwindSafe,
    <I as Interner>::InternedType: RefUnwindSafe

impl<I> Send for ExClause<I> where
    <I as Interner>::InternedGoal: Send,
    <I as Interner>::InternedLifetime: Send,
    <I as Interner>::InternedProgramClauses: Send,
    <I as Interner>::InternedSubstitution: Send,
    <I as Interner>::InternedType: Send

impl<I> Sync for ExClause<I> where
    <I as Interner>::InternedGoal: Sync,
    <I as Interner>::InternedLifetime: Sync,
    <I as Interner>::InternedProgramClauses: Sync,
    <I as Interner>::InternedSubstitution: Sync,
    <I as Interner>::InternedType: Sync

impl<I> Unpin for ExClause<I> where
    <I as Interner>::InternedGoal: Unpin,
    <I as Interner>::InternedLifetime: Unpin,
    <I as Interner>::InternedProgramClauses: Unpin,
    <I as Interner>::InternedSubstitution: Unpin,
    <I as Interner>::InternedType: Unpin

impl<I> UnwindSafe for ExClause<I> where
    <I as Interner>::InternedGoal: UnwindSafe,
    <I as Interner>::InternedLifetime: UnwindSafe,
    <I as Interner>::InternedProgramClauses: UnwindSafe,
    <I as Interner>::InternedSubstitution: UnwindSafe,
    <I as Interner>::InternedType: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Cast for T[src]

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

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, I> Shift<I> for T where
    I: Interner,
    T: Fold<I, I>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, I> VisitExt<I> for T where
    I: Interner,
    T: Visit<I>, 
[src]