Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā...

33
1 Loģiskā programmēšana Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās uz formālo loģiku. Programmas izteiksmes tiek pierakstītas loģisku izteiksmju veidā un tajās tiek iekļauti fakti un likumi par noteiktu problēmu apgabalu jeb domēnu. Izmantot matemātisko loģiku, lai veidotu un izpildītu datorprogrammas veicināja arī lambda rēķini (lambda calculus), ko izstrādāja Alonso Čorčs (Alonzo Church) pagājušā gadsimta 30-ajos gados. Tomēr pirmo priekšlikumu izmantot loģikas formas rēķinus datorprogrammu realizēšanai ieteica Kordells Grīns (Cordell Green), imitējot LISP apakškopas programmu izpildi. Lambda rēķini (λ - calculus) ir vienkārša formāla aprēķinu sistēma matemātiskajā loģikā, izteiksmju vērtību noteikšanai, pamatojoties uz funkciju abstrakcijām, mainīgo piesaistēm (binding) un aizstāšanām jeb substitūcijām. Loģiskās programmēšanas pamatideju var definēt šādi: Algoritms =Loģika+ Vadība Tas nozīmē, ka ir dots algoritms problēmas risināšanai. Loģiskais komponents (logic component) nosaka zināšanas, kuras var tikt lietotas problēmas

Transcript of Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā...

Page 1: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

1

Loģiskā programmēšana

Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās uz formālo loģiku. Programmas izteiksmes tiek pierakstītas loģisku izteiksmju veidā un tajās tiek iekļauti fakti un likumi par noteiktu problēmu apgabalu jeb domēnu.

Izmantot matemātisko loģiku, lai veidotu un izpildītu datorprogrammas veicināja arī lambda rēķini (lambda calculus), ko izstrādāja Alonso Čorčs (Alonzo Church) pagājušā gadsimta 30-ajos gados. Tomēr pirmo priekšlikumu izmantot loģikas formas rēķinus datorprogrammu realizēšanai ieteica Kordells Grīns (Cordell Green), imitējot LISP apakškopas programmu izpildi. Lambda rēķini (λ - calculus) ir vienkārša formāla aprēķinu sistēma matemātiskajā loģikā, izteiksmju vērtību noteikšanai, pamatojoties uz funkciju abstrakcijām, mainīgo piesaistēm (binding) un aizstāšanām jeb substitūcijām.

Loģiskās programmēšanas pamatideju var definēt šādi:

Algoritms=Lo ģ ika+Vad ī ba

Tas nozīmē, ka ir dots algoritms problēmas risināšanai. Loģiskais komponents (logic component) nosaka zināšanas, kuras var tikt lietotas problēmas risināšanā. Vadības komponents (control component) nosaka veidu kā šīs zināšanas var tikt lietotas, lai nonāktu pie problēmas atrisinājuma.Loģiskajā programmēšanā izstrādātājs apraksta algoritma loģisko komponenti, lietojot matemātiskās loģikas notāciju. Vadības komponents var tikt realizēts:

1) izmantojot atsevišķu vadības valodu;2) tas var tikt definēts pašā loģiskās programmēšanas sistēmā.

Loģisko programmēšanas priekšrocībām ir tā, ka tajā var veikt vaicājumus, uzdodot ierobežojumus un izmantojot vienotu formālo apstrādes mehānismu. Ierobežojumu pārbaudei tiek lietoti vienoti izveduma mehānismi. Tas ļauj izdarīt sarežģītākus spriedumus par dotajiem faktiem.

Page 2: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

2

Pirmās kārtas predikātu loģika

Loģiskās programmēšanas valodās tiek izmantota pirmās kārtas predikātu loģika. Tā ir pamats šīm loģiskajiem secināšanas mehānismiem. Pirmās kārtas predikātu loģikas alfabēts sastāv no:

1) konstantes, kuru nosaukumi ir simbolu virknes un sākas ar mazo burtu;2) mainīgie, kuru nosaukumi ir simbolu virknes un sākas ar lielo burtu vai

pasvītrojuma simbolu „_”;3) n-vērtīgo funkciju un predikātu (izteiksme, kura ir „patiesa” vai

„nepatiesa”) nosaukumi;4) operatori ⋀ ,⋁ ,¬ ,→, ↔;5) universālais kvantifikators ∀ un eksistences kvantifikators ∃;6) papildus vadības simboli.

Loģiskās programmēšanas objekti jeb termi (izteiksmes, kuras veidotas no konstanšu, mainīgo un operāciju nosaukumiem) var būt konstante, mainīgais vai funkcija:

f ( t1 , …,t n ) ,kur f - n-vērtīgas funkcijas simbols;t i , i=1. . n - termi.Formulu izteiksmes var būt sekojošas:

1) atomāra formula jeb atoms p(t 1 ,…, t n) ,

kur p - n-vērtīga predikāta nosaukums;t i , i=1. . n - termi;

2) ja F un G ir formulas, tad arī ¬ F , F G, F G ,F →G , un F ↔ G ir formulas;3) ja F ir formula un X ir mainīgais, tad arī ∀ X F( X) un ∃ X F (X ) ir formulas;

Likums ir simbolu secība, kas savienoti ar konjunkcijām Error: Referencesource not found:

A1∨…∨ An∨B1∨…∨Bm ,

kur A ,B - simboli;n , m – simbola numurs.

Page 3: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

3

Loģiskās programmēšanas pamatprincipiLoģiskā programmēšana ir programmēšanas paradigma, kuras pamatā ir formāla loģika. Loģiskā programmēšanas valodā rakstīta programma ir loģiskā veidā rakstītu teikumu kopa, kas izsaka faktus un noteikumus par kādu problēmu domēnu. Galvenās loģiskās programmēšanas valodu saimes ir Prolog, atbilžu kopas programmēšana (ASP) un Datalog. Visās šajās valodās noteikumi ir rakstīti kā teikumi jeb klauzulas (clauses):

H :- B1, …, Bn.un deklaratīvi tiek lasīti kā loģiskā implikācija (sekas):

H ja B1 un … un Bn.H tiek saukts par likuma galvu (head) un B1, …, Bn tiek saukts par ķermeni (body).Fakti ir likumi, kuriem nav ķermeņa: HVisvienkāršākajā gadījumā, kurā H, B1, …, Bn ir visas atomu formulas, šīs klauzulas sauc par noteiktām klauzulām vai Horna klauzulām. Tomēr pastāv daudzi šīs vienkāršās lietas paplašinājumi, un vissvarīgākais ir gadījums, kad nosacījumi klauzulas tekstā var būt arī atomformulu negācijas.

ASP un Datalog loģiskajām programmām ir tikai deklaratīvs lasījums, un to izpilde tiek veikta ar pierādījumu procedūru vai modeļa ģeneratoru, kura rīcība nav pakļauta programmētāja kontrolei.Prolog valodu saimē loģikas programmām ir arī procedurālā interpretācija, kā mērķu samazināšanas procedūrām:

atrisināt H, jāatrisina B1, un ... un jāatrisina Bn.

Page 4: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

4

Horna teikums

Teikums, kuram implikācijas bultas labajā pusē ir viens vai vairāki simboli un vismaz viens pozitīvs simbols ir kreisajā, tiek saukts par Horna teikumu. Simbols implikācijas kreisajā pusē tiek saukts par galvu. Simboli labajā pusē tiek saukti par teikuma ķermeni.Tiek izmantoti šādi programmas teikumi (programm clause):

1) vienkāršs teikums (unit clause) ar tukšu ķermeni p ← vai arī p. Tas tiek izmantots faktu definēšanai. Piemēram:

dzimums (rasma , sieviete)dzimums ( j ānis , v ī rietis)ā⃗ ks( j ānis , zane)

ā⃗ ks( inese , zane )

2) likuma teikums: p ←qm , …, qn. Piemēram::m ā te(M , X)← ā⃗ks (M , X) , dzimums(M ,sieviete): t ē vs (T , X ):← ā⃗ ks(T , X) , dzimums(T , v ī rietis):d ē ls(D , X)← ā⃗ ks (X , D), dzimums(D, v ī rietis):meita(M , X)← ā⃗ ks (X , M ) , dzimums(M , sieviete)

3) mērķa teikums ar tukšu galvu: ← qm , …,qn. Piemēram::←mā te(Y , zane )

:← t ē vs (Z , zane)

Page 5: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

5

Predikāts

Predikāts ir teikumu kopa ar kopēju predikāta simbolu un saistības simbolu. Predikāts ir definēts ektensionāli (extensionaly), ja tā definīcija sastāv tikai no faktiem. Citādi tas ir intensionāls (intensionall).

Likums p ←q1 ,…, qn ir rekursīvs, ja tas savā ķermenī satur simbolu q i ar to pašu predikātu simbolu, kā p.

Predikāts ir rekursīvs, ka tas satur rekursīvu likumu. Divi predikāti p un q ir savstarpēji rekursīvi (mutually recursive), ja p sava likuma ķermenī satur q ( „p izsauc q”) un q saturp likuma ķermenī.

Page 6: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

6

Loģikas programmēšanas programmas

Loģiskajā programmēšanā programmas tiek lietotas, lai pierādītu izvirzītās teorēmas patiesumu vai nepatiesumu. Izpilde sastāv no pierādījuma atrašanas teorēmai, izmantojot programmā definētos teikumus.

Programmas izpilde var tikt veikta:1) no augšas uz leju (top-down) - sākas ar doto mērķi un lieto rezolūciju.

Izpildē no augšas uz leju sākumpunkts ir mērķis, kas ir jāpierāda. Katrā izpildes solī mērķis tiek aizvietots ar mērķa apakšmērķi, kas var tikt unificēts ar mērķi. Šī izpildes stratēģija tiek saukta arī par atpakaļ saistīšanu (backward chaining) tāpēc ka izpildes gaita ir no likuma galvas “←” implikācijas pretējā virzienā.

2) no lejas uz augšu (bottom up) - sākas ar programmas teikumu fiksētā punktā izskaitļošanu. Izpildē no lejas uz augšu sākumpunkts ir faktu kopa. Katrā izpildes solī faktu kopa tiek salīdzināta ar likumu galvām, kuru ķermeņi ir patiesi. Izpilde beidzas, ja sākotnēji dotais mērķis ir iekļauts atvasināto faktu kopā. Izpildes virziens seko “←” implikācijai un tāpēc to sauc arī par uz priekšu saistīšanu (forward chaining).

Rezolūcijas procesu var attēlot, izmantojot rezolūcijas koku.

Rezolūcijas koka sakne saturs doto mērķi. Virsotnes attēlo starprezultātus (stāvokļus rezolūcijas procesa laikā) un loki parāda atvasināšanas soļus.

Page 7: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

7

Loģikas programmēšanas valoda Prolog

Loģiskās programmēšanas valoda Prolog ir “Eiropas produkts”. Tā izstrādi 1970. gadā uzsāka Alans Kulmeroers un Filips Rusels (Alan Coulmerauer, Philippe Roussel). Autori vēlējās izstrādāt valodu, kura uz dotā teksta bāzes spētu veikt loģiskus secinājumus. No tā arī veidojās valodas nosaukums: “PROgramming in LOGic”. Valoda tika izstrādāta Marseļā (Francijā) 1972. gadā. Lai varētu veidot loģiskus izvedumus, tika izmantots Edinburgas Universitātes līdzstrādnieka Kovaļska (Kowalski) modelis, un tāpēc Prolog programmēšanas valoda asociējas ar Edinburgas vārdu.

Prolog pirmā realizācija tapa 1972. gadā, tomēr sakarā ar efektīvu realizāciju trūkumu Prolog izplatība līdz 1980. gadam bija ļoti vāja.

Prolog ir loģikas programmēšanas valoda, kas tika veidota simboliskas (nevis skaitliskas) informācijas apstrādei. Galvenā un acīmredzamā Prolog atšķirība no “parastajām” programmēšanas valodām (C++, Pascal, Basic) ir programmas pieraksta koncepcija. Programma satur nevis izpildāmo instrukciju virknes, bet gan problēmas specifikāciju definējuma formā, no kuras dators pats nosaka darbību izpildes secību.

Prolog programmēšana nosaka pilnīgi atšķirīgu domāšanas veidu un pieeju programmēšanai. Atsevišķos gadījumos “tradicionālo” programmēšanas valodu zināšana var pat traucēt Prolog apguvi. Pieejas atšķirības ir tik būtiskas, ka Prolog tiek pieskaitīta citai programmēšanas paradigmai.

Page 8: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

8

Imperatīvā un deklaratīvā programmēšanas paradigma

„Programmēšanas paradigma (programming paradigm) ir programmēšanas veids, virziens vai pieeja plašākā nozīmē, kas nosaka savu atšķirīgu priekšstatu par to, kas vispār ir programmēšana”. Vairums pazīstamo programmēšanas valodu pieder pie imperatīvās paradigmas.

Imperatīvā (jeb procedurālā) paradigma reprezentē tradicionālo veidu, kā notiek programmēšanas process. Imperatīvās paradigmas ietvaros programmēšanas process ir komandu virknes pierakstīšana noteiktu operāciju veikšanai. Imperatīvo paradigmu pārstāv mašīnkoda valodas, asambleri, kā arī, piemēram, FORTRAN, COBOL, BASIC, C, Pascal.

Deklaratīvā paradigma, kuru pārstāv arī Prolog, atšķirībā no imperatīvās, nenosaka, kā izpildīt noteiktu uzdevumu, bet gan “kas ir problēma” vai arī “kā problēma varētu tikt reprezentēta”. Deklaratīvās programmēšanas paradigmas pārstāvis Prolog no tās realizācijas aspekta tiek saukts arī par loģisko programmēšanas valodu. Citas programmēšanas paradigmas ir funkcionālā, objektorientētā un šablonu.

Page 9: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

9

Valodas Prolog īpašības

Prolog programma sastāv no divu veidu konstrukcijām – faktiem un likumiem. Lietotājs definē vaicājumu, uz kuru Prolog sistēmas atbilde ir “jā” vai “nē”. Ja atbilde ir “jā”, tad papildus tam tiek izdrukātas arī mainīgo vērtības, pie kurām atbilde ir “jā”.

Darbošanās ar valodu Prolog prasa rekursīvu domāšanu. Prolog kā interpretators tradicionālajā variantā ir interaktīva sistēma, ar kuru komunikācija notiek pa atsevišķiem teikumiem, kur katrs teikums beidzas ar punktu (.).

Prolog programmēšanas valodas galvenās pielietošanas sfēras: 1) lietotņu prototipu ātra izstrāde;2) automātiskā tulkošana no vienas valodas uz citu;3) dabīgas valodas interfeisu izveide priekš esošām sistēmām;4) simboliskie aprēķini priekš vienādojumu risināšanai, diferencēšanai un

integrēšanai;5) dinamisku relāciju datu bāzes projektēšana;6) ekspertsistēmas un ekspertsistēmu čaulas;7) ražošanas procesu automatizēta vadība;8) automātisks teorēmu pieradījums;9) pusautomātiskā sarakstu sastādīšana;10) automatizētas projektēšanas sistēmas, kas balstās uz

programmatūras zināšanām;11) zināšanas servera organizēšana, pie kura var rīkoties klientu

lietojumprogramma, kura tiek uzrakstīta jebkurā programmēšanas valodā.

Sfēras, kurām Prolog programmēšanas valoda nav domāta:1) statistikas aprēķinu veikšana;2) audio un video datu apstrāde;3) draiveru (vadības programmu) veidošana.

Page 10: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

10

Loģikas programmēšanas valoda Datalog

Datalog ir deklaratīva loģiskās programmēšanas valodas Prolog apakškopa. Tā bieži tiek izmantota kā vaicājumu valoda deduktīvajās datu bāzēs. Pēdējos gados Datalog tiek plaši lietota datu integrācijai, informācijas ieguvei un analīzei. Tās pirmsākumi veidojās jau kopā ar loģikās programmēšanas pamatkonceptu izstrādi. Popularitāti Datalog ieguva pagājušā gadsimta septiņdesmitajos gados, pateicoties Ervē Gelleira (Herve Gaillaire) un Džeka Minker (Jack Minker) aktivitātēm.

Datalog matemātiskā bāze arī ir pirmās kārtas predikātu loģika. Tomēr Datalog valoda neapmierina visus Tūringa (Turing) testa nosacījuus. Tāpēc Datalog tiek izmantots konkrēta, specifiska domēna ietvaros. Lai nodrošinātu Datalog efektivitāti, tiek izmantoti algoritmi un metodes ar augstu ražību. Piemēram, Maģiskās kopas (Magic set) algoritms, tabultipa (tabled) loģiskā programmēšanas valoda, SLG rezolūcija.

Datalog izstrādē realizētās idejas un algoritmi tiek plaši lietotās datu bāzes sistēmās. Piemēram, SQL:1999 standarts ietver Datalog rekursīvo vaicājumu izpildes algoritmu un Maģiskās kopas algoritmu, ātrākai vaicājumu izpildei. Pēdējais minētais algoritms ir iekļauts arī datu bāzes sistēmā IBM DB2. Datalog izveduma mehānisms ir ieviests arī specializētā datu bāzes sistēmā Intellidimension. Šī sistēma ir izstrādāta speciāli semantiskajam tīmeklim.

Page 11: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

11

Datalog atšķirības no Prolog valodas

Atšķirībā no loģikas programmēšanas valodas Prolog, Datalog programmā:1) likumu formulējumus var norādīt jebkurā secībā;2) garantēti tiek iegūts gala rezultāts, tāpēc netiek lietots Prolog operators

„nogriezt” (cut);3) nevar izmantot saliktus predikātu termus. Piemēram, p(1 ,2) ir

pieļaujami, bet p( f (1),2) – nē;4) papildus tiek noteikti ierobežojumi negācijas un rekursijas

izmantojumam faktu hierarhijās;5) katram mainīgajam s, kurš ir teikuma galvā, jābūt arī teikuma ķermeņa

ne aritmētiska pozitīva literāļa sastāvā.6) katram mainīgajam, kurš ir teikuma ķermeņa negatīvā literālī, ir arī

kādā pozitīvā literālī.

Datalog pаplašina relāciju vаlοdаs, neiekļаujοt rekursīvο negāciju. Dаžаs οptimizācijаs tehnikаs, izstrādātаs priekš Datalog ir lietοtаs arī lаi οptimizētu SQL vаicājumus.

Datalog likumi ir Hοrnа teikumi, kаs аpmierinа virkni īpаšību. Termi, kаs pаrādās izteiksmēs sаstāv nο kοnstаnšu simbοliem un mаinīgο simbοliem.

H (v ) ← B1 (u1 ) , …, Bn (un ) ,kur n ≥ 1;H ,B1 , ..., Bn - predikāti; v , u1 ,... , un - termu kοrtežs (kοrtežs nο kοnstаntēm vаi mаinīgаjiem).Jāievērο, kа H jābūt predikātаm, kur B1 ,... ,Bn vаr būt ekstensiοnāls vаi intensiοnāls predikāts. Datalog likumiem ir jābūt ierοbežοtiem (rаnge restricted), tаs ir - kаtrаm mаinīgаjаm ir jābūt stаrp mаinīgаjiem u1 ,... , un. Šis un nοsаcījums, kа kаtrаm fаktаm piederοšаm Datalog dаtubāzei ir jābūt pаmаt fаktаm, nοdrοšinа tikаi gаlīgu skаitu fаktu iegūšanu.

Page 12: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

12

Risinājumu meklēšanas atšķirības Prolog un Datalog valodās

Datalog gаlvenās аtšķirībаs nο Prolog ir tieši vаicājumu jοmā. Datalog mērķis ir аtrаst visus risinājumus. Prolog mērķis ir аtrаst vismаz vienu аtrisinājumu. Datalog semаntikа sаkrīt аr kοpu οrientētο vаicājumu nοzīmi dаtubāzēs. Mērķi lοģiskаjā prοgrаmmēšаnā ir kοrtežu οrientēti. Tie ir bāzēti uz vienаs аtbildes sniegšаnu nο visаs аtbilžu kοpаs. Nο аpаkšаs uz аugšu semаntikа ir vаirāk piemērοtа dаtubāzu vаicājumiem, tοmēr tаi ir vаirāki trūkumi. Tā neņem vērā kοnstаntes, kаs pаrādās mērķī, tādejādi mērķа nοvērtēšаnаs prοcess vаr ģenerēt dаudz lielāku fаktu kοpu nekā būtu vajadzīgs, izpildοt vаicājumu.

Loģiskās programmēšanas valoda Datalog ir nejūtīga pret likumu un predikātu kārtību likumοs. Piemēram, apskatīsim divas programmas:

1. programmaSencis(X ,Y ) : ā⃗ ks( X ,Y ).Sencis(X ,Y ) : ā⃗ ks( X ,Z) , sencis (Z , Y ).2. prοgrаmmаSencis(X ,Y ) : ā⃗ ks( X ,Z) , sencis (Z , Y ).Sencis(X ,Y ) : ā⃗ ks( X ,Y ).Uzdotais vaicājums (mērķis) ir sekojošs:? sencis( X ,Y ).

Аbаs prοgrаmmas ir sintaksiski korektas gаn Prolog gаn Datalog valodās. Datalog ir nejūtīgs pret likumu un predikātu kārtību. Tāpēc tаs аtgriezīs pаreizο аtbildi (vecāku – bērnu sаrаkstu) аbοs vаriаntοs. Prolog interpretаtοrs izvаdīs sаgаidāmοs rezultātus tikаi 1. programmas gаdījumā. 2. programmā izpildοt vаicājumu sāksies bezgаlīga rekursijа. Tаs ir viens nο Prolog lieliem trūkumiem. Prοgrаmmēšаnаs gаitā ir jādοmā vаi nepаstāv iespējа izveidοties bezgаlīgаi rekursijаi vаi cikliem.

Page 13: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

13

Datalog un Prolog sаlīdzinājums

Loģiskās programmēšanas valoda Prolog

Loģiskās programmēšanas valoda Datalog

Pārmeklēšana dziļumā Pārmeklēšana plašumāApstrāde pa vienam kortežam Orientācija uz kopu apstrādi

Jūtība pret likumu sakārtojumu Nav jūtības pret likumu sakārtojumu

Speciālie predikāti Nav speciālu predikātuFunkcionālie simboli Nav funkcionālu simbolu

Pāreja no Prolog uz Datalog valodu ir turpinājums evοlūcijаi nο prοcedūrοrientētаs vаlοdаs uz neprοcedurālu, kаs sаvukārt bаlstītа uz kοpu аpstrādi. Šāds prοcess ir rаksturīgs dаtubāzu evοlūcijаi nο hierаrhiskām un tīklveidа dаtubāzēm uz relāciju dаtubāzēm un tālāk uz mūsdienu relāciju-οbjektu un οbjektu dаtubāzēm. Datalog ir deklаrаtīvа vаlοdа un tās definīcijа nаv аtkаrīgа nο izvēlētās pārmeklēšаnаs strаtēģijаs. Datalog mērķus izanalizē izmаntοjοt pārmeklēšаnu plаšumā. Prolog strаtēģija ir pārmeklešаnа dziļumā, kas rada atbildes izmаntοjοt kοrtežus. Datalog realizācija sаsаucаs аr vаicājumu vаlοdu pаmаtpieeju relāciju dаtu bāzēm. Šī īpаtnībа tomēr ierοbežο Datalog, kā prοgrаmmēšаnаs vаlοdаs pielietοšаnаs iespējаs.

Page 14: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

14

Abductive logic programmingAbductive logic programming is an extension of normal Logic Programming that allows some predicates, declared as abducible predicates, to be "open" or undefined. A clause in an abductive logic program has the form:H :- B1, …, Bn, A1, …, An.where H is an atomic formula that is not abducible, all the B i are literals whose predicates are not abducible, and the Ai are atomic formulas whose predicates are abducible. The abducible predicates can be constrained by integrity constraints, which can have the form:false :- B1, …, Bn.where the Bi are arbitrary literals (defined or abducible, and atomic or negated). For example:canfly(X) :- bird(X), normal(X).false :- normal(X), wounded(X).bird(john).bird(mary).wounded(john).where the predicate normal is abducible.Problem solving is achieved by deriving hypotheses expressed in terms of the abducible predicates as solutions of problems to be solved. These problems can be either observations that need to be explained (as in classical abductive reasoning) or goals to be solved (as in normal logic programming). For example, the hypothesis normal(mary) explains the observation canfly(mary). Moreover, the same hypothesis entails the only solution X = mary of the goal of finding something that can fly::- canfly(X).Abductive logic programming has been used for fault diagnosis, planning, natural language processing and machine learning. It has also been used to interpret Negation as Failure as a form of abductive reasoning.

Page 15: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

15

Metalogic programmingBecause mathematical logic has a long tradition of distinguishing between object language and metalanguage, logic programming also allows metalevel programming. The simplest metalogic program is the so-called "vanilla" meta-interpreter:

solve(true). solve((A,B)):- solve(A),solve(B). solve(A):- clause(A,B),solve(B).

where true represents an empty conjunction, and clause(A,B) means there is an object-level clause of the form A :- B.

Metalogic programming allows object-level and metalevel representations to be combined, as in natural language. It can also be used to implement any logic that is specified by means of inference rules. Metalogic is used in logic programming to implement metaprograms, which manipulate other programs, databases, knowledge bases or axiomatic theories as data.

Page 16: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

16

Constraint logic programming

Constraint logic programming combines Horn clause logic programming with constraint solving. It extends Horn clauses by allowing some predicates, declared as constraint predicates, to occur as literals in the body of clauses. A constraint logic program is a set of clauses of the form:

H :- C1, …, Cn B1, …, Bn.where H and all the Bi are atomic formulas, and the Ci are constraints. Declaratively, such clauses are read as ordinary logical implications:H if C1 and … and Cn and B1 and … and Bn.However, whereas the predicates in the heads of clauses are defined by the constraint logic program, the predicates in the constraints are predefined by some domain-specific model-theoretic structure or theory.Procedurally, subgoals whose predicates are defined by the program are solved by goal-reduction, as in ordinary logic programming, but constraints are checked for satisfiability by a domain-specific constraint-solver, which implements the semantics of the constraint predicates. An initial problem is solved by reducing it to a satisfiable conjunction of constraints.The following constraint logic program represents a toy temporal database of john's history as a teacher:teaches(john, hardware, T) :- 1990 ≤ T, T < 1999.teaches(john, software, T) :- 1999 ≤ T, T < 2005.teaches(john, logic, T) :- 2005 ≤ T, T ≤ 2012.rank(john, instructor, T) :- 1990 ≤ T, T < 2010.rank(john, professor, T) :- 2010 ≤ T, T < 2014.Here ≤ and < are constraint predicates, with their usual intended semantics. The following goal clause queries the database to find out when john both taught logic and was a professor::- teaches(john, logic, T), rank(john, professor, T).The solution is 2010 ≤ T, T ≤ 2012.Constraint logic programming has been used to solve problems in such fields as civil engineering, mechanical engineering, digital circuit verification, automated timetabling, air traffic control, and finance. It is closely related to abductive logic programming.

Page 17: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

17

Concurrent logic programmingConcurrent logic programming integrates concepts of logic programming with concurrent programming. Its development was given a big impetus in the 1980s by its choice for the systems programming language of the Japanese Fifth Generation Project (FGCS).

A concurrent logic program is a set of guarded Horn clauses of the form:

H :- G1, …, Gn | B1, …, Bn.

The conjunction G1, … , Gn is called the guard of the clause, and | is the commitment operator. Declaratively, guarded Horn clauses are read as ordinary logical implications:

H if G1 and … and Gn and B1 and … and Bn.

However, procedurally, when there are several clauses whose heads H match a given goal, then all of the clauses are executed in parallel, checking whether their guards G1, … , Gn hold. If the guards of more than one clause hold, then a committed choice is made to one of the clauses, and execution proceedes with the subgoals B1, …, Bn of the chosen clause. These subgoals can also be executed in parallel. Thus concurrent logic programming implements a form of "don't care nondeterminism", rather than "don't know nondeterminism".

For example, the following concurrent logic program defines a predicate shuffle(Left, Right, Merge) , which can be used to shuffle two lists Left and Right, combining them into a single list Merge that preserves the ordering of the two lists Left and Right:

shuffle([], [], []).shuffle(Left, Right, Merge) :- Left = [First | Rest] | Merge = [First | ShortMerge], shuffle(Rest, Right, ShortMerge).shuffle(Left, Right, Merge) :- Right = [First | Rest] | Merge = [First | ShortMerge], shuffle(Left, Rest, ShortMerge).

Here, [] represents the empty list, and [Head | Tail] represents a list with first element Head followed by list Tail, as in Prolog. (Notice that the first occurrence of | in the second and third clauses is the list constructor, whereas the second occurrence of | is the

Page 18: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

18

commitment operator.) The program can be used, for example, to shuffle the lists [ace, queen, king] and [1, 4, 2] by invoking the goal clause:

shuffle([ace, queen, king], [1, 4, 2], Merge).

The program will non-deterministically generate a single solution, for example Merge = [ace, queen, 1, king, 4, 2].

Arguably, concurrent logic programming is based on message passing and consequently is subject to the same indeterminacy as other concurrent message-passing systems, such as Actors (see Indeterminacy in concurrent computation). Carl Hewitt has argued that, concurrent logic programming is not based on logic in his sense that computational steps cannot be logically deduced [Hewitt and Agha, 1988]. However, in concurrent logic programming, any result of a terminating computation is a logical consequence of the program, and any partial result of a partial computation is a logical consequence of the program and the residual goal (process network). Consequently, the indeterminacy of computations implies that not all logical consequences of the program can be deduced.[neutrality is disputed]

Page 19: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

19

Concurrent constraint logic programming

Concurrent constraint logic programming combines concurrent logic programming and constraint logic programming, using constraints to control concurrency. A clause can contain a guard, which is a set of constraints that may block the applicability of the clause. When the guards of several clauses are satisfied, concurrent constraint logic programming makes a committed choice to the use of only one.

Inductive logic programming

Inductive logic programming is concerned with generalizing positive and negative examples in the context of background knowledge: machine learning of logic programs. Recent work in this area, combining logic programming, learning and probability, has given rise to the new field of statistical relational learning and probabilistic inductive logic programming.

Higher-order logic programming

Several researchers have extended logic programming with higher-order programming features derived from higher-order logic, such as predicate variables. Such languages include the Prolog extensions HiLog and λProlog.

Linear logic programming

Basing logic programming within linear logic has resulted in the design of logic programming languages that are considerably more expressive than those based on classical logic. Horn clause programs can only represent state change by the change in arguments to predicates. In linear logic programming, one can use the ambient linear logic to support state change. Some early designs of logic programming languages based on linear logic include LO [Andreoli & Pareschi, 1991], Lolli, ACL, and Forum [Miller, 1996]. Forum provides a goal-directed interpretation of all of linear logic.

Page 20: Loģiskā programmēšana - datubaze.files.wordpress.com€¦  · Web viewLoģiskā programmēšana. Loģikas programmēšanas (logical programming) pamatsistēma jeb paradigma balstās

20

Object-oriented logic programming

F-logic extends logic programming with objects and the frame syntax. A number of systems are based on F-logic, including Flora-2, FLORID, and a highly scalable commercial system Ontobroker.

Logtalk extends the Prolog programming language with support for objects, protocols, and other OOP concepts. Highly portable, it supports most standard-complaint Prolog systems as backend compilers.

Transaction logic programming

Transaction logic is an extension of logic programming with a logical theory of state-modifying updates. It has both a model-theoretic semantics and a procedural one. An implementation of a subset of Transaction logic is available in the Flora-2 system. Other prototypes are also available.