Skip to content

lawref.evaluator.defeasible

L1: defeasible/defeater, приоритеты и defeat — SPEC §104–§115.

Кандидаты по стратам §110/§111, defeat §107, surviving support §108 (candidate-level team §109), ambiguity-preserving BOTH §112, отчёты §115. В конце каждой страты дозапускается strict closure (§111 шаг 1) — отсюда единственная дуга к strict, обратной нет.

Attributes

NameDescription
META_STDNo description.
NORM_STDNo description.

Functions

NameDescription
defeasible_closureL1 (§104–§112): кандидаты defeasible/defeater по стратам §110/§111,
prepare_defeasibleУстановка поражаемого слоя — чистая функция от узлов программы:
rule_ranksРанги §110 по одному CLIR-документу — вход для ворот.
stratifyРанг правила §110 (v1): глубина цепочки через defeasible-головы.

META_STDattributemodule attribute#

META_STD = 'urn:law:std#'

NORM_STDattributemodule attribute#

NORM_STD = 'urn:law:std#'

defeasible_closurefunction#

def defeasible_closure(store: SupportStore, nodes: list[dict], legal_time: str, registry: ProofRegistry, issues: list[dict], limits: dict | None = None, env: Any = None, program_hash: str = '', input_hash: str = '', prepared: dict[str, Any] | None = None, prepared_strict: Any = None, state: dict | None = None, emit_prepared_issues: bool = True) -> list[dict]

L1 (§104–§112): кандидаты defeasible/defeater по стратам §110/§111, defeat §107, surviving support §108 (candidate-level team §109), ambiguity-preserving BOTH §112; отчёты о конфликтах §115.

V1-объём: приоритеты — rule-level (§106) с транзитивным замыканием и детекцией цикла (PRIORITY_CONFLICT, без tie-break); тела — established- конъюнкты (default negation §113 — следующий срез); стратификация — по глубине цепочек defeasible-голов (цикл — NON_EXECUTABLE_UNSTRATIFIED).

prepare_defeasiblefunction#

def prepare_defeasible(nodes: list[dict]) -> dict[str, Any]

Установка поражаемого слоя — чистая функция от узлов программы: кандидаты §104 с конъюнктами и их предупреждения, замыкание приоритетов §106, условные приоритеты, ранги §110 и их issues. Вид программы (evaluator.prepared) считает её один раз на дату права; issues воспроизводятся defeasible_closure в прежнем порядке и числе.

rule_ranksfunction#

def rule_ranks(nodes: list[dict]) -> dict[str, int]

Ранги §110 по одному CLIR-документу — вход для ворот.

Повторяет отбор правил, который делает defeasible_closure (_rule_filter_l1 отсеивает то, что v1 не исполняет), и потому видит ровно то множество, которое участвует в конфликтных группах §111. Диагностики отбора глушатся: ворота спрашивают о рангах, а о мёртвых правилах докладывает verify/ci/gates/silence/check_dead_rules.py.

stratifyfunction#

def stratify(drules: list[tuple[dict, list]], issues: list[dict], derived: set[str] | frozenset[str] = frozenset(), chain: list[tuple[str, list[str]]] = ()) -> dict[str, int] | None

Ранг правила §110 (v1): глубина цепочки через defeasible-головы.

Извлечено из тела defeasible_closure БЕЗ изменения поведения, чтобы у рангов был один носитель. Вторая копия этого цикла разошлась бы с первой молча — тот же довод, по которому verify/ci/gates/silence/check_dead_rules.py переиспользует rules.rule_execution_status, а не повторяет её.

Читатель снаружи один и важный: verify/ci/gates/silence/check_stratum_barrier.py. Приоритет §116 разрешает конфликт ТОЛЬКО внутри страты (§111 собирает конфликтные группы для каждой страты отдельно), поэтому объявленное ребро между правилами РАЗНЫХ рангов не применяется никогда — и молчит при чистых check, lower и воротах мёртвых правил. Считать ранги воротам приходится теми же, что считает вывод, иначе они докладывали бы о несуществующих дефектах либо молчали о настоящих.

None — программа нестратифицируема (§110): цикл через defeasible- зависимости, вывод не выполняется.

chain — строго-позитивные рёбра программы (rules.strict_positive_chain), errata E-0172: предикат, который строгая цепочка выводит из головы поражаемого правила страты k, полон лишь к шагу 1 страты k + 1 §111, и правило, читающее его в теле или выводящее его голову, стоит там же. Пустой chain — прежние ранги.

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

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