{"id":"visitor-dispatch-implements-ocp-inversion","text":"Visitor's double-dispatch protocol (Accept delegates to a type-specific Visit method) is precisely the mechanism that implements OCP axis inversion: the two-class-hierarchy structure makes the tradeoff of type extensibility for operation extensibility explicit and structural rather than implicit.","truth_value":"IN","source":"","source_url":"","source_hash":"","justifications":[{"type":"SL","antecedents":["visitor-double-dispatch-mechanism","visitor-inverts-ocp-axis"],"outlist":[],"label":"The dispatch mechanism IS the axis inversion — not two independent properties but implementation and consequence"}],"dependents":["ocp-composition-with-principled-escape","visitor-dual-hierarchy-grounds-ocp-inversion-mechanism","visitor-extensible-stateful-computation"],"metadata":{"source_type":"derived","review_result":"pass"},"created_at":"2026-06-17T18:04:42+00:00","updated_at":"2026-06-18T06:15:08+00:00","reviewed_at":"2026-06-18T06:15:08+00:00","verified_at":"","retracted_at":"","explanation":{"steps":[{"node":"visitor-dispatch-implements-ocp-inversion","truth_value":"IN","reason":"SL justification valid","antecedents":["visitor-double-dispatch-mechanism","visitor-inverts-ocp-axis"],"label":"The dispatch mechanism IS the axis inversion — not two independent properties but implementation and consequence"},{"node":"visitor-double-dispatch-mechanism","truth_value":"IN","reason":"SL justification valid","antecedents":["gof-visitor-double-dispatch-via-accept","visitor-passed-as-argument-to-accept","gof-visitor-two-class-hierarchies"],"label":"Accept-as-argument + callback-encodes-type + two-hierarchy-structure together constitute the double-dispatch mechanism"},{"node":"gof-visitor-double-dispatch-via-accept","truth_value":"IN","reason":"premise"},{"node":"visitor-passed-as-argument-to-accept","truth_value":"IN","reason":"premise"},{"node":"gof-visitor-two-class-hierarchies","truth_value":"IN","reason":"premise"},{"node":"visitor-inverts-ocp-axis","truth_value":"IN","reason":"SL justification valid","antecedents":["visitor-enables-open-ended-operations","visitor-tradeoff-stable-structure-required","ocp-open-for-extension-closed-for-modification"],"label":"Visitor's open-ops/closed-structure stance is the precise mirror of OCP's open-structure/closed-ops stance"},{"node":"visitor-enables-open-ended-operations","truth_value":"IN","reason":"premise"},{"node":"visitor-tradeoff-stable-structure-required","truth_value":"IN","reason":"premise"},{"node":"ocp-open-for-extension-closed-for-modification","truth_value":"IN","reason":"premise"}]}}