Classic problems of normative reasoning
Legal theory, deontic logic, and nonmonotonic reasoning have a short list of problems that every serious rule system eventually meets: a default with an exception, a duty that has already been breached, a permission that is only silence, a term whose edge needs a judge. This page collects thirteen of them. For each it gives the classic statement and its source, why it is hard for rule systems, how Arxo expresses it, and which systems in this section address the same problem with their own native forms.
Status of this page. The thirteen problems form a prepared bank. Each problem has a small set of cases (two to five) whose expected outcomes are derived from the problem text — or, where a current act anchors the norm, from that act’s text — never from any implementation. The cross-system runs have not been performed. Nothing here is a result, and no system is ranked: this page is a map of where the hard spots lie and who has machinery for them, not a scoreboard.
The machine-author question
Section titled “The machine-author question”Most of these problems are expressible in most serious systems; whether a form exists is rarely the interesting question. Arxo assumes that models write formalizations and people accept them, so each problem is framed for a machine author: given only the problem text and a fixed documentation budget, does a model write the form correctly once its work stops changing, and does the system’s stock check catch a planted error — a dropped exception, a wrong quantifier, an evaluative term computed from case data — before any case runs? The setup, budgets, and outcome classes are on the methodology page.
How each entry reads
Section titled “How each entry reads”- Classic statement — the problem in a few sentences, with its original source.
- Why it is hard — the failure a naive rule encoding produces.
- In Arxo — the construct that carries the problem, linked to its language page.
- Elsewhere in this section — systems whose comparison pages record a native form for the same problem, and the systems the prepared protocol pairs it with. A system is named only when its page says so.
Defaults, exceptions, and conflict
Section titled “Defaults, exceptions, and conflict”1. Tweety: the defeasible default
Section titled “1. Tweety: the defeasible default”Classic statement. Birds fly; Tweety is a bird, so Tweety flies — until we learn that Tweety is a penguin, and the conclusion is withdrawn. The canonical illustration of a normal default with an exception comes from Raymond Reiter, “A logic for default reasoning”, Artificial Intelligence 13 (1980) (doi:10.1016/0004-3702(80)90014-4); background in the Stanford Encyclopedia entry on defeasible reasoning.
Why it is hard. Classical logic is monotonic: adding a fact never removes a conclusion. Encodings that fake the exception with “not penguin” in the body tend to confuse “we know it is not a penguin” with “nobody said it is a penguin”, and two competing exceptions (a penguin that flies) are often settled silently by rule order.
In Arxo. A defeasible rule with an
unless clause or a separate defeater. Missing information about the
species leaves the default standing; the penguin fact defeats it, and the
defeat is visible in the proof. Two unordered exceptions stay a visible
conflict until a priority is declared.
Elsewhere in this section. Blawx studies a published bird-flight toy act with chained defeats and a jetpack exception, using section-defeats-section. Catala writes a general definition plus an exception tree; L4 writes exceptions as rules guarded by negated exceptions; LegalRuleML marks rules strict, defeasible, or defeater. The prepared protocol pairs Arxo with L4, PROLEG, and an answer-set program.
2. The exception to an exception
Section titled “2. The exception to an exception”Classic statement. A general rule applies; an exception removes it; an exception to the exception restores the rule in a narrower case. The structure goes back to the hierarchy of defaults in Reiter (1980). The norm anchor here is the Criminal Code of Kazakhstan, Article 32 on necessary defence: harm to an attacker within the limits of defence is not an offence, excess of those limits restores liability, and an attack on life is a case where excess does not arise at all.
Why it is hard. Three levels collapse easily into two. Dropping the middle level makes every defence lawful; dropping the top level makes every excess punishable. A missing fact about the nature of the attack must not be read as the attack being on life.
In Arxo. An unless chain on a defeasible rule:
the language treats a carve-out from a carve-out as a first-class shape, and
a chain link stays alive in the proof. Where the levels come from separate
articles, a priority with a stated reason links
them.
Elsewhere in this section. Catala builds exception trees and offers an opt-in solver check for gaps and overlaps in them. PROLEG nests exceptions with the burden switching side down the chain. Blawx chains defeats between sections. The prepared protocol pairs Arxo with PROLEG and Catala.
3. Rebutting versus undercutting defeat
Section titled “3. Rebutting versus undercutting defeat”Classic statement. A rebutting defeater gives a reason to believe the opposite conclusion. An undercutting defeater gives a reason to doubt that the premise supports the conclusion in these circumstances, without denying either. The distinction is John Pollock’s, “Defeasible Reasoning”, Cognitive Science 11 (1987); Phan Minh Dung’s abstract argumentation treats both as attacks between arguments: “On the acceptability of arguments and its fundamental role in nonmonotonic reasoning, logic programming and n-person games”, Artificial Intelligence 77 (1995) (doi:10.1016/0004-3702(94)00041-X).
Why it is hard. Most rule languages have one kind of exception. Writing an undercut as a rebut produces a false negative conclusion where the right answer is “not established”; writing a rebut as an undercut hides a genuine conflict. An undercut of the undercut must restore the original conclusion.
In Arxo. Both kinds are separate forms on the
defeasible-rules page: a bare unless
or a separate defeater removes support without asserting anything (the
answer becomes “not established, not refuted”), while a contrary unless … then not
asserts the opposite. Two independent opposite rules without a declared
priority are both preserved as a contradiction —
an answer, not an error. The arguments and precedent
page covers reasoning from decided cases.
Elsewhere in this section. LegalRuleML has a separate defeater strength alongside strict and defeasible rules, plus override relations. The prepared protocol pairs Arxo with an answer-set program and a plain Python argumentation-graph script.
4. Conflicts between norms: specialis, superior, posterior
Section titled “4. Conflicts between norms: specialis, superior, posterior”Classic statement. Three maxims settle collisions: the special norm prevails over the general (lex specialis), the higher-ranked act over the lower (lex superior), the later act of equal rank over the earlier (lex posterior). They are doctrinal commonplaces without a single dated origin; the norm anchor here is the Law of Kazakhstan “On Legal Acts” (2016), whose articles on the hierarchy of acts and on resolving contradictions name rank and later adoption as grounds.
Why it is hard. A single numeric priority flattens three different grounds into one, and then cannot say why a norm won. Inferring “more conditions, so more special” or “newer date, so it wins” without a stated ground produces confident wrong answers, and two acts with the same date need to stay visibly unresolved.
In Arxo. A priority declaration carries an explicit reason — specialis, posterior, and so on — and neither the number of conditions nor a date decides anything by itself; act rank and date are facts for a priority policy. Without an edge, incomparable candidates stay a visible contradiction.
Elsewhere in this section. LegalRuleML encodes override relations between rules. Catala expresses the special-over-general case as an exception to a general definition, and Blawx as one section defeating another. Authorization languages settle conflicts by fixed combination rules rather than by these maxims: in Cedar a forbid always wins. The prepared protocol pairs Arxo with PROLEG, L4, and a Python rank-and-date script.
Permissions and institutional facts
Section titled “Permissions and institutional facts”5. Weak and strong permission
Section titled “5. Weak and strong permission”Classic statement. Weak permission is the mere absence of a prohibition; strong permission is an explicit norm that allows. Georg Henrik von Wright drew the distinction in Norm and Action (1963), and Carlos Alchourrón and Eugenio Bulygin developed it for whole normative systems in Normative Systems (1971). See also the Stanford Encyclopedia entry on deontic logic.
Why it is hard. Confusing the two gives wrong answers both ways: silence read as permission where an explicit norm is required, and an explicit permission ignored because a prohibition exists in another act the closure never saw.
In Arxo. Strong permission is a liberty: a norm with a holder and a window that takes part in a priority conflict with a prohibition. Weak permission is not a norm but a query result, computed against an explicitly chosen universe, snapshot, and closure policy; with no closure declared, absence of a prohibition stays undetermined rather than becoming permission. See also prohibitions and negation and truth statuses.
Elsewhere in this section. Cedar denies by default and allows only through explicit permit policies; its answer folds “no permit” and “explicit forbid” into one Deny, told apart only by the deciding policies. OPA / Rego treats a missing attribute as an undefined value and closes complete rules with explicit defaults. Logical English reads negation as failure to prove. The prepared protocol pairs Arxo with L4 and Logical English.
6. Counts-as: constitutive rules
Section titled “6. Counts-as: constitutive rules”Classic statement. Constitutive rules do not regulate existing behaviour; they create institutional facts: X counts as Y in context C — a signature counts as an offer, a raised gavel closes the session. John Searle introduced the distinction in Speech Acts (1969); Andrew Jones and Marek Sergot formalized it as “A formal characterisation of institutionalised power”, Logic Journal of the IGPL (1996).
Why it is hard. The brute action (the hand signed) and the institutional fact (an offer exists) must stay apart: outside context C the first is true and the second is not. A definition must not silently travel to another institution, and a chain of counts-as steps must remain visible.
In Arxo. Three constructs share the work. A definition names a qualification (“who counts as …”) and explains its result “by definition”; a fiction on the presumptions and fictions page orders one thing to count as another; a power produces a legal effect only when validly exercised, which is the Jones–Sergot reading of counts-as.
Elsewhere in this section. L4 separates constitutive rules, declaring what counts as what, from regulative ones. Symboleo gives powers that act through declared functions such as suspend, resume, and terminate. The prepared protocol pairs Arxo with L4 and Catala.
Duties over time
Section titled “Duties over time”7. Chisholm: contrary-to-duty obligations
Section titled “7. Chisholm: contrary-to-duty obligations”Classic statement. Jones ought to go to help his neighbours; if he goes, he ought to tell them he is coming; if he does not go, he ought not to tell them; and he does not go. Roderick Chisholm showed that the standard deontic logic turns these four natural sentences into a contradiction or lets the breach make the primary duty disappear: “Contrary-to-duty imperatives and deontic logic”, Analysis (1963). The Stanford Encyclopedia entry on deontic logic surveys the responses.
Why it is hard. A breach must remain a breach while a secondary duty — to notify, to compensate — comes into force beside it. Encodings that derive “there was no duty” from the fact of non-performance make the violation vanish.
In Arxo. A duty is a position with a holder, a goal, and a window; its lifecycle records it as violated, and a separate rule application derives the secondary duty from that breach. The chain primary breach, compensatory duty, sanction is explicit in the proof; the two statuses live side by side.
Elsewhere in this section. LegalRuleML carries deontic modalities with violation and reparation structure. Symboleo tracks obligations through fulfilled, violated, and further states over an event account, and its shared scenario includes late-payment reparation. L4 tracks fulfilment and breach of typed duties over event streams. The prepared protocol pairs Arxo with L4 and Symboleo.
8. A duty with a deadline
Section titled “8. A duty with a deadline”Classic statement. Remedy the breach within thirty days of receiving the order. The duty has a holder, a required action, a triggering event, a length, and a status: open, performed, or violated. This is a synthetic task on the duty-and-deadline skeleton rather than a problem with a single literature source; its difficulty is well known from contract-modelling work.
Why it is hard. “The period is running”, “the period has passed”, and “performed in time” are three different answers. Late performance must not rewrite the breach after the fact; an unknown trigger date means the period cannot be counted at all; and the boundary day depends on how the text counts.
In Arxo. A duty with an achievement goal and a window; the deadline and calendar page fixes how the period counts (same day or next day, calendar or business days); the lifecycle separates violated from undetermined when no ground for a breach is established.
Elsewhere in this section. Symboleo has first-class deadlines as temporal predicates. Stipula makes deadlines first-class through non-cancellable timeout events. L4 binds parties within time windows. RegelRecht computes a Dutch objection deadline, where the comparison predicts a one-day boundary divergence. The prepared protocol pairs Arxo with Symboleo, Stipula, and a Python date script.
9. A duty to maintain a state
Section titled “9. A duty to maintain a state”Classic statement. Keep the fencing in working order for the whole period of works. The duty is breached at the first moment of non-conformity inside the window, not at its end. Like the deadline case, it is a synthetic task; a candidate anchor is the occupational-safety chapter of the Labour Code of Kazakhstan.
Why it is hard. Achievement logic (“done by the deadline”) gives the wrong answer: being in order on average is no defence, a failure before the window opens belongs to another norm, and a gap in the log is neither compliance nor breach.
In Arxo. A duty with a maintenance goal: it holds over the whole window, and the lifecycle records a breach only on an accepted counterexample, a recorded failure. A prohibition is the same shape for not doing something.
Elsewhere in this section. No comparison page in this section discusses a maintenance form specifically; the prepared protocol pairs Arxo with Symboleo and Stipula, whose lifecycle and timeout machinery are the closest neighbours.
Time and change of law
Section titled “Time and change of law”10. Retroactivity
Section titled “10. Retroactivity”Classic statement. Law does not act retroactively — except a law that mitigates or removes liability. H. L. A. Hart treated retrospective legislation as a defect in guiding conduct in The Concept of Law (1961), and Lon Fuller listed non-retroactivity among the requirements of law’s inner morality in The Morality of Law (1964). The norm anchor here is the Code of Administrative Offences of Kazakhstan, Article 5: a mitigating law reaches back until the penalty decision has been executed.
Why it is hard. Three dates meet: the act, the entry into force of the new edition, and the execution of the decision. Choosing the edition by the date of the question, or always by the date of the act, gets one of the cases wrong; the lenient-law exception has its own boundary.
In Arxo. The time page carries both mechanisms:
rules switch on and off by legal time with effective, nodes are dated by
the edition of the act they come from, and retroactivity in the corpus is
written as a comparison of fact dates in the rule body.
Sources pin the editions themselves.
Elsewhere in this section. Dated editions are native in OpenFisca and PolicyEngine (a parameter value per date, a formula per period) and in RegelRecht (date-versioning by file); Akoma Ntoso marks up editions with validity starts. The prepared protocol pairs Arxo with Catala and a Python date script.
11. Transitional provisions
Section titled “11. Transitional provisions”Classic statement. Permits issued before the cut-over date remain valid until they expire; applications filed before it are decided under the old rules. Continuing relationships, pending procedures, and open periods cross the boundary between two regimes. The concern for change without traps for the addressee is again Hart (1961) and Fuller (1964); a structural analogue in force is the transitional chapter of the Law of Kazakhstan “On Legal Acts”.
Why it is hard. A pending application must not be decided by a mixture of both editions, an old permit must stop protecting its holder exactly when it expires, and a renewal is a new procedure under new rules.
In Arxo. Transitional rules are explicit boundary rules: effective
windows on the time page bound each regime, and a
procedure records where a pending application
stands, so the case can be tied to the regime under which it started.
Elsewhere in this section. The dated-edition systems listed under retroactivity apply here as well. The prepared protocol pairs Arxo with Catala and a Python date script.
Judgment and proof
Section titled “Judgment and proof”12. Open texture and evaluative terms
Section titled “12. Open texture and evaluative terms”Classic statement. “No vehicles in the park”: a car is clearly a vehicle, but a bicycle or an electric scooter sits in the penumbra where the rule needs a decision. H. L. A. Hart, The Concept of Law (1961), chapter VII; the term “open texture” comes from Friedrich Waismann, “Verifiability”, Proceedings of the Aristotelian Society, supplementary volume 19 (1945).
Why it is hard. A rule system wants a test it can compute. The tempting shortcut — a scooter over twenty kilograms is a vehicle — invents a threshold the law never set and makes the answer look settled when it is not.
In Arxo. The judgment channel: the evaluative feature is a judgment relation with a named organ. Until the organ answers, the result is “requires judgment” with the waiting premise named; once a decision is recorded, the proof shows it as adjudicated. Where the text itself reads two ways, an interpretation group records the fork.
Elsewhere in this section. Logical English leaves judged questions to a human or a scene rather than inventing them. docassemble sends evaluative terms to a person through interview branching. PROLEG takes plausibility inputs as judge decisions. The published L4 model studied here computes such words from case data — a choice of that model, not of the language. The prepared protocol pairs Arxo with L4 and Logical English.
13. Burden of proof and presumption
Section titled “13. Burden of proof and presumption”Classic statement. A fact is presumed; the opponent bears the burden of rebutting it; if the question stays unresolved, the act states the default outcome. The executable line comes from Ken Satoh and colleagues: “Formalizing a Switch of Burden of Proof by Logic Programming” (JURISIN 2007) and “Translating the Japanese Presupposed Ultimate Fact Theory into Logic Programming” (JURIX 2009), the basis of PROLEG. A norm anchor is the evidence chapter of the Code of Administrative Offences of Kazakhstan.
Why it is hard. “Not proven” is not “proven false”. Evidence that was offered but not admitted proves nothing either way, and a burden left unmet is a status of the burden, not a finding of fact — unless the act says so.
In Arxo. A presumption expands into a defeasible rule, a rebutting exception, and a priority, with a named burden of rebuttal. Facts and evidence keep an assertion that was not accepted out of the inference, and negation and truth statuses keep “not established” separate from “refuted”. The outcome on silence is a rule the act writes, not an engine default.
Elsewhere in this section. PROLEG is built on this problem: the burden is distributed per condition in advance, and an unproven burden-side fact counts as false so reasoning proceeds. Logical English studies a citizenship article with a foundling presumption among its edits. The prepared protocol pairs Arxo with PROLEG and an answer-set program.
At a glance
Section titled “At a glance”| Problem | Arxo construct | Paired in the prepared protocol |
|---|---|---|
| Tweety default | defeasible rules | L4, PROLEG, answer-set program |
| Exception to an exception | defeasible rules, priority | PROLEG, Catala |
| Rebut versus undercut | defeasible rules | answer-set program, Python |
| Specialis, superior, posterior | priority | PROLEG, L4, Python |
| Weak and strong permission | liberty | L4, Logical English |
| Counts-as | definition, fiction, power | L4, Catala |
| Contrary-to-duty | duty, lifecycle | L4, Symboleo |
| Duty with a deadline | duty, deadlines | Symboleo, Stipula, Python |
| Maintenance duty | duty, lifecycle | Symboleo, Stipula |
| Retroactivity | time, sources | Catala, Python |
| Transitional provision | time, procedures | Catala, Python |
| Open texture | judgment channel | L4, Logical English |
| Burden and presumption | presumptions | PROLEG, answer-set program |
What comes next
Section titled “What comes next”Each problem has a frozen protocol: the arms, the documentation budget, the hidden case bank, and the planted errors the stock check should catch. When a run happens, its outcomes land on this page as a dated section next to the problem, with the run attached and every case classified as match, mismatch, not comparable, execution error, or not checked. Until then the expected outcomes in the bank are predictions from the problem text, and the “Elsewhere” notes are documentation readings, not observed behaviour.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.