Skip to content

lawref.cert

Сертифицированные границы ln/exp и ячейка округления §259.2/§64.2 (errata E-0136, DECISION-0154).

Не приближение, а УДОСТОВЕРЕНИЕ: терм возвращает точный рациональный отрезок вместе с деривацией, которая его породила, и ворота доказательств ПЕРЕСЧИТЫВАЮТ отрезок по деривации, а не сверяют поля с полями. Значение Bounds неподделываемо: литералом и записью §37 оно не строится, поэтому проверять «а не написал ли автор границы руками» на исполнении не нужно.

Алгоритм закреплён prose §259.2 ДОСЛОВНО: байтовый контракт держится на границах, а не на способе их получить, и «до сходимости» разошлось бы у двух реализаций на первом же входе. Всё считается на int/Fraction — Decimal зависит от контекста и здесь запрещён.

Attributes

NameDescription
BOUNDS_SCALE_LIMITNo description.
BOUNDS_SIZE_LIMITNo description.
BOUNDS_TERM_LIMITNo description.
IntervalNo description.
PROFILESNo description.

Classes

NameDescription
BoundsЗамкнутый рациональный отрезок с деривацией (§259.2).
CertErrorОтказ сертифицированных границ; code — машинный код issue.

Functions

NameDescription
bounds_addNo description.
bounds_constТочная константа как вырожденный отрезок — вход композиции (§259.2).
bounds_divДеление на отрезок, содержащий ноль, не имеет ни значения, ни «границ
bounds_mulNo description.
bounds_scaleУмножение на точный рациональный коэффициент; знак меняет концы местами.
bounds_subNo description.
cos_boundsNo description.
exp_boundsСертифицированные границы экспоненты (§259.2).
lift_boundsПодъём монотонного листа на отрезок: [f(a.lo).lower, f(a.hi).upper].
lift_trigПодъём синуса и косинуса на отрезок — по липшицевости (§259.2, E-0152).
ln_boundsСертифицированные границы натурального логарифма (§259.2).
parse_fraction<n>/<d> → Fraction; иначе громкий отказ (канон §35, E-0005).
pi_boundsСертифицированные границы π по тождеству Мэчина (§259.2, E-0152).
rederiveПЕРЕСЧЁТ отрезка по его деривации (§259.2) — независимый проверяющий.
round_boundsОкругление ОТРЕЗКА до одного значения (§259.2) — либо громкий отказ.
rounding_supportОпора §62 отношения округления (§64.2).
sin_boundsNo description.
sqrt_boundsСертифицированные границы квадратного корня (§259.2, E-0152).
verifyСверка объявленных границ с ПЕРЕСЧИТАННЫМИ (§259.2).

BOUNDS_SCALE_LIMITattributemodule attribute#

BOUNDS_SCALE_LIMIT = 4096

BOUNDS_SIZE_LIMITattributemodule attribute#

BOUNDS_SIZE_LIMIT = 1 << 20

BOUNDS_TERM_LIMITattributemodule attribute#

BOUNDS_TERM_LIMIT = 4096

Intervalattributemodule attribute#

Interval = tuple[Fraction, Fraction]

PROFILESattributemodule attribute#

PROFILES: dict[str, int] = {'p8/0.1': 8, 'p16/0.1': 16, 'p32/0.1': 32}

Boundsclassdataclass#

class Bounds(lower: Fraction, upper: Fraction, derivation: str)

Замкнутый рациональный отрезок с деривацией (§259.2).

derivationattributeinstance attribute#

derivation: str

lowerattributeinstance attribute#

lower: Fraction

upperattributeinstance attribute#

upper: Fraction

CertErrorclass#

class CertError(code: str, message: str)

Bases: Exception

Отказ сертифицированных границ; code — машинный код issue.

codeattributeinstance attribute#

code = code

messageattributeinstance attribute#

message = message

bounds_addfunction#

def bounds_add(a: Bounds, b: Bounds) -> Bounds

bounds_constfunction#

def bounds_const(value: Fraction) -> Bounds

Точная константа как вырожденный отрезок — вход композиции (§259.2).

bounds_divfunction#

def bounds_div(a: Bounds, b: Bounds) -> Bounds

Деление на отрезок, содержащий ноль, не имеет ни значения, ни «границ пошире» — отказ называет отрезок делителя.

bounds_mulfunction#

def bounds_mul(a: Bounds, b: Bounds) -> Bounds

bounds_scalefunction#

def bounds_scale(b: Bounds, factor: Fraction) -> Bounds

Умножение на точный рациональный коэффициент; знак меняет концы местами.

bounds_subfunction#

def bounds_sub(a: Bounds, b: Bounds) -> Bounds

cos_boundsfunction#

def cos_bounds(x: Fraction, profile: str) -> Bounds

exp_boundsfunction#

def exp_bounds(x: Fraction, profile: str) -> Bounds

Сертифицированные границы экспоненты (§259.2).

lift_boundsfunction#

def lift_bounds(head: str, a: Bounds, profile: str) -> Bounds

Подъём монотонного листа на отрезок: [f(a.lo).lower, f(a.hi).upper].

Домен проверяется на нижнем конце самим листом (ln при a.lo <= 0, sqrt при a.lo < 0); ширина определяется аргументом, а не профилем.

lift_trigfunction#

def lift_trig(head: str, a: Bounds, profile: str) -> Bounds

Подъём синуса и косинуса на отрезок — по липшицевости (§259.2, E-0152).

|sin x − sin y| <= |x − y|, поэтому лист в нижнем конце, расширенный на ширину аргумента в обе стороны, содержит значение на всём отрезке. Так переводятся градусы: sin(scale(pi(p), 30/180)).

ln_boundsfunction#

def ln_bounds(x: Fraction, profile: str) -> Bounds

Сертифицированные границы натурального логарифма (§259.2).

parse_fractionfunction#

def parse_fraction(text: str) -> Fraction

<n>/<d> → Fraction; иначе громкий отказ (канон §35, E-0005).

pi_boundsfunction#

def pi_bounds(profile: str) -> Bounds

Сертифицированные границы π по тождеству Мэчина (§259.2, E-0152).

rederivefunction#

def rederive(derivation: str) -> Bounds

ПЕРЕСЧЁТ отрезка по его деривации (§259.2) — независимый проверяющий.

Он не доверяет полям lower/upper вовсе: они в пересчёт не входят, а сверяются с его результатом вызывающим (from_literal_term). Порча границы, остатка, аргумента или профиля отвергается по построению — испорченное поле просто не совпадёт с пересчитанным.

round_boundsfunction#

def round_bounds(bounds: Bounds, precision: int, mode: str, round_fraction) -> Fraction

Округление ОТРЕЗКА до одного значения (§259.2) — либо громкий отказ.

Отношение §64.2 отвечает на вопрос «эта ли ячейка», а норме нужен и ответ «какая»: без него балл, предписанный актом, нечем ВЫВЕСТИ — переменная результата не связана ни одним позитивным конъюнктом, и правило отвергается range restriction §190 (замер MELD 06.09.2026).

Догадки здесь нет по построению: значение возвращается ТОЛЬКО когда оба конца отрезка округляются в одно, и BOUNDS_INSUFFICIENT иначе. Молчаливый выбор одной из двух ячеек был бы ровно тем правдоподобным числом, ради отказа от которого заведены сертификаты.

rounding_supportfunction#

def rounding_support(bounds: Bounds, value: int, precision: int, mode: str, round_fraction) -> tuple[bool, bool]

Опора §62 отношения округления (§64.2).

Решение принимается на КОНЦАХ отрезка: все семь режимов §50 монотонно неубывающие, поэтому round(lower) == round(upper) == value равносильно I ⊆ C, а value вне [round(lower), round(upper)] — I ∩ C = ∅. Второго определения режима не заводится: round_fraction — тот же код, которым считает round §50.

sin_boundsfunction#

def sin_bounds(x: Fraction, profile: str) -> Bounds

sqrt_boundsfunction#

def sqrt_bounds(x: Fraction, profile: str) -> Bounds

Сертифицированные границы квадратного корня (§259.2, E-0152).

Не ряд, а целочисленный корень на сетке профиля: s = ⌊√⌊x·G²⌋⌋ даёт (s/G)² <= x < ((s+1)/G)², ширина 1/G = 10^(-2P) меньше объявленной полуширины, и концы лежат на сетке — выравнивать нечего. Точный корень (x·G² целое и s² = x·G²) даёт вырожденный отрезок.

verifyfunction#

def verify(lower: Fraction, upper: Fraction, derivation: str) -> Bounds

Сверка объявленных границ с ПЕРЕСЧИТАННЫМИ (§259.2).

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

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