Working session: ask the question
The question is law_ask. It has five kinds, and the first, truth,
answers “is it established”. We assemble the call from what the previous
pages gave: the predicate, its arguments, and two facts from
factsTemplate. Legal time is explicit.
{ "kind": "truth", "package": "kz-labour-code", "predicate": "feeding_break_too_short", "args": ["Айгуль", "Работодатель"], "facts": [ { "predicate": "child_feeding_break_minutes", "args": ["Айгуль", "Работодатель", 20] }, { "predicate": "children_under_eighteen_months", "args": ["Айгуль", 1] } ], "legalTime": "2026-09-01"}Three answers to one question
Section titled “Three answers to one question”We asked it three times, changing only the facts. That is the shortest exercise that explains the four-status scale better than any text.
Twenty minutes, one child. The answer is TRUE_ONLY, “established”.
derived holds the derived fact, rulesApplied the thirty-minute rule,
whyNot is empty. The break is shorter than the minimum.
No facts. The answer is NEITHER, and in meaning the server itself
says how to read it: “not established: neither confirmation nor refutation
— this is not ‘no’”. whyNot is full: both rules are named, and each
premise has status DEPENDS marked “depends on an unbound variable”. The
law is not silent — it has nothing to read.
Forty-five minutes, one child. NEITHER again. And whyNot again, but
now different: the premises about minutes and about the number of children
are TRUE_ONLY, and the guard “45 is less than 30” is FALSE_ONLY. The
rule read the facts and did not fire.
The third answer is the main one. Intuition expects “no, the break is not
too short”. But the formalization has no norm “the break is sufficient”:
the article says only when it is shorter than the minimum. Nobody can
refute the predicate, and the honest answer is “not established”. Collapsing
it to “no” would attribute to the law a norm it does not contain. The
difference between NEITHER and FALSE_ONLY is in
How to read an answer; here it is visible on
one predicate.
Four other kinds of question
Section titled “Four other kinds of question”collect enumerates: the same arguments, but a variable instead of one
entity, and the answer is a list of substitutions for which the predicate
is established.
calc computes from normative values of the corpus. An operation tree with
a lookup leaf takes the value from an act, not from your head:
{ "kind": "calc", "calc": { "op": "mul", "left": { "lookup": "mrp", "args": [2026] }, "right": 2 }, "legalTime": "2026-09-01" }The answer is an amount in tenge and a normativeValues field naming the
budget act the monthly calculation index for that year was taken from. Do
not copy the amount from here by hand: it comes from the budget act and
changes with it.
deadline computes a period under the rules of time computation on the
official calendar:
{ "kind": "deadline", "after": "2026-03-06", "days": 10, "unit": "business_day" }The answer is a date and a because field: from which day the count
started, which days dropped out and why (in March, holidays and transferred
weekends, each with a citation of the holidays act), which computation
rules applied. The period is transparent to the day. In the provenance of
this answer the time-computation package is named as a teaching stand-in
for Civil Code articles — an honest mark of formalization depth, and it
must be passed along with the date.
positions is not “is it true” but “which duties arose and in what state
they are”. Second plot of the session: an advocate sent an inquiry to an
akimat; the law allows ten business days for a reply.
{ "kind": "positions", "package": "kz-advocacy", "facts": [ { "predicate": "inquiry_by", "args": ["Запрос-1", "Адвокат"] }, { "predicate": "inquiry_to", "args": ["Запрос-1", "Акимат"] }, { "predicate": "inquiry_sent_on", "args": ["Запрос-1", "2026-03-06"] } ], "legalTime": "2026-03-20", "deadlinePolicy": { "start_count": "next_day", "include_end": true, "roll": "next_working_day" }}The answer is a position with a template, modality duty, bearer (the
akimat), beneficiary (the advocate), and status ACTIVE: “the duty arose,
the period has not expired, performance is not recorded”. The same question
on a date after the period with the fact “no reply was given” (the same
predicate with negated: true) yields VIOLATED, and statusSupports
shows which fact established that. A question after the period without
that fact yields not a violation but indeterminacy: a violation is proved,
it does not follow from silence.
Two traps of this mode. First: without a time-computation policy, a norm
with a period in days answers with a warning and does not compute — the
policy is set by the law of procedure, the server does not imply it.
Second: an empty positions list with summary UNDETERMINED is not “there
are no duties”, it is “facts were missing for a position to arise”. In our
session the first call gave exactly that, until we submitted who sent the
inquiry and to whom.
What else you can pass
Section titled “What else you can pass”selectedInterpretations — a choice of reading where the act admits
several and the formalization keeps them; without a choice the contested
part is silent. proof: true — return evaluation with the proof graph in
the answer; without it only the address proofRef arrives. It will be
needed on explain and doubt.
First — take silence apart: three kinds of “not established” and how to tell them apart.
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.