Deontic logic in AGISystem2 handles normative reasoning: what is permitted, obligatory, or forbidden. These concepts are encoded in the axiological dimensions (256-383), allowing the system to reason about rules, policies, and ethical constraints geometrically.
Deontic status is determined by axiological dimension values: strongly negative (< -64) means forbidden, strongly positive (> +64) means permitted, and very positive (> +100) means obligatory. The ValidationEngine detects conflicts when the same concept has contradictory deontic values.
| Operator | Meaning | Dimension Range |
|---|---|---|
| PERMITS | Action is allowed | deontic > +64 |
| PROHIBITS | Action is forbidden | deontic < -64 |
| OBLIGATES | Action is required | deontic > +100 |
| NEUTRAL | No normative status | -64 ≤ deontic ≤ +64 |
Standard deontic logic relationships are enforced:
# Obligatory implies permitted OBLIGATES(X, Y) → PERMITS(X, Y) # Forbidden is not-permitted PROHIBITS(X, Y) ↔ ¬PERMITS(X, Y) # Query deontic status ASK "Action PERMITTED_BY Law?" ASK "Action OBLIGATORY_UNDER Contract?"
Use theory layers to model context-dependent norms:
# Base layer: general law ASSERT Law PROHIBITS Speeding # Context layer: emergency THEORY_PUSH name="emergency" ASSERT EmergencyLaw PERMITS Speeding WHEN Ambulance THEORY_POP # Different results based on active layer ASK "Ambulance Speeding PERMITTED?" # Depends on layer
When norms conflict, the system uses priority rules:
// Check if action is permitted
const permitted = reasoner.checkDeontic(action, context, "PERMITTED");
// Returns: { status: true/false, confidence: 0.95, source: "Law#42" }
// Find all obligations
const obligations = reasoner.findByDeontic("OBLIGATORY", context);
// Returns: [{ concept: "TaxFiling", source: "TaxLaw" }, ...]
// Detect conflicts
const conflicts = validationEngine.findDeonticConflicts(theory);
// Returns: [{ concept: "X", status1: "PERMITTED", status2: "PROHIBITED" }]