pub struct MultiHopResolver { /* private fields */ }Expand description
Multi-hop backward-chaining resolver with loop detection.
Unlike crate::distributed_backward_chainer::DistributedBackwardChainer,
which records a full crate::proof_tree::ProofTree, this resolver focuses
on how many hops were taken and whether any hop triggered a loop.
Implementations§
Source§impl MultiHopResolver
impl MultiHopResolver
Sourcepub fn new(config: MultiHopConfig) -> Self
pub fn new(config: MultiHopConfig) -> Self
Create a resolver with the given configuration.
Sourcepub async fn resolve<FP, FQ>(
&self,
goal: &Term,
local_kb: &KnowledgeBase,
find_providers: &FP,
remote_query: &FQ,
) -> MultiHopResult
pub async fn resolve<FP, FQ>( &self, goal: &Term, local_kb: &KnowledgeBase, find_providers: &FP, remote_query: &FQ, ) -> MultiHopResult
Attempt to resolve goal using multi-hop backward chaining.
The two callbacks follow the same conventions as
DistributedBackwardChainer::prove_with_tree:
find_providers(cid)→ list of peer IDs that might hold rules forcid.remote_query(peer_id, goal)→Some(bindings)on success,Noneon failure / timeout.
Both callbacks take owned values and return 'static futures so that
they can be used inside the recursive async implementation without
complex higher-ranked lifetime constraints.
Auto Trait Implementations§
impl Freeze for MultiHopResolver
impl RefUnwindSafe for MultiHopResolver
impl Send for MultiHopResolver
impl Sync for MultiHopResolver
impl Unpin for MultiHopResolver
impl UnsafeUnpin for MultiHopResolver
impl UnwindSafe for MultiHopResolver
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more