Type Alias ra_ap_hir_ty::GoalData

source ·
pub type GoalData = GoalData<Interner>;

Aliased Type§

enum GoalData {
    Quantified(QuantifierKind, Binders<Goal<Interner>>),
    Implies(ProgramClauses<Interner>, Goal<Interner>),
    All(Goals<Interner>),
    Not(Goal<Interner>),
    EqGoal(EqGoal<Interner>),
    SubtypeGoal(SubtypeGoal<Interner>),
    DomainGoal(DomainGoal<Interner>),
    CannotProve,
}

Variants§

§

Quantified(QuantifierKind, Binders<Goal<Interner>>)

Introduces a binding at depth 0, shifting other bindings up (deBruijn index).

§

Implies(ProgramClauses<Interner>, Goal<Interner>)

A goal that holds given some clauses (like an if-statement).

§

All(Goals<Interner>)

List of goals that all should hold.

§

Not(Goal<Interner>)

Negation: the inner goal should not hold.

§

EqGoal(EqGoal<Interner>)

Make two things equal; the rules for doing so are well known to the logic

§

SubtypeGoal(SubtypeGoal<Interner>)

Make one thing a subtype of another; the rules for doing so are well known to the logic

§

DomainGoal(DomainGoal<Interner>)

A “domain goal” indicates some base sort of goal that can be proven via program clauses

§

CannotProve

Indicates something that cannot be proven to be true or false definitively. This can occur with overflow but also with unifications of skolemized variables like forall<X,Y> { X = Y }. Of course, that statement is false, as there exist types X, Y where X = Y is not true. But we treat it as “cannot prove” so that forall<X,Y> { not { X = Y } } also winds up as cannot prove.