Package-level declarations
Types
call/1: checks (via it.unibo.tuprolog.solve.stdlib.primitive.EnsureExecutable) that its argument is a callable term, then resolves it as a goal -- equivalent to call(G) :- ensure_executable(G), G..
catch/3: resolves as its first argument, G; the second (E, the catcher pattern) and third (C, the recovery goal) arguments are never actually resolved as part of this rule's body -- it is it.unibo.tuprolog.solve.concurrent.fsm.StateException that inspects catch(G, E, C) goals found while walking ConcurrentExecutionContext.pathToRoot, unifying E against a raised error and, on a match, resolving C instead.
Conjunction (,/2): rewrites (A, B) into the tuple A, B, so it is unfolded into two separate goals by it.unibo.tuprolog.solve.concurrent.fsm.toGoals/it.unibo.tuprolog.solve.concurrent.fsm.unfoldGoals and resolved sequentially, within the same branch, by it.unibo.tuprolog.solve.concurrent.fsm.StateGoalSelection. Unlike it.unibo.tuprolog.solve.concurrent.stdlib.primitive.Or, conjunction is not itself a source of concurrency: it is the alternatives at each conjunct's choice points that get explored in parallel, not the two sides of a comma.
The cut operator (!/0) -- currently registered as a plain rule with no body override, which means its body defaults to RuleWrapper's true: ! succeeds without pruning any choice point or alternative branch. :solve-concurrent has no choice-point stack to prune in the first place (see it.unibo.tuprolog.solve.concurrent.fsm.StateRuleSelection's "Cut caveat"), so this is currently a placeholder rather than an ISO-conformant cut -- a comment on this object's registration in it.unibo.tuprolog.solve.concurrent.stdlib.DefaultBuiltins notes it may need converting into a primitive ("smarter behaviour") in the future.
A rule-based, two-clause implementation of negation as failure (\+/1): Fail tries X and, if it succeeds, cuts and fails; Success is the fallback clause that succeeds when Fail didn't. This is the same encoding :solve-classic uses, but here it is shadowed by the primitive it.unibo.tuprolog.solve.concurrent.stdlib.primitive.Naf registered under the same \+/1 signature in it.unibo.tuprolog.solve.concurrent.stdlib.DefaultBuiltins: primitives are looked up before rules (see it.unibo.tuprolog.solve.concurrent.fsm.StatePrimitiveSelection), so Fail/Success never actually run as long as that primitive stays registered.