На прошедшей «Прикладное системное мышление» (мой отчет) школы системного менеджмента Анатолия Левенчука Прапион Медведева в своем докладе поставила вопрос о создании онтологии для описания онтологий, или, как минимум, онтики для описания онтик. На мою реплику, что такая онтика должна быть рефлексивна, то есть подходить для описания себя самой, мне вернули, что «так не работает», в при подробном обсуждении в перерыве Прапион порекомендовала статью Тарского «Семантическая теория истины и основания семантики» — она «совсем короткая, и там все это хорошо раскрыто». Впрочем, кратко мы все равно обсудили, основная претензия в том, что самоописываемые языки неизбежно оказываются противоречивыми, простейший пример — парадокс лжеца, возможность в языке утверждения «Данное предложение ложно», а всерьез это обосновано у Геделя. Меня эта противоречивость не смущает, потому что онтики у нас — для описания мира, а мир — противоречив по той самой теореме Геделя.

Но статью я прочитал, и рекомендую ее тем, кто еще не читал. Она действительно короткая. И посвящена конструированию идеальных объектов, отражающих мир, чем, собственно, и занимаются IT-аналитики, проектируя софт, менеджеры, проектируя и конструируя бизнес-процессы, а также многие другие в современном мире. Поэтому статья стоит читать не как теорию, а в практическом залоге. Таков был фокус моего прочтения, в постоянном сопоставлении со своими моделями как языками. И это позволило мне прояснить и обогатить собственные представления. И именно результаты этого сопоставления изложены дальше, это — не конспект статьи, а переосмысление с точки зрения современных моделей и, как следствие, в современных терминах. Вопросы на понимание и детализацию — приветствуются. А вот заявления о том, что я что-то сопоставил неверно — не интересны. Потому что я сопоставлял со своими моделями мира. Я с удовольствием познакомлюсь с альтернативные сопоставлениями, которые вы сделаете со своей системой моделей, но от наличия альтернатив мои сопоставления неверными не станут :)

А для начала хочу заметить, что онтологи сейчас находятся в гораздо более выгодном представлении с точки зрения практической проверки своих гипотез на практике. В IT есть объектно-ориентированный подход, и еще несколько парадигм программирования, которые позволяют воплотить заложенные в онтологию идеи и проверить практическую работоспособность. А если готовых парадигм для реализации не хватает — всегда можно сделать свою. Правда, те, кто занимается онтологиями как-то не очень стремятся настолько плотно связать свою теорию с практикой :) Предпочитают рассуждения, иногда ставят задачу логической верификации, а вот до валидации, сверки с реальным миром дело не доходит.

Кстати, Тарский в первых разделах своей статьи, когда ставит вопрос о предмете (определении) истины, формулирует различия валидации, сверке с реальным миром и верификации как внутренней непротиворечивости, хотя и не употребляет этих терминов. Но далее работает именно с верификацией.

Основной фокус статьи Тарского, после введения в разделе 6 языков с точно описанной структурой, сформулирован в разделе 8. В ней формулируется понятие семантически замкнутого языка, который «в дополнение к своим выражениям содержит также имена этих выражений и семантические термины, например, термин истинно, относящийся к предложениям этого языка. Мы допускаем также, что все предложения, задающие адекватное употребление этого термина, могут быть сформулированы в нашем языке.», и предположение, «что в этом языке действуют обычные законы логики».

И в этом месте у меня вопрос: а как устроены мои модели — те, которые я строю для объяснения мира и при проектировании IT-систем? Главное, что я не считаю необходимым — это требование полноты «все предложения, задающие адекватное употребление этого термина, могут быть сформулированы в нашем языке». Модель не обязана давать все суждения о предмете моделирования, она его упрощает. Кроме того, для меня неважно требование строгой логики, в том смысле, что если модель дает альтернативные и противоречащие друг другу решения, выбор между которыми делают вне этой модели — тоже нормально. Обычно выбор делает человек, но сейчас уже есть варианты, когда выбор делает искусственный интеллект, например, в виде обученной нейронной сети.

Почему такой отказ я считаю разумным? Отказ от строгой логики обусловлен моделированием социотехнических систем, а значит и социальные, они — частный случай социотехнических. В состав этих систем входит человек, а его поведение противоречиво и логике не подчиняется, это доказано многочисленными экспериментами. А если мы берем в человеке только рациональное, как это попробовала взять экономика в своей модели рационального экономического агента, то получается теория, которая не соответствует реальному миру.

А требование полноты модели по опыту это требование сильно усложняет язык моделирования, делая его слабо пригодным для коммуникации с широким кругом лиц, да и с самим собой — путаешься в сложности. Важно, чтобы это упрощение не касалось существенных аспектов, однако особые случаи всегда принимаются как должное.

Тарский же считает требования полноты и логики существенными, и делает попытку решить поставленную проблему истинны по-другому. Он конструирует язык для некоторой области, а затем переходит в метаязык, который есть расширения языка, содержит все имена и суждения, и дополнительно позволяет говорить об истинности самого языка. Но вот выносить суждения об истинности всех суждений метаязыка в нем нельзя, для этого нежен метаязык следующего уровня, и так далее, до бесконечности. Примерно таким образом, от частных к обобщениям и строятся модели в программировании и развиваются языки программирования. И там есть интересный момент совмещения разных парадигм, то есть разных проработанных и непротиворечивых систем правил. Это можно наблюдать и исследовать, рефлексируя историю развития языков программирования и моделирования.

А вот аналитик-архитектор, задача которого проектировать информационные системы, отражающие мир и встраивающиеся в него, действует по--другому. У него есть многообразие мира, описываемое всеобъемлюще во всей полноте, то есть естественный язык, и есть текущая архитектура — формальный язык, который всегда неполон, а часто и противоречив, потому что обычно содержит несколько способов решить задачу, но приводящие к разным результатам-ответам. И еще есть множество мостиков-расширений для особых случаев между ними для особых случаев. А еще, поверх этого — множественность ограниченных контекстов DDD со своими онтиками и своими взаимоотношениями между ними. Потому что мир — сложнее модели, и некоторые частные случаи, важные для решаемых задач нам надо в свою систему включить. Собственно, это различие в задачах и методе их решения и обуславливает разное отношение к моделям.

Возвращаясь к задаче построения онтологии для онтологий или онтики для онтик, с которой началось обсуждение. По-моему, статья Тарского как раз показывает, что ее точно надо ставить с созданием рефлексивной самоописываемой онтологии, то есть так, чтобы саму онтологию онтологий тоже можно было описать в языке описания онтологий. Метаязык тут не выход, потому что создать язык, позволяющий описать все онтологии кроме себя самой — точно невозможно. Потому что ограничения будут связаны с какими-то свойствами языка, а значит исключать не одну онтологию, а целый класс. Например, все противоречивые онтологии. И можно уверенно предположить, что исключенных онтологий будет больше, чем описываемых. И потому надо или смириться с этим и ставить скромную задачу онтологии для описания класса онтологий, в которую сама онтология онтологий почему-либо не входит (и явно указать — почему), или действительно ставить задачу создания общей онтологии онтологий, которая будет самоописываемой, и при этом противоречивой и/или неполной, и, скорее всего, с более сложной логикой, нежели обычная формальная.

Отмечу, что самоописываемый язык описания онтологий будет еще интересной и прекрасной эстетической конструкцией, и его создание интересно и увлекательно само по себе. Но я уверен, что и практически он будет достаточно эффективен. У меня в свое время был опыт решения частной задачи — создания формализма описания объектов и методов для реализации ООП внутри базы данных, а не снаружи. И получилось создать как раз рефлексивную конструкцию, описывающую, в том числе, собственные метаданные таким образом, чтобы с ними можно было работать через общие пакеты работы с данными, и в реализации не было частных случаев. Результат успешно работает уже полтора десятка лет в десятке разных крупных проектов. И в IT это — не уникально, начиная от учебной задачи программы, которая распечатывает свой текст, и включая С-компилятор, написанный на языке C.