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
| Name | Description |
|---|---|
LITERAL_KINDS | No description. |
Classes
| Name | Description |
|---|---|
QueryError | Вопрос вне схемы query.schema.json; code — QUERY_INVALID (E-0102). |
Functions
| Name | Description |
|---|---|
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).
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]Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.