Expand description
Hohfeldian jural relations (Phase 2, DEONTIC_LOGIC_PLAN §6).
Wesley Newcomb Hohfeld decomposed the ambiguous word “right” into eight strict
fundamental positions arranged as correlatives and opposites. This is the
computational bridge for legal ontologies: a vague “right” becomes a precise position
held by one agent toward another, with a necessary correlative the counterparty
must hold. A Claim with no correlative Duty-bearer is therefore a legible structural
gap, not silence (find_unmet_correlatives).
First-order (rules of conduct): Claim↔Duty, Privilege↔No-Right Second-order (rules of control): Power↔Liability, Immunity↔Disability Opposites: Claim/No-Right · Duty/Privilege · Power/Disability · Immunity/Liability
§NQuin encoding
A jural relation “holder holds position over content toward counterparty in
frame” packs as: subject = holder, object = counterparty, context = frame,
predicate = (content << 8) | position (low byte = position opcode, bits [8..62] =
content path — same convention as deontic.rs). Zero-heap throughout.
Enums§
- Collision
Resolution - The outcome of resolving a collision between two jural relations.
Constants§
- JURAL_
CLAIM - JURAL_
DISABILITY - JURAL_
DUTY - JURAL_
IMMUNITY - JURAL_
LIABILITY - JURAL_
NO_ RIGHT - JURAL_
POWER - JURAL_
PRIVILEGE
Functions§
- compile_
jural_ quin - Build a jural-relation Quin:
holderholdspositionovercontenttowardcounterpartywithinframe. - correlative
- The correlative position the counterparty necessarily holds. If A holds
postoward B over content φ, then B holdscorrelative(pos)toward A over φ. - correlative_
quin - The relation the counterparty NECESSARILY holds: swap holder/counterparty and map the position to its correlative, keeping the same content and frame.
- find_
unmet_ correlatives - “Make the absence legible.” For every jural relation whose correlative is NOT present
in
rels, emit the expected (missing) correlative intoout— e.g. a Claim to a resource with no funded Duty-bearer surfaces the duty that ought to exist. Returns the count written. Zero-heap (caller-suppliedout). - is_
first_ order - First-order positions are rules of conduct; second-order are rules of control.
- is_
jural_ position - Is
posone of the eight jural positions? - is_
second_ order - Second-order control positions (Power/Liability/Immunity/Disability) are the only ones that can govern — alter, or be immune to alteration of — another agent’s relations.
- jural_
chain_ links - A multi-party chain link: a second-order control relation
upstream(held by A toward B) governsdownstream(a relation held by B toward C). Valid iffupstreamis a second-order position AND the pivot matches — A’s counterparty (upstream.object) is the holder of the downstream relation (downstream.subject). Models “A has Power over B’s Duty to C”. - jural_
chain_ pivot - The pivot party B of a valid chain link (
upstream.object == downstream.subject), elseNone. - jural_
chain_ valid - Confirm an ordered chain A→B→C→… is fully connected: every adjacent pair links. A single relation (or empty) is trivially valid. Zero-heap (slice windows, no allocation).
- jural_
collision - Two jural relations collide iff the same holder is assigned a position and its jural opposite over the same content within the same frame (e.g. a Duty to φ and a Privilege not to do φ) — a direct contradiction in that holder’s normative position.
- jural_
content - jural_
correlativity_ holds - Does
graphalready contain the necessary correlative ofrel? - jural_
opposite - The jural opposite (the position whose presence negates this one for the holder).
- jural_
position - personhood_
category_ error - Personhood category-error guard (composes
dl::check_subsumption_quin): a benefit position (Claim / Privilege / Immunity) over a content that is exclusive to natural persons (e.g.values:inherentDignity) is a category error when the holder is not subsumed byvalues:NaturalPerson— i.e. a corporate/legal/artificial person asserting a human-only right. Returnstruewhen the error fires. - position_
name - Readable name for a jural position.
- resolve_
collision - Resolve a rights collision.
a_nonderogable/b_nonderogablemark whether each relation is grounded in a non-derogable human-rights instrument (the ingest non-derogable-set). A non-derogable right defeats a derogable counterpart; two non-derogable (or two derogable) positions in genuine conflict are never auto-flattened — they route to human review. The engine proposes; the human disposes.