pub fn solve(
        &mut self,
        program: &dyn RustIrDatabase<I>,
        goal: &UCanonical<InEnvironment<Goal<I>>>,
    ) -> Option<Solution<I>> {
        let ops = self.forest.context().ops(program);
        self.forest.solve(&ops, goal, || true)
    }
/// Attempts to solve the given goal, which must be in canonical
/// form. Returns a unique solution (if one exists).  This will do
/// only as much work towards `goal` as it has to (and that work
/// is cached for future attempts).
///
/// # Parameters
///
/// - `program` -- defines the program clauses in scope.
///   - **Important:** You must supply the same set of program clauses
///     each time you invoke `solve`, as otherwise the cached data may be
///     invalid.
/// - `goal` the goal to solve
///
/// # Returns
///
/// - `None` is the goal cannot be proven.
/// - `Some(solution)` if we succeeded in finding *some* answers,
///   although `solution` may reflect ambiguity and unknowns.
Attempts to solve the given goal, which must be in canonical
form. Returns a unique solution (if one exists).  This will do
only as much work towards `goal` as it has to (and that work
is cached for future attempts).
Attempts to solve the given goal which must be in canonical form . Returns a unique solution ( if one exists ) . This will do only as much work towards ` goal ` as it has to ( and that work is cached for future attempts ) .
pub fn solve(
        &mut self,
        program: &dyn RustIrDatabase<I>,
        goal: &UCanonical<InEnvironment<Goal<I>>>,
    ) -> Option<Solution<I>> {
        let ops = self.forest.context().ops(program);
        self.forest.solve(&ops, goal, || true)
    }
pub fn solve ( & mut self , program : & dyn RustIrDatabase < I > , goal : & UCanonical < InEnvironment < Goal < I > > > , ) -> Option < Solution < I > > { let ops = self . forest . context ( ) . ops ( program ) ; self . forest . solve ( & ops , goal , | | true ) }
Attempts to solve the given goal, which must be in canonical
form.
Attempts to solve the given goal which must be in canonical form .
&mut self
program
&dyn RustIrDatabase<I>
goal
&UCanonical<InEnvironment<Goal<I>>>
None
on
if we succeeded in finding *some* answers,
although `solution` may reflect ambiguity and unknowns.
if we succeeded in finding * some * answers although ` solution ` may reflect ambiguity and unknowns .
ome(solution
&mut self
program
&dyn RustIrDatabase<I>
defines the program clauses in scope.
Important:** You must supply the same set of program clauses
each time you invoke `solve`, as otherwise the cached data may be
invalid.
defines the program clauses in scope . Important : ** You must supply the same set of program clauses each time you invoke ` solve ` as otherwise the cached data may be invalid .
goal
&UCanonical<InEnvironment<Goal<I>>>
the goal to solve
the goal to solve