Skip to main content

Module jural

Module jural 

Source
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§

CollisionResolution
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: holder holds position over content toward counterparty within frame.
correlative
The correlative position the counterparty necessarily holds. If A holds pos toward B over content φ, then B holds correlative(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 into out — 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-supplied out).
is_first_order
First-order positions are rules of conduct; second-order are rules of control.
is_jural_position
Is pos one 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) governs downstream (a relation held by B toward C). Valid iff upstream is 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), else None.
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 graph already contain the necessary correlative of rel?
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 by values:NaturalPerson — i.e. a corporate/legal/artificial person asserting a human-only right. Returns true when the error fires.
position_name
Readable name for a jural position.
resolve_collision
Resolve a rights collision. a_nonderogable / b_nonderogable mark 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.