An IBIS discourse node — the multi-agent argumentation structure: an Issue raises a question,
Positions answer it, and Arguments support or object to positions.
A position in an IBIS discourse is favoured iff its net support (supporting − objecting
arguments) is positive. The multi-agent dialectical resolution of an issue.
A dialectical contradiction: thesis and antithesis assert the same (subject, predicate)
with different objects — the conflict that is either SYNTHESIZED (synthesize_dialectical)
or, when no synthesis is wanted, ISOLATED into a paraconsistent sub-context
(paraconsistent::route_paraconsistent) so it does not explode the rest of the graph.
But-for causal necessity: candidate is a NECESSARY cause of effect (from
origin root) iff effect is reachable from root, but is NOT reachable once
candidate is removed from the causal graph. The attribution/liability test
(“would the harm have occurred but for this agent’s act?”). Zero-heap.
Zero-heap reachability over causal edges (subject → object): is target
reachable from source WITHOUT ever passing through avoid? Bounded BFS over
fixed stack buffers (no allocation). Pass avoid == u64::MAX to avoid nothing.
(The heap variant find_causal_paths enumerates all paths for analysis;
this answers the yes/no reachability the but-for test needs, allocation-free.)
Synthesis-quality / coherence score in [0,1]: a good Hegelian synthesis PRESERVES the
shared ground (same subject + predicate as both thesis and antithesis) and genuinely INTEGRATES
the two objects (rather than echoing one side). 1.0 for a well-formed synthesis; lower when it
drifts from the common ground or fails to combine both sides.