Skip to content

lawref.evaluator.effects

Effect materialization §127–§128 — второй шаг power-runtime.

Для каждой ACTIVE power-позиции с accepted exercise-событием проверяются valid_when, temporal scope и применимые immunity (§127-список), и только затем constitutive-шаг создаёт legal effect (institutional факт в store, proof-узел norm_creation с механизмом power_exercise).

Невалидная попытка (§127): empirical event сохраняется как был accepted; публикуется invalidly_exercised(position) (std-предикат) — никакого автоматического void ab initio.

Immunity §128 блокирует transformation, не attempted event. Соперничество Power(E)/Immunity(E) решается rule-приоритетами создавших правил (§106); непобеждённая несравнимая пара — conservative materialization §127: effect НЕ материализуется, default no_effect_until_resolved (effect_conflict_policy профиля — вне v1), transformation-запрос по E получает UNRESOLVED_NORMATIVE_CONFLICT (проброс через blocked-карту).

Attributes

NameDescription
NORM_STDNo description.
VALID_WHEN_STATUS_TESTSNo description.

Functions

NameDescription
active_immunities§128: ACTIVE-позиции иммунитета — общий срез обоих чтений (E-0120).
exercise_literalExercise-паттерн (Term, v1: CallTerm) → атом события.
immunity_verdict§128: применимые иммунитеты против ЭТОГО эффекта и исход их
materialize_effectsВозвращает (blocked, created): blocked — literal_key(effect) →
valid_when_conjuncts§127 valid_when → конъюнкты-пары (тест, литерал) в порядке записи
valid_when_holds§65/§67 (E-0191): проходит ли статус пары литерала статус-тест.
valid_when_literal§127 valid_when → пара (статус-тест §65, ground-литерал).
valid_when_open_judgments§127/§47.3 (E-0100, E-0101, E-0191): литералы-отношения суждения, от

NORM_STDattributemodule attribute#

NORM_STD = 'urn:law:std#'

VALID_WHEN_STATUS_TESTSattributemodule attribute#

VALID_WHEN_STATUS_TESTS = ('established', 'not_known', 'refuted', 'unknown', 'supported', 'monotone')

active_immunitiesfunction#

def active_immunities(positions: list[dict]) -> list[dict]

§128: ACTIVE-позиции иммунитета — общий срез обоих чтений (E-0120).

exercise_literalfunction#

def exercise_literal(exercise: dict) -> dict | None

Exercise-паттерн (Term, v1: CallTerm) → атом события.

immunity_verdictfunction#

def immunity_verdict(effect_literal: dict, payload: dict, pos_rule: str | None, immunities: list[dict], rule_gt) -> tuple[dict | None, bool, list[dict]]

§128: применимые иммунитеты против ЭТОГО эффекта и исход их соперничества с полномочием по приоритетам §106.

Возвращает (winner_block, conflict, applicable): winner_block — иммунитет, победивший по §106 (эффект блокирован), conflict — непобеждённая несравнимая пара §127 (эффект тоже не создаётся, conservative materialization), applicable — все иммунитеты, чей protected_effect совпал (и against, если задан, направлен против holder-а полномочия).

ОДНА функция на два чтения (E-0120): материализация эффекта здесь же и путь запроса судье (whynot.power_judgment_blockers). Вторая копия критерия применимости разошлась бы молча — ровно так канал суждения три errata подряд не видел того, что видит материализация.

materialize_effectsfunction#

def materialize_effects(store: SupportStore, positions: list[dict], registry: ProofRegistry, issues: list[dict], rule_reach: dict[str, set[str]], limits: dict | None = None, judgment_decls: dict[str, dict] | None = None) -> tuple[dict[str, dict], int]

Возвращает (blocked, created): blocked — literal_key(effect) → {reason, positions} для transformation-запросов (reason == “conflict” → UNRESOLVED_NORMATIVE_CONFLICT в query_truth); created — число материализованных эффектов (прогресс §143-итерации).

judgment_decls — отношения суждения §47.3 программы (E-0100): попытка exercise при valid_when, не решённом ПО ПРИЧИНЕ судьи, не есть недействительное осуществление — орган ещё не высказался.

valid_when_conjunctsfunction#

def valid_when_conjuncts(valid_when) -> list[tuple[str, dict]] | None

§127 valid_when → конъюнкты-пары (тест, литерал) в порядке записи (E-0190, E-0191).

Исполнимое подмножество 0.1: литерал (в том числе под статусной обёрткой §65) либо and таких литералов; вложенные and читаются одним плоским списком. Всё прочее (or, not, сравнение, терм) — None: форма вне подмножества, о чём вызывающий обязан сказать NON_EXECUTABLE_RULE, а не читать её как «условие не выполнено». Общий с путём запроса судье.

valid_when_holdsfunction#

def valid_when_holds(test: str, status: str) -> bool

§65/§67 (E-0191): проходит ли статус пары литерала статус-тест. Те же тесты, что у конъюнкта тела правила (solver.solve): not_known — нет положительной опоры (NEITHER или FALSE_ONLY), unknown — ровно NEITHER, refuted — ровно FALSE_ONLY, supported/monotone — любая положительная опора, established — ровно TRUE_ONLY.

valid_when_literalfunction#

def valid_when_literal(valid_when) -> tuple[str, dict] | None

§127 valid_when → пара (статус-тест §65, ground-литерал).

Голый литерал — established (§66); статусная обёртка несёт свой тест (E-0191): раньше читалась только её формула, и not_known(c) вычислялся как «c установлено». Общий с путём запроса судьи (whynot.power_judgment_blockers, E-0100): вторая копия списка допустимых форм разошлась бы молча.

valid_when_open_judgmentsfunction#

def valid_when_open_judgments(conjuncts: list[tuple[str, dict]], store: SupportStore, judgment_decls: dict[str, dict]) -> list[dict] | None

§127/§47.3 (E-0100, E-0101, E-0191): литералы-отношения суждения, от ответа судьи по которым зависит valid_when; None — условие выполнено.

Не прошедший конъюнкт с парой NEITHER — неопределённый (ответ судьи может его решить); не прошедший конъюнкт с определённой парой — опровергнут, и полномочие мертво, ответ судьи ничего не изменит (пустой список). Для established это в точности прежнее «FALSE_ONLY или BOTH».

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

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