В соседнем чате типов в языках программирования появилась интересная идея:
— вспомнить, что когда-то разделились языки представления знаний (сначала был упор на лисп-машины, потом на пролог и логическое программирование, а по факту остался живым CycL) и просто языки программирования. Онтологическое моделирование шло в FOL с расширениями в сторону HOL на этих самых языках представления знаний. Они, конечно, были чрезвычайно тормозными, и проиграли всему.
— но языки программирования оказались все с базами данных, но не базами знаний. Представление информации о мире оказалось не в языках программирования, а в языках баз данных. И вся обработка данных стала в базах данных. Даже на Julia есть JuliaDB, и там ни разу не знания, и аналитика ни разу не логическая.
— но моделирование данных и интеграционные задачи требуют моделирования справочных данных (НСИ и справочные данные) — это значит, что языки знаний с FOL тут важны.
— берём Julia и прикручиваем к ней болтами экосистему современных солверов на FOL с расширениями по типу JuMP, Modia, DifferentialEquation. Гипотеза, что если теперь эти солверы посадить на GPU, то вообще будет огонь — и в Julia появится свой язык представления знаний, моделирования концептуальных схем, интеграции данных жизненного цикла, описания схем баз данных и т.д.
— проблема в том, что это представление знаний требует компактного синтаксиса, который должен быть чем-то похож нотационно на Prolog DCG —
https://www.metalevel.at/prolog/dcg или DCTG —
http://cmsmcq.com/2004/lgintro.html (и если не очень похож, то будет некомпактно и неудобно по сравнению со специализированными языками)
— бонус от реализации эко-системы FOL на Julia — это одновременная работа со схемами баз данных (языки представления знаний по большому счёту про это — моделирование мира), deep learning, лингвистикой, вероятностными моделями, статистикой и всем остальным из differential programming. То есть идея гибридных логико-нейронных вычислений может отрабатываться на Julia, если в ней будут и численные солверы на GPU, и FOL и даже HOL солверы разогнанные в GPU, с эвристиками (которые сегодня тоже на нейросетках делают и с вероятностными методами логического вывода, много разных развлечений из численных методов).
Если создавать язык представления знаний как eDSL на Julia, то можно ли обеспечить хоть как-то компактный синтаксис по типу этих DCG и DCTG? Ибо люди собираются городить специальный компилятор для такого компактного языка — это у них был бы наследник Пролога и конкурент CycL (оба при этом неплохие языки, но для численных методов они никакие). А я бы хотел такое иметь в экосистеме Julia — и иметь удовольствие смешивать численные и символьные вычисления в одной программе.
Кто-нибудь что-нибудь может сказать про реализацию нотации DCTG в виде eDSL в Julia? Что там нужно будет подхакивать?