pub enum CloseKind {
Transitive,
Symmetric,
Reflexive,
Equivalence,
Scc,
}Expand description
Which closure a CLOSE statement applies to a relation. Each is a compile-time
graph operation over the relation’s FACT pairs (no solver cost); only
Transitive rejects a cycle (it requires a DAG) — the others either expect or
produce self/back pairs by design.
Variants§
Transitive
TRANSITIVE — add a→c whenever a→b and b→c hold (requires a DAG).
Symmetric
SYMMETRIC — add b→a whenever a→b holds (a two-way relation).
Reflexive
REFLEXIVE — add x→x for every node the relation mentions.
Equivalence
EQUIVALENCE — reflexive + symmetric + transitive closure: groups nodes
into classes (a→b iff they are connected ignoring direction).
Scc
SCC — strongly-connected grouping: a→b iff a and b reach each other
(mutual reachability), plus each node to itself. Isolates directed cycles.
Trait Implementations§
impl Copy for CloseKind
impl Eq for CloseKind
impl StructuralPartialEq for CloseKind
Auto Trait Implementations§
impl Freeze for CloseKind
impl RefUnwindSafe for CloseKind
impl Send for CloseKind
impl Sync for CloseKind
impl Unpin for CloseKind
impl UnsafeUnpin for CloseKind
impl UnwindSafe for CloseKind
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more