Изображение: создано с помощью Google Gemini
Реальность — открытая система. Записи приходят с опозданием. Свидетели отказываются от показаний. Датчики перекалибруются. Политики меняются. Мы никогда не можем сказать, что все релевантные наблюдения уже поступили, потому что мы даже не знаем, что остаётся необнаруженным.
Действие устроено иначе. Списать средства, оплатить, предоставить доступ, поднять тревогу — каждое требует замкнутого ответа. Решение должно завершиться, даже когда реальность не завершается. Между открытым миром и конечным действием лежит структурный разрыв. Ни бóльшая уверенность модели, ни более длинная цепочка рассуждений, ни ещё один слой агентов не могут его закрыть.
Поэтому первый вопрос звучит не как «Что истинно?». Он звучит так:
В мире claims без известного конца — кто вправе зафиксировать посылки для этого решения и по каким правилам?
В систему поступает не само событие. Это контракт, платёжная запись, лог датчика, видео, свидетельство или сообщение: фрагмент, произведённый наблюдателем, в определённый момент времени, посредством некоторого преобразования, в определённых рамках, со своими режимами отказа. Система должна принимать их как Claims, а не факты.
Но сохранения Claims недостаточно для действия. Claims могут противоречить друг другу. Отсутствие записи может означать, что событие никогда не происходило, а может — что просто не удался сбор данных. Несколько Claims порой нужно объединить, чтобы вывести одну посылку. Если открытый реестр Claims напрямую подать в движок вынесения суждений, сбор данных, установление фактов и применение правил снова схлопываются в один непрозрачный акт.
Нам нужна явная процедура, которая конструирует фактическое состояние, допустимое для конкретного решения. Я называю эту процедуру Projection, а её результат — Graph of Accepted Facts, или GAF.
Open Claims
│
▼
Projection
│ evaluation · conflict resolution · derivation · absence policy
▼
Graph of Accepted Facts (GAF)
│
▼
Closure
│ GAF · scope · policy · rules · runtime frozen
▼
Deterministic Verdict
│
▼
Authorized Action
│
└── new evidence · policy change · appeal · defect
│
▼
Reopen / Re-projection
Смысл не в том, чтобы собрать больше фактов. Смысл в том, чтобы отделить конструирование посылок суждения от вычисления над этими посылками.
Конечный набор входных данных ещё не есть замкнутый мир
Конечный набор Claims не делает мир замкнутым. Если платёж не появляется в базе данных, мы не можем сразу заключить, что платежа не было. Запись может отсутствовать, задержаться, быть неверно маршрутизированной или храниться в другом учреждении.
Поэтому Projection должна зафиксировать не только список входных данных, но и смысл отсутствия:
- Какой источник считается полным для данного субъекта, предиката, диапазона и периода?
- Где допустимо применить предположение о замкнутом мире (closed-world assumption)?
- Означает ли отсутствующая запись
falseилиunknown? - Как явное отрицание отличается от отсутствующих данных?
- Что система должна вернуть, если доказательств недостаточно?
Основополагающая статья Раймонда Рейтера On Closed World Data Bases формализовала ключевой ход мысли: при допущении замкнутого мира невозможность доказать положительный основной литерал может служить основанием для его отрицания. Этот ход полезен именно потому, что он не является универсально безопасным. Он требует объявленной границы.
Предположим, банк предоставляет финализированный реестр транзакций по одному счёту за один период, и политика Projection принимает этот реестр как полный в рамках этого объёма. Тогда отсутствие может расцениваться как доказательство того, что соответствующей транзакции там не существует. Отсутствие платёжной ссылки в архиве сообщений арендатора не доказывает ничего подобного. Один источник закрыт для объявленного запроса; другой остаётся открытым.
Closure — это не утверждение «мы прочитали до этого места». Это контракт, определяющий, где само отсутствие становится вычислимой информацией.
Projection — не кнопка, превращающая Claim в факт
Projection нельзя свести к присвоению целому Claim метки accepted, rejected или held. Реальные Claims редко бывают настолько чистыми.
- «Я отправил арендную плату пятого числа» может иметь подтверждённую дату, но неподтверждённое назначение платежа.
- Для установления одного платежа может потребоваться две независимые записи.
- Один Claim может подтверждать одну Proposition и опровергать другую.
- Факт может быть выведен, даже если ни один источник не утверждает его дословно.
- Даже надёжный источник может оставаться неопределённым в вопросе, какое именно событие описывает его запись.
Evaluation — это отношение, а не флаг на целом Claim. Оно связывает один или несколько Claims, атомарную Proposition и конкретную Projection. Затем Derivation объединяет Evaluations, ранее принятые посылки и явные правила, чтобы произвести Accepted Fact.
Claims ───────┐
Proposition ──┼── Evaluation ── accepted / rejected / unknown
Projection ───┘ │
▼
Derivation ── Claims · Facts · Rules
│
▼
Accepted Fact
Claim сохраняет, кто утверждал или наблюдал что именно. Proposition — наименьшее утверждение, которое оценивается. Evaluation фиксирует, как Claims соотносятся с этой Proposition в рамках одной Projection. Derivation — доказательный объект, показывающий, как был получен результат. Accepted Fact — посылка, которую процедура разрешает использовать в данном суждении.
Поэтому один и тот же Claim может дать разный Accepted Fact — или не дать вовсе — при другой цели, ином времени отсечения, ином бремени доказывания или иной инстанции. Accepted Fact — это не абсолютная истина обо всей реальности. Это посылка, допущенная к использованию в рамках объявленной границы решения.
Почему результат — граф
Посылки суждения — не изолированные предложения. Кто кому заплатил, когда, сколько, по какому договору, в счёт какого обязательства и действовал ли этот договор в тот момент — всё это связанные утверждения.
Graph of Accepted Facts содержит эти посылки и их семантические связи вместе с derivation и provenance, которые их произвели:
- сущности, действия, время, величины и состояния;
- Claims, подтверждающие или опровергающие каждую Proposition;
- исходные источники и ответственных субъектов;
- Evaluations и правила вывода;
- отклонённые или неразрешённые альтернативы;
- временные, логические отношения и отношения замещения.
Смысл графа не в декоративном пояснении. Это машиночитаемая, прослеживаемая зависимость.
Начиная с Verdict, аудитор должен иметь возможность спуститься через GAF и его правила к исходным Claims. Начиная с признанного недействительным Claim или источника, система должна найти каждый Accepted Fact, Closure, Verdict и Action, которые могут потребовать пересмотра.
Одного provenance недостаточно. Полный анализ влияния также требует зависимостей вывода, негативных зависимостей, агрегатных условий и области действия политики. Вывод может зависеть не от существующего Claim, а от объявленного отсутствия любого подходящего Claim. Стандарт PROV-O: The PROV Ontology стандартизирует интероперабельное provenance вокруг сущностей, деятельностей, агентов и квалифицированных отношений; дополнительная задача GAF — сохранить специфичное для решения принятие и негативные зависимости, необходимые для повторного открытия суждений.
Это логическая модель данных, а не предписание использовать графовую базу данных. Реализовать её может реляционная база данных, хранилище объектов с адресацией по содержимому, журнал событий с добавлением записей (append-only) или графовая база данных. Физическое хранилище валидно, если оно сохраняет узлы, типизированные отношения, происхождение и запросы зависимостей без семантических потерь.
Closure больше, чем GAF
GAF сохраняет Accepted Facts вместе с их Derivation и Provenance. Closure больше, чем GAF: он фиксирует, какой именно GAF был использован, для какого вопроса и при каких условиях. Это контракт воспроизведения решения.
Closure должен содержать как минимум:
- вопрос и цель суждения;
- событие, субъект и временные рамки;
- точный снимок GAF и его идентификатор целостности;
- декларации полноты и трактовку отсутствия, отрицания и неизвестного;
- политику Projection и версию её реализации;
- правила Verdict и версию движка;
- условия выполнения, такие как числовая точность, порядок и разрешение конфликтов;
- правила канонизации, необходимые для повторной идентификации того же графа.
Если один и тот же Closure, выполненный в одной и той же среде исполнения, даёт другой Verdict — дефектен вычислительный слой. Если различаются сами Closures, расхождение можно локализовать во входных данных, политике Projection, Accepted Facts, правилах или среде исполнения.
Детерминизм не означает совершенное знание реальности. Он означает, что один и тот же замкнутый мир должен вычисляться одинаково.
Проследим один случай до конца
Арендодатель утверждает, что арендная плата за июль не выплачена. Арендатор утверждает, что перевёл деньги пятого числа. Финализированный банковский реестр показывает, что арендодатель получил тысячу долларов в этот день, но в назначении платежа пусто. Договор требует тысячу долларов до пятого числа каждого месяца.
Открытый реестр Claims сохраняет все четыре записи, не позволяя одной перезаписать другую.
| Claim | Содержание | Статус источника |
|---|---|---|
| Claim A | арендная плата за июль не выплачена | утверждение арендодателя |
| Claim B | плата была переведена пятого числа | утверждение арендатора |
| Claim C | счёт арендодателя получил тысячу долларов пятого числа | финализированный банковский реестр |
| Claim D | ежемесячная арендная плата — тысяча долларов, к оплате до пятого числа | действующий договор |
Projection сужает вопрос до: «Установлена ли просрочка по арендной плате за июль?» Она принимает банковский реестр как полный для данного счёта и периода. Также применяется политика, которая не позволяет выводить отнесение платежа к конкретному долгу без назначения платежа или отдельного соглашения.
Claim C и Claim D подтверждают принятые Propositions. Дата и сумма из Claim B подтверждаются Claim C, но отнесение этого платежа к июльской аренде остаётся неизвестным. Claim A — это утверждение стороны о желаемом выводе, а не независимое доказательство неуплаты, поэтому оно не становится Accepted Fact через повторение.
GAF фиксирует:
The contract required monthly payment by the fifth. [accepted]
The landlord received the contractual amount that day. [accepted]
Allocation of that payment to the July debt is unresolved.[unknown]
July rent delinquency has not been established. [not derived]
Closure связывает этот GAF с политикой Projection, границей полноты реестра, временем отсечения и движком Verdict. Verdict — не delinquent, а undetermined. Поэтому Authorized Action — не письмо с требованием оплаты, а запрос на установление отнесения платежа.
Позже приходит оригинальная квитанция о переводе с назначением платежа «July rent» — как новый Claim. Старый Closure сохраняется. Событие Reopen запускает новую Projection. Если назначение платежа принимается, новый GAF принимает это отнесение, и новый Closure выдаёт Verdict paid.
Projection в этом примере — не голосование о том, кто выглядит убедительнее. Она фиксирует вопрос, границу полноты, атомарные Propositions, смысл отсутствующих данных и правила вывода, необходимые для построения разрешимого фактического состояния.
Сохранить решение как контракт
В этом примере всё ещё остаётся узкое место. Если каждый платёж без назначения требует от арендодателя подтверждения отнесения, неопределённость не устранена — она лишь перемещена в очередь человеческого одобрения.
Первое подтверждение должно разрешить конкретный случай. Повторяющийся паттерн должен сделать больше: сохранить решение как контракт, который может стать входными данными для будущей Projection.
Предположим, арендодатель подтверждает платёж, и обе стороны одобряют это правило:
Платёж относится к арендной плате текущего месяца, если он поступает с зарегистрированного счёта арендатора до установленного срока, равен договорной сумме, и не остаётся никакого другого невыплаченного долга. Случай, нарушающий любое из условий, требует пересмотра.
Это порождает четыре отдельные записи:
Case Decision ── this payment satisfied the July rent
Policy Candidate ── matching future payments may satisfy monthly rent
Ratified Contract── authorized conditions, exceptions, effective date, version
Policy Exception ── ambiguity outside the contract returns to human review
Следующий Closure ссылается на ратифицированную версию политики. Соответствующие Claims тогда можно проецировать, не задавая арендодателю тот же вопрос снова; лишь новое исключение потребляет человеческое суждение. Решение человека используется один раз, а его санкционированная структура продолжает работать дальше.
Но одно решение — ещё не политика. Система не должна молча превращать одно подтверждение в прецедент. Уполномоченное лицо должно ратифицировать область действия правила, исключения, дату вступления в силу и то, применяется ли оно ретроактивно. До этого момента запись о случае — лишь Policy Candidate. Если новый контракт явно не объявлен ретроактивным, он регулирует последующие Closures и не переписывает более ранние.
Это добавляет к GAF второй контур сохранения. Claims сохраняют то, что поступило из мира. GAF и Closure сохраняют то, что приняло конкретное суждение. Ратифицированная политика сохраняет то, как уполномоченный человек разрешил повторяющуюся неоднозначность, — так что следующая Projection начинается с более сильного контракта вместо того же узкого места.
Разные ошибки требуют разного ремонта
Как только Projection, Verdict и Action разделены, один «неверный результат» распадается на разные виды сбоев:
- пропуск релевантного Claim — это ошибка сбора;
- неверная оценка источника или Proposition — это ошибка Projection;
- применение неверного правила к корректным Accepted Facts — это ошибка вычисления;
- неточное представление корректного Verdict — это ошибка коммуникации;
- исполнение корректного Verdict в отношении неверной цели, лимита или инстанции — это ошибка Action.
Эта таксономия не отменяет ошибку. Она указывает, что именно нужно открыть заново.
Ошибка сбора требует ещё одного Claim. Ошибка Projection требует пересмотра Evaluation и Derivation. Ошибка вычисления позволяет сохранить Closure, исправив и сравнив движок. Ошибка Action не должна переписывать факты; она требует отмены, исправления или компенсации во внешнем мире.
Называть всё это одним «модель ошиблась» разрушает это различие. Как только причина утрачена, система не может доказать, что именно изменилось после исправления.
Accepted Fact — это не полномочие действовать
Accepted Fact не даёт власти. «Аренда просрочена» и «эта система вправе отправить письмо с требованием оплаты» — разные Propositions.
Движок Verdict потребляет Closure и выдаёт суждение вместе со следом вычислений. Authorized Action должен отдельно проверить:
- кто санкционировал это воздействие;
- на какой субъект и объект оно нацелено;
- применимые лимиты суммы и частоты;
- идемпотентны ли повторные попытки;
- какая квитанция подтверждает исполнение;
- как ошибочное воздействие можно отменить или компенсировать.
Производство фактов, вынесение суждения и исполнение разделены, потому что каждое из них реализует иной вид полномочий.
Замкнутый мир должен оставаться открываемым заново
Closure должен быть неизменяемым, не претендуя при этом на вечную истину. Доказательства могут прийти с опозданием. Источник может оказаться недобросовестным. Может обнаружиться дефект политики. Пострадавшая сторона может подать апелляцию.
Перезапись старого результата уничтожила бы объяснение действия, предпринятого в тот момент. Поэтому Reopen — это новое событие, а не правка старого Closure.
Фиксируются новые доказательства, изменение политики, апелляция или отчёт о дефекте. Граф зависимостей определяет потенциально затронутые Closures. Если санкционированная процедура допускает повторное открытие, новая Projection производит новый GAF, Closure и Verdict. Новый результат указывает, что именно он замещает, не переписывая историю.
Если Action уже изменил мир, повторное вычисление не может это отменить. Отмена, уведомления об исправлении, возвраты и компенсации — сами по себе новые Actions со своей собственной санкцией и квитанциями.
Возможность повторного открытия не ослабляет closure. Closure становится легитимным именно потому, что система сохраняет то, что было зафиксировано, и допускает замену только через объявленную процедуру.
LLM не могут заменить границу
Большинство сквозных LLM-приложений смешивают интерпретацию вопроса, поиск, отбор источников, установление фактов, применение правил и формулировку ответа в одном акте генерации. Если принятые и отклонённые Claims не выведены наружу, одинаковый ответ не доказывает одинаковых оснований. Изменившийся ответ не показывает, изменилась ли входная граница или вычисление.
Длинное объяснение или сгенерированный след рассуждений этого не решают. Пост-фактум объяснение — это не журнал исполнения реально использованных входных данных, правил и полномочий.
LLM остаются полезными вокруг этой границы. Они могут извлекать кандидаты в Claims из неструктурированных источников, предлагать атомарные Propositions, объяснять противоречия и неизвестные величины, черновым образом составлять политики Projection и переводить зафиксированный Verdict на человеческий язык.
Но предложение — это ещё не принятие. Сгенерированный LLM Claim, сопоставление, Evaluation или правило должны стать версионируемым входом с provenance и пройти санкционированную процедуру. Итоговое полномочие для действия с высокими последствиями не может оставаться скрытым внутри генерации естественного языка.
Вклад — это цепочка
Компоненты не все новые. У рассуждений о замкнутом мире, provenance, систем поддержания истинности (truth-maintenance), event sourcing, движков правил, юридического установления фактов и апелляций — долгая история. On Closed World Data Bases установила различие открытого и замкнутого мира, а PROV-O: The PROV Ontology стандартизировала графовую модель для прослеживания сущностей через деятельности и ответственных агентов.
Вклад — это цепочка, собранная как единый протокол ответственности:
Claims → Projection → GAF → Closure → Verdict → Action → Reopen
Каждая стрелка — это граница полномочий и ошибки, а не просто преобразование данных. Субъект, сохраняющий Claims, инстанция, допускающая посылки, движок, вычисляющий Verdict, и шлюз, изменяющий мир, действуют по разным контрактам. Их записи связаны, но ни один этап не наследует молча полномочия другого.
GAF — это не изобретение очередной базы данных. Это предложение сделать весь путь от открытых claims до действенных фактов проверяемым, воспроизводимым и обжалуемым.
Цель — контролируемое закрытие, а не совершенная истина
Мы не можем построить систему, которая знает весь открытый мир. Но мы можем построить такую, которая заявляет, какую информацию она приняла в качестве посылки и почему.
Open Claims сохраняют разногласие и неопределённость. Projection фиксирует цель, границы, бремя доказывания и смысл отсутствия. GAF связывает допущенные посылки с их отношениями и происхождением. Closure замораживает условия для воспроизведения. Verdict вычисляется над замкнутым входом. Action изменяет реальность в рамках отдельного полномочия. Reopen пересматривает границу, не стирая историю.
С этим циклом ошибка больше не остаётся единой непрозрачной галлюцинацией. Мы можем различить то, что система упустила, то, что она неверно приняла, то, что она неверно вычислила из принятых посылок, и то, что она неверно исполнила после корректного суждения.
Проецирование Claims в GAF — не способ сделать машины непогрешимыми. Это фиксирует то, на основании чего судила машина, чтобы суждение можно было воспроизвести, оспорить и исправить.
Афоризм «математика истинна, потому что она вычисляется внутри замкнутой системы» указывает на более узкий, но защитимый факт. Как только аксиомы, определения и правила вывода зафиксированы, вывод внутри этой формальной границы можно проверить и воспроизвести (Formalism in the Philosophy of Mathematics). Это не делает вычислимой каждую математическую истину, разрешимой каждую пропозицию или полной каждую аксиоматическую систему. Closure гарантирует воспроизводимость допущенного вывода, а не всезнание.
Суждение о реальном мире нуждается в той же дисциплине, прежде чем начать вычисление. GAF — не сама истина. Это замкнутый мир, фиксирующий, какие посылки были приняты из открытой реальности, — так, чтобы вердикт можно было воспроизвести и оспорить внутри него.
Связанные статьи
- Истина не открывается, а конструируется — физический, математический и юридический аргумент в пользу того, почему истина появляется только после закрытия мира
- Тройки — это claims, а не факты — почему граф знаний должен сохранять конкурирующие claims, прежде чем вычислять контекстуальное суждение
- toulmin — движок правил, вычисляющий контракты — пример разделения принятых посылок и детерминированного вычисления правил
Дополнительное чтение (внешнее)
- On Closed World Data Bases — оригинальное изложение Раймонда Рейтера об оценке запросов в открытом и замкнутом мире
- PROV-O: The PROV Ontology — рекомендация W3C по интероперабельному provenance
- Formalism in the Philosophy of Mathematics — формалистское изложение математической истины внутри системы, управляемой правилами
Источники
- Reiter, Raymond. On Closed World Data Bases. University of British Columbia, Technical Report.
- W3C. PROV-O: The PROV Ontology. W3C Recommendation.
- Stanford Encyclopedia of Philosophy. Formalism in the Philosophy of Mathematics.