Skip to content

lawref.evaluator.query_shape

Форма ВОПРОСА до вычисления — errata E-0102 (§172, spec/schema/query.schema.json).

Зачем это здесь, а не только в схеме. Схема нормативна и полностью проверяется воротами векторов (run_vectors.py), но у движка law-eval валидатора JSON Schema нет, и обе реализации обязаны отвергать один и тот же вход одними и теми же байтами. Поэтому структурное ядро схемы — ровно то, от чего зависит СМЫСЛ ответа, — повторено здесь и зеркально в law-eval/src/query_shape.rs, а сообщения совпадают дословно.

Что именно ловится и почему это смысл, а не форма. У литерала в движке две тождественности: ключ атома (support.literal_key: predicate + args) и унификация с головой правила (whynot.unify_head: требует kind: "literal"). Вопрос без kind находил свой атом по первой и НЕ находил ни одного правила по второй — блокеров нет, запроса судье нет, и тот же вопрос отвечал COMPUTED вместо REQUIRES_JUDGMENT. Ни одна диагностика этого не называла. Теперь вопрос вне формы Literal не отвечается вовсе.

Здесь же — арность атома вопроса против сигнатуры §38 предъявленной программы (errata E-0168): форма вопроса её не выражает, потому что арность известна не вопросу, а программе, которой он задан. До errata truth(P(a)) к отношению арности два отвечался NEITHER — «не установлено», неотличимое от ответа права.

Attributes

NameDescription
LITERAL_KINDSNo description.

Classes

NameDescription
QueryErrorВопрос вне схемы query.schema.json; code — QUERY_INVALID (E-0102).

Functions

NameDescription
check_queryОтказ QueryError на вопросе вне структурного ядра схемы либо вне
check_signatureАрность атома вопроса против сигнатуры §38/§45.1 — errata E-0168.
relation_arityАрность объявленных отношений §38 предъявленной программы.

LITERAL_KINDSattributemodule attribute#

LITERAL_KINDS = ('truth', 'focused_truth', 'why_not', 'argumentation', 'precedent')

QueryErrorclass#

class QueryError(message: str)

Bases: Exception

Вопрос вне схемы query.schema.json; code — QUERY_INVALID (E-0102).

codeattributeclass attributeinstance attribute#

code = 'QUERY_INVALID'

messageattributeinstance attribute#

message = message

check_queryfunction#

def check_query(query: Any, nodes: Any = ()) -> None

Отказ QueryError на вопросе вне структурного ядра схемы либо вне сигнатуры предъявленной программы (E-0168); иначе None.

Порядок проверок и формулировки — байтовый контракт с law-eval. Форма проверяется ПЕРВОЙ: у литерала без predicate сверять арность не с чем, и второй отказ назвал бы следствие вместо причины.

check_signaturefunction#

def check_signature(query: dict, query_id: str, nodes: Any) -> None

Арность атома вопроса против сигнатуры §38/§45.1 — errata E-0168.

Тот же контракт, что у утверждения дела (E-0046): несогласованный вход не принимается, причина названа. Разница в исходе — у утверждения остаётся дело, которое ещё можно вычислить, а у вопроса вычислять нечего: вопрос неверной арности отвергается ДО вычисления, как вопрос вне схемы §172. Предикат, которого программа не объявляет, не судится — открытый мир §62 делает вопрос о неизвестном законным (NEITHER — ответ, а не пробел).

relation_arityfunction#

def relation_arity(nodes: Any) -> dict[str, int]

Арность объявленных отношений §38 предъявленной программы.

Состав тот же, что у facts._signature_index (symbol_decl вида relation); здесь нужны только числа, и строится он ДО приёма дела — проверка формы вопроса идёт раньше всего (§172).

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.