Кіріспе
Декларативтік логикалық бағдарламалау тілі
Datalog – декларативтік логикалық бағдарламалау тілі. Ол синтаксистік тұрғыдан Prolog тілінің ішкі жиыны болғанымен, Datalog көбінесе жоғарыдан төмен емес, төменнен жоғары бағалау моделін қолданады. Осы айырмашылық Prolog-тан едәуір өзгеше мінез-құлық пен қасиеттерге әкеледі. Ол жиі дедуктивті дерекқорлар үшін сұрау тілі ретінде пайдаланылады. Datalog деректерді біріктіру, желілік технологиялар, бағдарламаны талдау және тағы да басқа мәселелерде қолданылған.
Семантика
Деталог бағдарламаларының семантикасына қатысты кеңінен қолданылатын үш тәсіл бар: модельдік-теориялық, бекітілген нүктелік және дәлелдеу-теориялық. Бұл үш тәсілдің эквивалентті екендігі дәлелденген. Егер оның ешбір ішкі термисі айнымалы болмаса, онда ол атом деп аталады. Негізінен, әрбір семантика бағдарламаның мәнін бағдарлама ережелерінен шығарылатын барлық негізгі атомдар жиыны ретінде анықтайды, бастапқы деректерден бастап.
Теориялық модель
Егер оның барлық атомдары (бас және денесі) негізделген болса, ереже негізделген ереже деп аталады. R1 ережесі, егер R1 R2 ережесіндегі барлық айнымалылар тұрақтылармен алмастырылған нәтиже болса, R2 ережесінің негізделген мысалы болып табылады. Даталог бағдарламасының Гербранд базасы – бағдарламада кездесетін тұрақтылар арқылы құрастырыла алатын барлық негізделген атомдардың жиыны. Даталог бағдарламасының моделі – Гербранд базасының ең кіші жиыны, сондықтан бағдарламадағы әрбір ереженің әрбір негізделген мысалы үшін, егер ереженің денесіндегі атомдар жиында болса, онда басы да болады. Модельдік-теориялық семантика бағдарламаның мағынасын минималды Гербранд моделі ретінде анықтайды.
Белгілі нүкте
I – бағдарлама P-нің Гербранд базасының қуаты болсын. P үшін тікелей салдар операторы – I-ден I-ге дейінгі T функциясы, ол бағдарлама ережелерінен бір қадамда шығарыла алатын барлық жаңа негізгі атомдарды қосады. Ең кіші тұрақты нүкте семантикасы T функциясының ең кіші тұрақты нүктесін бағдарламаның мағынасы деп анықтайды; бұл минималды Гербранд моделімен сәйкес келеді. Тұрақты нүкте семантикасы минималды модельді есептеу алгоритмін ұсынады: бағдарламадағы негізгі фактілер жиынынан бастап, тұрақты нүктеге жеткенше ережелердің салдарларын қайта-қайта қосыңыз. Бұл алгоритм наивті бағалау деп аталады.
Теориялық дәлелдеу
Дәлелдік теориялық семантика Даталог бағдарламасының мағынасын сәйкес дәлелдеу ағаштарымен фактілер жиынтығы деп анықтайды. Дәлелдеу ағашы интуитивті түрде бағдарламаның фактілері мен ережелерінен фактіні қалай шығаруға болатынын көрсетеді. Адам белгілі бір толық атомның Даталог бағдарламасының минималды Гербранд моделінде бар-жоғын білуге қызығушылық танытуы мүмкін, ал модельдің қалған бөлігіне көп мән бермеуі мүмкін. Жоғарыда сипатталған дәлелдеу ағаштарын жоғарыдан төменге қарай қарастыру мұндай сұраныстардың нәтижелерін есептеу алгоритмін ұсынады. Осы қарастыру SLD шешім алгоритмін анықтайды, ол Prolog бағалауының негізін құрайды.
Бағалау
Datalog бағдарламасын бағалаудың әртүрлі жолдары бар, олардың әрқайсысының өнімділік сипаттамалары әртүрлі.
Төменнен жоғарыға қарай бағалау стратегиясы
Төменнен жоғары бағалау стратегиялары бағдарламадағы деректерден басталады және мақсатқа немесе сұранысқа қол жеткенге дейін немесе бағдарламаның толық минималды моделі құрылғанға дейін ережелерді қайта-қайта қолданады.
Наивті бағалау
Наивті бағалау Datalog бағдарламаларының бекітілген нүкте семантикасын шағылыстырады. Наивті бағалау бағдарламадағы фактілермен бастамаланатын "белгілі фактілер" жиынтығын пайдаланады. Ол бағдарламадағы әрбір ереженің барлық толыққанды мысалдарын қайталап тізімдейді. Егер толыққанды мысалдың денені құрайтын әрбір атом белгілі фактілер жиынтығында болса, онда бас атом белгілі фактілер жиынтығына қосылады. Бұл процесс бекітілген нүктеге жеткенше қайталанады, және ешқандай фактілер қосымша шығарылмайды. Наивті бағалау бағдарламаның толық минималды моделін құрайды.
Жарым наивті бағалау
Жартылай наивті бағалау – наивті бағалаудан асимптотикалық тұрғыдан жылдамырақ бола алатын төменнен жоғарыға қарайғы бағалау стратегиясы.
Жоғарыдан төменге қарай бағалау стратегиясы
SLD шешімі Datalog бағдарламалары үшін негізді және толық.
Сиқырлы жиынтықтар
Жоғарыдан төменге бағалау стратегиялары сұраныс немесе мақсаттан басталады. Төменнен жоғарыға бағалау стратегиялары сұраныстарға жауап беру үшін толық минималды модельді есептеп, оған сұранысты сәйкестіре алады, бірақ егер жауап толық модельдің шағын бөлігіне ғана байланысты болса, бұл тиімсіз болуы мүмкін. Сиқырлы жиынтық алгоритмі Datalog бағдарламасын және сұранысты қабылдап, сол сұранысқа бірдей жауапты есептейтін, бірақ төменнен жоғарыға бағалауды пайдаланатын тиімді бағдарламаны құрайды. Сиқырлы жиынтық алгоритмінің бір түрі жартылай наив бағалау арқылы бағаланғанда жоғарыдан төменге бағалаумен бірдей тиімді бағдарламалар жасайтыны көрсетілді.
Ұзартулар
Datalog-қа бірнеше кеңейтулер енгізілді, мысалы, жосықсыздықты қолдау, жиынтық функцияларды, теңсіздіктерді, объектіге бағытталған бағдарламалауға мүмкіндік беру немесе ережелердің басында дизъюнкцияларды пайдалану. Бұл кеңейтулер тілдің семантикасына және сәйкес интерпретаторды іске асыруға маңызды әсер етеді. Datalog – Prolog, дизъюнктивті Datalog, жауаптар жиынтығымен бағдарламалау, DatalogZ және шектеулі логикалық бағдарламалаудың синтаксистік кіші жиыны болып табылады. Жауаптар жиынтығы ретінде есептелгенде, Datalog бағдарламасы жалғыз жауаптар жиынтығын шығарады, ол оның ең кіші моделімен сәйкес келеді. Datalog-тың көптеген іске асырылымдары оны қосымша мүмкіндіктермен кеңейтеді; толық ақпарат алу үшін қараңыз.
Экспрессивтілік
Datalog көптеген басқа сұраныс тілдерін жалпылайды. Мысалы, конъюнктивті сұраныстар және конъюнктивті сұраныстардың біріктірілісі Datalog-та өрнектелуі мүмкін. Datalog тұрақты жол сұраныстарын да өрнектеуге қабілетті. Datalog үшін қойылатын сұрақ, берілген Datalog бағдарламасы , яғни, кіріс деректер базасында бағалау кезінде қол жеткізілетін максималды рекурсия тереңдігі белгілі бір тұрақтымен шектеле ала ма, дегенді сұрайды. Басқаша айтқанда, бұл сұрақ Datalog бағдарламасын рекурсиясыз Datalog бағдарламасы ретінде немесе, эквивалентті түрде, конъюнктивті сұраныстардың біріктірілісі ретінде қайта жазуға бола ма деп сұрайды. Кез келген Datalog бағдарламалары үшін шектелгендік мәселесін шешу шешілмейді, бірақ Datalog-тың кейбір фрагменттерімен шектеу арқылы оны шешілетін етуге болады.
Еркін бағдарламалық қамтамасыз ету/ашық бастапқы код
Жазылған аты Try it online Сыртқы деректер қорының сипаттамасы Лицензия C XSB Юникс және Microsoft Windows үшін логикалық бағдарламалау және дедуктивті деректер қоры жүйесі, кестелеу арқылы Datalog-қа ұқсас аяқталу және тиімділік, оның ішінде өсімдікті бағалау. C++ Coral жартылай наивті деректер қоры бағалаумен C++ тілінде жазылған дедуктивті деректер қоры жүйесі. 1988-1997 жылдарда әзірленген. DLV Дисжюнктивті бас баптарды қолдайтын Datalog кеңейтуі. Inter4QL - Datalog-тың 4QL сұраныс тілі сияқты C++ тілінде Windows, Mac OS X және Linux үшін іске асырылған ашық кодты командалық жол интерпретаторы. Қағидаттардың басында және денесінде, сондай-ақ рекурсияда теріске шығаруға рұқсат етіледі. v3 RDFox жадыда OWL және Datalog ойлауымен жоғары өнімді RDF үштік сақтау орны. Инкременталды бағалау үшін FBF алгоритмін іске асырады, Datalog-ты стратификацияланған теріске шығару мен теңдікті қосу үшін кеңейтеді. Жоғары қолжетімділік орнатуда жұмыс істей алады. Soufflé Yes файлы, жадыда, sqlite3 Datalog қозғалтқышы ашық кодты, Datalog-ты жоғары өнімділікке, C++ кодына және жоғары өнімділік аудармашысына аударатын компиляторы бар; статикалық бағдарламалық талдау жағдайында кездесетін үлкен деректер жиынтығына күрделі Datalog сұраныстарына арналған. Clojure Cascalog Hadoop Hadoop кластерлерінде сақталған деректерді сұрату үшін Clojure кітапханасы. Clojure Datalog Datalog аспектілерін іске асыратын кітапхана. XTDB (бұрынғы Crux) Yes Apache Kafka "Бұғалданбаған" архитектурасы бар жалпы мақсаттағы деректер қоры, маңызды архитектуралық икемділік пен сәнді көлденең масштабтауға қол жеткізу үшін құжаттар мен транзакциялардың логикалық ағындысын пайдаланады. Қосылатын компоненттерге Kafka, RocksDB және LMDB кіреді. Индекстер біт-уақыт бойынша уақыт Datalog сұраныстарын қолдау үшін. Java және HTTP API-лер ұсынылады. Datascript жадыда Браузерде орындалатын өзгермейтін деректер қоры мен Datalog сұраныс тетігі. Datalevin LMDB Датаскрипттің LMDB тұрақты сақтау үшін оңтайландырылған бұрылысы. Datahike файлы, жадыда Датаскрипттің бұрылысы автостоп ағашын қолдана отырып, тұрақты бэкенді қолданады. Naga/Asami файлы, жадында Графтық деректер қоры (Asami) мен жергілікті Datalog синтаксисін бағалайтын және деректер қорын пайдалана отырып орындайтын ережелерді өңдеу жүйесінің (Naga) комбинациясы. Браузерлерде (жадыда), JVM-де (жадыда/файлдарда) немесе жергілікті түрде (жадыда/файлдарда) орындалады. Erlang Datalog кітапханасы datalog арқылы nary ағыстарының қатынасын сұрау және формализациялау үшін жасалған. Ол жалпы логикалық бағдарламалау парадигмасының оңайлатылған нұсқасын пайдалана отырып, арнайы сұраныс тетігін іске асырады. Кітапхана деректерді интеграциялау, ақпарат алмасу және семантикалық веб-қосымшаларды әзірлеуді жеңілдетеді. Go MangleMangle - дедуктивті деректер базасын бағдарламалау үшін бағдарламалау тілі. Бұл Datalog кеңейтімі, әр түрлі кеңейтулері бар, мысалы, агрегациялау, функцияларды шақыру және нұсқамалық типті тексеру. Haskell Dyna Dyna - статистикалық AI бағдарламалау үшін декларативтік бағдарламалау тілі. Тіл Datalog-қа негізделген, алға және артқа тізбектеуді және қосымша бағалауды қолдайды. Java AbcDatalog AbcDatalog - Java тілінде жазылған Datalog логикалық бағдарламалау тілінің ашық кодты іске асырылуы. Ол жалпы Datalog бағалау алгоритмдерінің, сондай-ақ кейбір тәжірибелік көп желілі бағалау қозғалтқыштарының қолданылуға дайын іске асырылуын қамтамасыз етеді. Ол терминдерді нақты (ағылшылмалы) біріктіру және қабатталған теріске шығару сияқты негізгі Datalog-тан тыс тіл ерекшеліктерін қолдайды. Сонымен қатар, AbcDatalog жаңа бағалау қозғалтқыштары мен жаңа тілдік мүмкіндіктермен оңай кеңейтілетін болып жасалған. IRIS IRIS Datalog-ты функциялы символдармен, предикаттармен, жергілікті қабатталған немесе қабатталмаған логикалық бағдарламалармен (жақсы негізделген семантиканы пайдалана отырып), қауіпсіз емес ережелермен және XML схемалық деректер түрлерімен кеңейтеді. v2.1 Jena - бұл Семантикалық Веб-кеңесі, оның жалпы мақсаттағы ереже қозғалтқышының бөлігі ретінде Datalog-ті іске асыруды қамтиды, ол OWL және RDFS қолдауын қамтамасыз етеді. SociaLite - Stanford Graal Graal-да жасалған ірі масштабтағы графиктік талдау үшін datalog нұсқасы. Flix Yes Datalog-тан әсер алған функционалдық және логикалық бағдарламалау тілі, пайдаланушы анықтаған торлар мен монотонды сүзгі / трансфер функцияларымен кеңейтілген. Lua Datalog - жеңіл дедуктивті деректер базасы жүйесі. OCaml datalog төменнен жоғарыға және жоғарыдан төменге алгоритмдерді қамтитын OCaml үшін жадталған деректер тізімі. 2 clause Prolog DES - Datalog-ты курстарда оқыту үшін пайдаланылатын ашық кодты іске асырылу. Python pyDatalog 11 SQL диалектісі Python құралдарына логикалық бағдарламалауды қосады. Ол деректер базаларында немесе Python нысандарында логикалық сұрауларды орындай алады және Python сыныптарының мінез-құлқын анықтау үшін логикалық шарттарды пайдаланады. Racket Datalog for Racket Datafun Жартылай торлардағы жалпыланған Datalog. Ruby bloom / bud Datalog кеңейтімі Dedalus негізіндегі деректерге бағытталған конструкциялармен бағдарламалау үшін Ruby DSL, уақыт өлшемін логикаға қосады. 3 Clause Rust Crepe Crepe - Rust тілінде декларативтік логикалық бағдарламаларды жазуға мүмкіндік беретін кітапхана, Datalog сияқты синтаксиспен. Ол тиімді, қауіпсіз кодты жасау үшін процедуралық макросты ұсынады және Rust бағдарламаларымен үздіксіз өзара әрекеттеседі. Ол қабатталған теріске шығару, жартылай наивті бағалау және Datalog ережелерінде сыртқы функцияларды шақыру сияқты кеңейтулерді де қолдайды. MIT License / Apache 2.0 Datafrog Datafrog - басқа Rust бағдарламаларына енгізілуге арналған жеңіл Datalog қозғалтқышы. MIT License / Apache 2.0 TerminusDB жадыда TerminusDB - ашық кодты графтық деректер қоры және құжат сақтағышы. Деректерге қарсы қолданбаларды және білім графтарын бірлесіп құруға арналған. DDlogDDlog - инкрементті, жадыда, типтелген Datalog қозғалтқышы. Ол кіріс өзгерістеріне жауап ретінде шығысын инкрементті түрде жаңартатын бағдарламаларды жазуға өте қолайлы. DDlog бағдарламашысы қажетті кіріс-шығыс бейнелеуін декларативті түрде көрсетеді, Datalog диалектін пайдаланады. DDlog компиляторы содан кейін Rust тілінде тиімді инкрементті іске асырылымды синтездейді. DDlog дифференциалдық деректер ағыны кітапханасына негізделген. Java, C және Go үшін байланыстар ұсынылады. Tcl tclbdd Бинарлық шешім диаграммаларына негізделген іске асырылу. Tcl компиляторын оңтайландыруды қолдау үшін жасалған. Басқа немесе белгісіз тілдер bddbddb Стэнфорд университетінде жасалған Datalog іске асырылуы. Ол негізінен Java байт-кодын сұрау үшін пайдаланылады, соның ішінде үлкен Java бағдарламаларындағы нүктелерге талдау. Ол ішкі түрде BDD-ді пайдаланады. ConceptBase - Datalog сұраныс бағалаушыға негізделген дедуктивті және объектіге бағытталған деректер қоры жүйесі: триггерленген процедуралар және қайта жазулар үшін Prolog, (мета)модельдеу үшін «Telos» деп аталатын аксиоматикалық Datalog. Ол негізінен тұжырымдық модельдеу және метамодельдеу үшін пайдаланылады. 2 Clause
Еркін емес бағдарламалық қамтамасыз ету
Datomic - жаңа бұлт архитектураларында жұмыс істейтін, кеңейтілген, икемді және интеллектуалды қосымшаларды іске асыруға арналған таратылған деректер базасы. Ол Datalog тілін сұраныс тілі ретінде пайдаланады. FoundationDB pyDatalog үшін тегін деректер базасын байланыстыруды және оны пайдалану бойынша оқулықты ұсынады. Leapsight Semantic Dataspace (LSD) - жоғары қолжетімділік, қателерге төзімділік, операциялық қарапайымдық және кеңейтілгендік мүмкіндіктерін ұсынатын таратылған дедуктивті деректер базасы. LSD сұраулар жасау және логикалық қорытындылар шығару үшін Leaplog (Datalog іске асырылымы) қолданады және Leapsight компаниясы жасаған. LogicBlox – Datalog-тың веб-базалық бөлшек сауданы жоспарлау және сақтандыру салаларында қолданылатын коммерциялық нұсқасы. Profium Sense – Java тілінде жазылған, RDF стандартына сәйкес келетін графикалық деректер базасы. Ол пайдаланушы анықтаған ережелерді Datalog арқылы бағалауды қамтамасыз етеді. QL – Semmle компаниясы жасаған, Datalog-тың объектіге бағытталған коммерциялық нұсқасы, ол қауіпсіздік осал жерлерін анықтау үшін кодты талдауға арналған. SecPAL – Microsoft Research әзірлеген қауіпсіздік саясаты тілі. Stardog – Java тілінде іске асырылған графикалық деректер базасы. Ол RDF және барлық OWL 2 профильдерін қолдайды, кеңейтілген логикалық қорытындылар шығару мүмкіндіктерін, соның ішінде Datalog бағалауын ұсынады. StrixDB: SPARQL және Lua API интерфейсімен, сондай-ақ Datalog арқылы қорытындылар шығару мүмкіндіктеріне сәйкес келетін коммерциялық RDF графикалық қоймасы. Оны httpd (Apache HTTP Server) модулі ретінде немесе дербес қолдануға болады (бета нұсқалары Perl Artistic License 2.0 лицензиясымен шығарылған).
Пайдалануы және әсері
Даталогтың экспрессивтілігі шектеулі. Ол Тьюринг толық емес және бүтін сандар немесе жолдар сияқты негізгі дерек түрлерін қамтымайды. Бұл қарапайымдық теориялық тұрғыдан тартымды, бірақ бұл Даталогтың өзі бағдарламалау тілі немесе білімді ұсыну тілі ретінде сирек қолданылады дегенді білдіреді. Көптеген Даталог жүйелері Даталогтың маңызды кеңейтімдерін іске асырады. Дегенмен, Даталог осы іске асыруларға күшті әсер етеді және көптеген авторлар оларды осы мақалада ұсынылған Даталогтан ажыратуға көңіл бөлмейді. Сәйкесінше, осы бөлімде талқыланатын қолданыстар Даталог негізіндегі тілдердің нақты іске асырылымдарын қамтиды. Даталог деректерді интеграциялау, ақпаратты алу, желілік технологиялар, қауіпсіздік, бұлтты есептеу және машиналық оқыту салаларында қолданылған. Google үлкен деректерді өңдеу үшін Даталогқа кеңейтім жасады. Даталог статикалық бағдарлама талдауында қолданылды. Суффле диалектісі Java үшін көрсеткіштерді талдау және Scheme үшін басқару ағынын талдау үшін пайдаланылды. Кейбір статикалық талдауларды жазуды жеңілдету үшін Даталог SMT шешімдемелерімен біріктірілді. Flix диалектісі де статикалық бағдарлама талдауларын жазуға қолайлы. Көптеген қолданылатын деректер базасы жүйелері Даталог үшін жасалған идеялар мен алгоритмдерді қамтиды. Мысалы, SQL:1999 стандарты рекурсивті сұранымдарды қамтиды, ал Magic Sets алгоритмі (алғашқыда Даталог сұранымдарын жылдам бағалау үшін әзірленген) IBM-нің DB2 жүйесінде іске асырылған.
Тарих
Datalog-тың тарихы логикалық бағдарламалаудың пайда болуымен байланысты, бірақ 1977 жылы Герве Галлер мен Джек Минкер логика мен деректер базалары жөнінде семинар өткізген кезде, ол жекелеген сала ретінде маңызға ие болды. "Datalog" атауын Девид Майер ойлап тапқан деп саналады.