AKILLI VERİ TABANLARI YARATMAYA DOĞRU

Prof.Dr.Timur Karaçay

IBM Bilgisayar Destekli Eğitim

Araştırma ve Geliştirme Merkezi

Ankara

Giriţ

Genel amaçlı programlama dilleri ile yaratılan büyük veri tabanları'nın başarıyla kullanıldığı iyi bilinmektedir. Klasik veri tabanları çok büyük olabilir; çok sayıda kullanıcı tarafından paylaşılabilir. Veri tabanı uygun bir kaynak programla kolayca güncelleştirilebilir; veriye kolayca erişilebilir. Günümüzde çok gelişmiş olan ve gene de gelişmesini sürdüren bu sistemde sorgulama (query) yapmak, yani mevcut bilgilere erişmek için, istenen işlevi yapacak kaynak programın yazılması zorunludur. Sorgulama eylemini yapacak kaynak program, ilgili veriye giden en kısa yolu izleyebilir; dolayısıyla sorgulama hızlıdır. Ancak sorgulamayı yapacak kaynak programın öngörmediği hiçbir bilgiyi bu sistemden elde etme olanağı yoktur. Sistemin kendi kendisine, mevcut bilgilere dayalı usavurmalar (logical reasoning) yaparak yeni bilgiler üretme ve mantıksal sonuçlara varma yeteneği yoktur. Sistemden doğru bilgiyi almak için, kaynak program belirli önlemler koyabilir ve bu önlemlerin etkinliği ölçüsünde doğru verilere erişilir.

Mantıksal programlama ya da yapay us (artificial intelligence) (AI) adlarıyla bilinen sistemlerde ise, sisteme önceden girilen veriler (buna Dış Veri Tabanı diyelim) arasında var olan mantıksal ilişkiler, ayrı bir program yazımına gerek kalmadan, sistem tarafından keşfedilip kullanıcıya sunulmaktadır. Başka bir deyişle, yapay bir us yaratılmaktadır. Bu us, temel veri tabanındaki bilgilere dayalı usavurmalar yardımıyla yeni bilgiler üretebilmekte ve bir insan zekasına benzer olarak, mantıksal sonuçlar çıkarabilmektedir. Veri tabanına yanlış bilgi girişi sistem tarafından önlenir. Sorgulama baştan sona ya da sondan başa kadar bütün bilgiler taranarak yapıldığı için, bilgilerin doğruluğu ve tamlığı kesindir. Doğal olarak, bu yetenek mantıksal programlama sistemlerinin üstünlüğünü ve önemini artırmaktadır.

Mantıksal programlama sistemlerinin zayıf yanları şunlardır: Akıl yürütme diyeceğimiz süreci başarıp, istenen bilgiye ulaşması, mevcutlara dayalı yeni bilgiler üretmesi ya da usavurma yapabilmesi için, sistemin Dış Veri Tabanını anabelleğe yüklemesi ve ürettiği yeni bilgileri de sürekli olarak anabellekte tutması gerekmektedir. Böyle olması, bir yandan, çok büyük veri tabanları yaratmaya engel olurken, öte yandan da bilgi arama ve usavurma sürecini yavaşlatmaktadır. Bütün bunların yanında, mantıksal programlama sistemleri tek kullanıcılıdır.

Dolayısıyla, günümüzde karşı karşıya olduğumuz en önemli sorunlardan birisi, klasik veri tabanları yönetim sistemleri ile mantıksal programlama sistemlerinin birleştirilip, her iki sistemin iyi niteliklerini taşıyan yeni ve kullanışlı bütünleşik sistemlerin yaratılmasıdır. Böylece, çok sayıda bilgi içeren büyük veri tabanlarından, kaynak programın önceden öngörmediği mantıksal ilişkileri hızla ve kolayca elde etme olanağı doğacaktır. Böyle bir olanağın doğması bilgiye erişim sürecini çok kolaylaştıracak; erişilen bilginin doğruluğunu ve tamlığını kesinleştirecektir.

Bunun doğal sonucu olarak, toplumların bilgi toplama ve bilgi aktarmada kullandıkları klasik yöntemler büyük ölçüde değişime uğrayacaktır. Bu değişime eğitim sistemleri ve okullar da ister istemez katılacaktır.

Konuya girmeden önce, okuru yönlendirmek amacıyla, bu makalenin içeriğini ve bu içeriğin nasıl gruplandırıldığını açıklamakta yarar vardır. Birinci bölümde mantık ve belirsizlik, ikinci bölümde mantıksal programlamanın bir sorgulama dili olarak kullanılması, üçüncü bölümde bir mantıksal programlama ile bir veri tabanının eşlenerek akıllı veri tabanı sistemlerinin nasıl yaratıldığı açıklanmıştır. Dördüncü ve son bölümde ise, akıllı veri tabanlarına örnek olarak alınan datalog'un matematiksel dayanakları ortaya konulmuştur. Okur bildiği bölümleri atlıyarak, dilediği bölümü okuyabilir. Ayrıca prolog'un alfabesinin bilindiğini varsayıyor ve dolayısıyla değişken, sabit, gerçek (fact), önbağ (predicate), hüküm (clause) vb terimleri yeniden tanımlamaya gerek görmüyoruz.

1. Mantık ve Belirsizlik

Akıllı Veri Tabanlarının temellerini iyi anlıyabilmek için, insanoğlunun bu aşamaya gelirken geçtiği uzun ve yorucu yolu anımsamakta yarar vardır:

Klasik Mantık

Eski Yunan düşünürü Aristotle (M.Ö.384-322) mantıkla uğraşan ilk kişi olarak bilinir. Syllogistic ya da klasik mantık diye adlandırılan kuramın büyük bir bölümünün yaratıcısıdır. Bugün bile değerini koruyan ve uygulama alanı bulan klasik mantık, bir usavurmalar dizisi sonunda doğru ya da yanlış sonuçlara ulaţma sanatıdır. Bunun tipik bir örneği

Kral bir insandır;

Bütün insanlar ölür;

Öyleyse kral da ölür.

biçimindeki bir usavurmalar zinciridir. Klasik mantık, birçok yönden, insan sağduyusunun biçimselleşmişi gibidir. Bu nedenle, konuşulan dile büyük ölçüde bağımlıdır. Öte yandan, hemen her dilde bir sözcüğün farklı anlamlara ya da farklı sözcüklerin eş anlamlara sahip olduğu bilinmektedir. Dolayısıyla, akıl yürütme sürecinde kullanılan sözcükler farklı anlamlara, farklı sonuçlara yorumlanabilir. Bu tutarsızlık, insanoğlunu mantıkta daha kesin yöntemler aramaya itti ve simgesel mantığın yaratılmasına neden oldu.

Boole mantığı

Usavurma sürecini konuşulan dilden bağımsız kılarak ona matematiksel bir yapı kazandırmaya çalışan ilk kişi Alman matematikçisi G.W.Leibniz (1646-1717) dir. Yazık ki Leibniz'in yaptığı işin önemi ölümünden iki yüzyıl sonra anlaşılabilmiştir. İngiliz matematikçisi George Boole (1815-1864) konuyu yeniden ele alarak bugünkü iki-değerli mantığın yapısını tamamen matematiksel temellere oturtmuş ve klasik mantıktaki tutarsızlığı yokeden simgesel mantığı yaratmıştır. Buna Boole mantığı, Boole cebiri vb adlar da verilmektedir. Simgesel mantığın üstünlüğü şudur: Akıl yürütmede kullanılan kavramları sözcüklerden, nesnelerden, duyulardan arındırmakta, onları soyut simgelerle temsil etmekte ve o simgeler arasında matematiksel işlemler kullanarak akıl yürütme sürecini kesin sonuca ulaştırmaktadır.

Predicate calculus

Simgesel mantığın birisi ötekine kenetlenmiş iki ayrı dalı vardır: Önermeler mantığı ve predicate calculus. Birincisi, önermeleri tek tek ele alır ve onların doğru ya da yanlış olduklarını belirler. İkincisi ise, tek tek önermeler yanında, nesneleri birer küme olarak ele alır ve bir altkümeye bağlı önermelerin değerlerini arar. Başka bir deyiţle, predicate calculus, belirli nesnelerden oluşan bir küme üzerinde tanımlı önerme fonksiyonlarının değerleriyle ilgilenir; o fonksiyonların hangi değişkenler için hangi değerleri aldığını bulur. Predicate terimi bir fonksiyon adından başka bir şey değildir.

Predicate calculus'un en büyük avantajı tek tek nesneleri incelemek yerine, o nesnelerden oluşan küme üzerinde uygun fonksiyonlar tanımlıyarak hedefe global olarak varabilmesidir. Önermeler mantığında ise bu iş herbir nesne için tek tek yapılmaktadır.

Mantıksal programlama dilleri esas olarak bu yönteme dayanır: Nesnelerle tek tek uğraşmak yerine, nesneler kümesi üzerinde predicate denilen fonksiyonları tanımlar; onlar arasındaki matematiksel işlemlerle istenen kesin mantıksal sonuçlara ulaşır. Bunun ne kadar önemli olduğunu vurgulamak için şu örneğe bakalım:

1.Örnek: Uygulamada karşılaşabileceğimiz bütün fonksiyonların türevlerini, integrallerini ve bu fonksiyonlar arasında yapılabilecek bütün matematiksel işlemlerin sonucunu bilmek istediğimizi varsayalım. Bütün bu fonksiyonların türevlerini ve integrallerini listelemek bile olanaksızdır; çünkü sayılamaz sonsuz çoklukta fonksiyon vardır.

Öte yandan, son yıllarda yaratılan EUREKA, DERIVE vb programlar, uygulamada karşılaşılabilecek basit ya da çok karmaşık herhangi bir fonksiyonun türevini, integralini bulur; fonksiyonlarla ve sayılarla istenen bütün matematiksel işlemleri yapabilir; sonuçları istenirse sayısal olarak, istenirse global tanımlı fonksiyon olarak belirliyebilir. Bu programlar, bilgisayar cebiri (computer algebra) adıyla anılan bilim dalının hünerlerini kullanırlar, ama asıl dayanakları simgesel mantıktır.

Belirsizlik (uncertainty)

Simgesel mantığın kesinliği, onun yaygınlaşmasının en önemli nedenidir. Orada bir önerme ya doğru ya da yanlıştır; iki-değerli mantıkta belirsizlik olamaz. Oysa, gerçek yaşamda önermeler biraz doğru, biraz yanlış olabilir. Daha ötesi, gözlemlere dayalı önermeler belli bir olasılık katsayısına bağlıdır. Örneğin, milyonlarca yıl boyunca insanoğlu güneşin hergün doğup battığını gözlemektedir. Öyleyse, yarın da güneşin doğup batacağını kesine çok yakın bir olasılıkla söyleyebiliriz. Ama üç gün üst üste evimizin üstünden bir uçak geçti diye yarın da geçeceğini yüksek bir olasılıkla söyleme olanağı yoktur.

Fuzzy mantığı

Buradan görüldüğü gibi, ister doğa olaylarıyla, ister soyut usavarmalarla ilgili olsun, önermelerin doğruluğunu ya da yanlışlığını belirli bir olasılıkla ortaya koymak daha doğaldır. Genel olarak bu olguya belirsizlik (uncertainty) denilmektedir. Bu yaklaşım, klasik mantıktan farklı yeni bir mantık yaratmıştır. Son yıllarda hızla gelişen bu bilim dalına fuzzy mantığı denilir. Bu mantıkta doğruluk değerleri gerçekler yerine olasılıklara bağlıdır.

Burada, aklımıza ilk gelecek şey, ikili-mantığa dayalı olarak bilgisayar ile yapılan işlerin daha fazlasıyla fuzzy mantığına dayalı olarak yapılıp yapılamıyacağıdır. Gerçekten, son zamanlarda, akademik çevrelerde, fuzzy kuramına dayalı çok önemli aşamalar geçilmiştir ve gelecekte bu kuramın ürünlerinin yoğun biçimde ortaya çıkması beklenmelidir.

İster ikili mantığa, ister fuzzy mantığına dayalı olsun, akıl yürüten bilgisayarın (daha doğrusu programın) tasarımı kolay bir iş değildir. Ancak bu işin olanaksız olmadığı da bilinmektedir.

Yapay us

Yapay usun (AI) mükemmel bir tanımını yapmak zordur. Bazılarına göre her programlama dili AI türündedir; çünkü en basit programın bile dayanağı mantıktır. Bazıları ise hiçbir programın AI sınıfına sokulamıyacağını savunur. Bu sonunculara göre, düşünmek yalnızca insanlara özgü bir üstünlüktür. Bu iki uç düşünce arasında, herkesin kendi zevkine uyan bir tanım yapması mümkündür. Bu aşamada bir tanımın dar kalıplarına girmeden, yapay usun ve Akıllı Veri Tabanlarının matematiksel dayanaklarını açıklamak daha yararlı olacaktır.

AI için kesin bir başlangıç tarihi söylemek zordur. Bazılarına göre bu tarih A.M.Turing'in tasarladığı düşünen makinaya kadar uzanır. Ama bugünkü AI nın yaratıcısının John MacCarthy olduğunu söylemek doğru olacaktır. MIT de 1961 yılında LISP'i yaratan odur. AI terimi ilk kez 1961 yılında, gene MIT'de çalışan, Marvin Minsky tarafından yazılan "Steps towards Artificial Intelligence" adlı makalede kullanıldı. 1960 lı yıllar düşünen bilgisayarın yapılabileceği umudunun ve korkusunun yoğun olarak yaşandığı yıllardır. 1964 yılında Joseph Weizenbaum MIT de ELIZA'yı yazdı. ELIZA hastalar üzerinde psikoanaliz yapan bir programdı. 1960 lı yıllar biterken, düşünen bilgisayarın yapılabilmesinin önceleri sanıldığı kadar kolay olmayacağı ortaya çıkıyordu. Çünkü düşünen makinanın ana belleği, yeni bilgilerin üretilmesi evresinde hızla tükeniyordu. Üretilen bilgilerin kayıt ortamına aktarılması ise düşünme evresini kabul edilemeyecek biçimde uzatıyordu. Bu sorun 1970 li yıllarda ortaya çıkan büyük bellekli makinalarla da çözülemedi. Ortaya çıkan zorluğu açıklamak için basit bir örnek verebiliriz: Bubble sort yöntemiyle yapılacak bir sıralama işleminde harcanan zaman, öğe sayısının karesiyle doğru orantılıdır. Yani, 10-öğeli bir array'in yavaş bir makinada sıralanması için 1sn gerekiyorsa, 100-öğeli bir arrayin sıralanması için 100sn gerekecektir. Bu hesapla, büyük bir AI programında, örneğin, 60.000 öğeli bir arrayin sıralanması için bir insan ömrü yetmiyecektir. Tabii bubble sort yerine daha hızlı olan quick sort gibi yöntemlerin kullanılması düşünülebilir. Bu yöntemde n-öğeli bir arrayin sıralanması için geçen zaman n1.2 ile doğru orantılı olduğu için, önceki yönteme göre çok daha etkilidir; ama gerekli zaman sorununu tamamen çözemez.

1970 li yılların sonlarına doğru dil işleyen, bilgi temsil eden ve problem çözen AI programları ortaya çıkmaya başladı. Hastalıkların teşhis edilmesinde kullanılmak üzere Stanford Üniversitesinde geliştirilen MYCIN programı ilk uzman sistem (expert system) olarak kabul edilir. Jeolojik sistemleri konu alan PROSPECTOR ile tasarım konulu XCON programları başarılı ilk uzman sistemlerdir. 1972 yılında Marsilya Üniversitesinde Alain Colmerauer tarafından yaratılan PROLOG dili AI konusunda atılan en önemli adımlardan birisidir. PROLOG bir anlamda LISP'in geliţkin biçimidir. 1980 li yıllara girilirken LISP dili ABD'de akademisyenlerin gözdesi iken, Avrupalı akademisyenler PROLOG'u tercih ediyorlardı. 1981 yılında Japonlar, çok iddialı oldukları beşinci kuşak projesinde prolog dilini temel alacaklarını açıkladılar. Bu açıklama bütün dünyada prolog'a bir avantaj sağladı.

Başlangıcından itibaren yakın zamana kadar, daha çok akademisyenlere uğraş alanı imiş gibi görünen AI ya da Uzman Sistemler yavaş yavaş laboratuarlardan çıkarak dünya pazarlarına girmek üzeredir. 1990 lı yılların başlarında 2 milyar dolarlık AI/Uzman-Sistem programının satılacağı umulmaktadır. Bu gelişmeler konuya olan ilgiyi artıracak ve yeni gelişmelere ufuk açacaktır.

2.BİR SORGULAMA DİLİ OLARAK MANTIKSAL PROGRAMLAMA

Mantıksal Programlamada sorgulamanın ve akıl yürütmenin nasıl yapıldığını aşağıdaki klasik örnek üzerinde göstereceğiz. İki bağıntısı olan şu basit bağlantılı veri tabanını düşünelim:

EBEVEYN(EBEVEYN,ÇOCUK) ,

KİŞİ(ADI,YAŞI,CİNSİYETİ)

İlk satırdaki EBEVEYN bağıntısı EBEVEYN ile ÇOCUK arasında bir bağıntıdır; matematiksel olarak bir sıralı ikili'dir. İkinci sıradaki KİŞİ bağıntısı ise kişinin adı, yaşı ve cinsiyeti arasında bağ kuran bir sıralı üçlü'dür.

Şimdi bu iki bağıntıyla ilişkili bazı veriler girelim ve küçük bir Dış Veri Tabanı yaratalım:

EBEVEYN

EBEVEYN ÇOCUK

hayri ali

ali gonca

gonca ekin

hayri mehmet

mehmet tahsin

mehmet dilek

emine ali

aysen tahsin

dilek salih

KİŞİ

ADI YAŞI CİNSİYETİ

salih 7 erkek

hayri 79 erkek

ali 58 erkek

gonca 35 kadın

ekin 6 kadın

mehmet 60 erkek

tahsin 26 erkek

dilek 28 kadın

emine 74 kadın

aysen 47 kadın

Prolog dilindeki basit sorgulama yöntemleriyle, Dış Veri Tabanında varolan bilgilere erişmek kolaydır. Dış Veri Tabanımızda ebeveyn ve kişi adlı iki tane önbağ (predicate) vardır. Bu önbağları kullanarak Dış Veri Tabanındaki ilişkilere ait gerçekleri elde edebiliriz. Örneğin, Dış Veri Tababından, hayri'nin çocuklarının kimler olduğuna erişmek istiyorsak

?- ebeveyn(hayri,X)

sorgucunu kullanırız. Dış Veri Tabanımızda

ebeveyn(hayri,ali)

bağıntısı olduğuna göre, yukarıdaki sorguya verilecek birinci yanıt

X = ali

olacaktır. Sorgulamayı sürdürürsek, ikinci yanıt

X = mehmet

olacaktır; yani sorumuzun tam yanıtını küme simgesiyle göstererek

X = {ali,mehmet}

biçiminde yazabiliriz. Bu tür bir sorgulama Dış Veri Tabanında varolan bilgilere erişim için yeterlidir. Ancak, mantıksal programlama bundan fazlasını yapabilecektir: Başka bir deyişle, Dış Veri Tabanında var olan bağlantılı verilere dayalı olarak yeni veriler üretebilecektir. Örneğin, yukarıdaki iki bağıntıya dayalı olarak aşağıdaki iki bağıntıyı kolayca tanımlıyabiliriz:

baba(X,Y) :- kiţi(X,_,erkek), ebeveyn(X,Y).

anne(X,Y) :- kişi(X,_,kadın), ebeveyn(X,Y).

Şimdi, bu iki yeni bağıntıyı kullanarak yeni sorgulamalar yapabiliriz: Örneğin, ali'in annesinin kim olduğu Dış Veri Tabanımızda açıkça bir veri olarak kayıtlı değildir; ama orada kayıtlı olan başka verilerden akıl yürütmeyle çıkarılabilecektir. Gerçekten, Prolog çeviricisi

? - anne(X,ali)

sorusunun yanıtını

X = emine

olarak verecektir. Bu biçimde baba ve anne bağıntıları yardımıyla Dış Veri Tabanından elde edilebilecek yeni verilerin tamamını aşağıdaki listelerde görebiliriz:

BABA

BABA ÇOCUK

hayri ali

ali gonca

hayri mehmet

mehmet tahsin

mehmet dilek

ANNE

ANNE ÇOCUK

gonca ekin

emine ali

aysen tahsin

dilek salih

Burada, anne ve baba bağıntıları ile ilgili olarak elde edilen yeni veriler bir dış kayıt ortamına yazılmıyor; ana bellekte tutuluyor. Bu verilerden oluşan kümeye İstemli Veri Tabanı diyeceğiz. İstemli Veri Tabanı, kullanıcının tanımladığı yeni bağıntılara göre oluşmaktadır. Dolayısıyla, her kullanıcı, mevcut Dış Veri Tabanına ve onlar arasındaki ilişkileri belirliyen temel bağıntılara dayanarak kendi gereksemelerini karşılıyacak yeni bağıntılar tanımlıyabilir ve onlar yardımıyla bir İstemli Veri Tabanı yaratabilir. Gerçekte, Prolog çeviricisi, yukarıdaki İstemli Veri Tabanının tamamını kendiliğinden yaratmaz; ancak, yapılan sorgulamaya uyan verileri Dış Veri Tabanında arayıp bulmakla yetinir.

İstemli Veri Tabanının nasıl zengin olabileceğini göstermek için, ailede soy ilişkisini belirliyecek aşağıdaki beş bağıntıyı daha tanımlıyalım:

dede(X,Z) :- ebeveyn(X,Y), ebeveyn(Y,Z),

kiţi(X,_,erkek).

nine(X,Z) :- ebeveyn(X,Y), ebeveyn(Y,Z).

kiţi(X,_,kadın)

kardeţ(X,Y) :- ebeveyn(Z,X), ebeveyn(Z,Y),

not(X=Y).

amca(X,Y) :- kardeţ(X,Z), ebeveyn(Z,Y),

kiţi(X,_,erkek).

teyze(X,Y) :- kardeţ(X,Z), ebeveyn(Z,Y),

kişi(X,_,kadın).

Yeni bir bağıntı tanımlanırken, o bağıntıyı belirleyen kuralların ya da bağıntıların ya Dış Veri Tabanında varolması ya da daha önce İstemli Veri Tabanında tanımlanmış olması gerekir. Bu yolla, çok karmaşık soruları sorma olanağı da yaratabiliriz. Örneğin, "Kim bir kadının amcasıdır?" sorusuna yanıt bulmak için

kim(X) :- amca(X,Y), kişi(Y,_,kadın).

bağıntısını tanımlayıp

?- kim(X)

sorusunu sormak yetecektir.

Ayrıca, yinelgen (recursive) bağıntılar kullanarak, çok basit olan bir Dış Veri Tabanından, çok karmaşık İstemli Veri Tabanları yaratmak ve Dış Veri Tabanında varolmayan, ama ondan usavurmalarla çıkarılabilecek bilgilere erişmek mümkündür. Örneğin,

ata(X,Y) :- ebeveyn(X,Y).

ata(X,Y) :- ebeveyn(X,Z), ata(Z,Y).

bağıntısı yinelgen bir kuralla tanımlıdır ve bir kişinin atalarını sorgulayabilir. Benzer biçimde bir başka yinelgen bağıntı ile kuzenleri belirlemek mümkündür:

kuzen(X,Y) :- ebeveyn(X1,X), ebeveyn(Y1,Y),

kardeţ(X1,Y1).

kuzen(X,Y) :- ebeveyn(X1,X), ebeveyn(Y1,Y),

kuzen(X1,Y1).

Son olarak tanımlanan ata ve kuzen bağıntılarının oluşturacağı İstemli Veri Tabanları aşağıdaki çizelgelerde gösterilmiştir.

ATA

ATA OĞUL

hayri ali

ali gonca

gonca ekin

hayri mehmet

mehmet tahsin

mehmet dilek

emine ali

aysen tahsin

dilek salih

hayri gonca

emine gonca

ali ekin

hayri tahsin

hayri dilek

mehmet salih

hayri ekin

emine ekin

hayri salih

KUZEN

1.KİŞİ 2.KİŞİ

gonca tahsin

gonca dilek

ekin salih

 

3. Akıllı Veri Tabanlarının Yaratılışı

Son yıllarda mantıksal programlama ile veri tabanlarını birleştirerek etkileşimli ya da bütünleşik yeni sistemler yaratmak için yapılan çalışmalara ilginin büyük ölçüde arttığı gözlenmektedir. Bir sorgulama dili olarak mantıksal programlama dilinin ne kadar etkili olduğunu görüyoruz. Dolayısıyla iyi eşlenmiş bir mantıksal programlama ile bir veri tabanının oluşturacağı akıllı bir veri tabanının çekiciliği açıktır. Bu sistemlerin yapı ve yöntemlerindeki benzerlik ve farklılıkları burada ayrıntılarıyla incelemeye girmiyeceğiz.

Bu sistemlerin herbirisinde, mantıksal programlamanın işlevlerini yüklenen bir mantıksal programlama makinası; kullanılacak veri tabanındaki predicate'leri tanıyacak bir mantıksal programlama arayüzü; veri tabanı ile aralarındaki iletişimi kuracak bir veritabanı arayüzü; veri tabanına erişimi ve güncellemeyi sağlıyacak bir veritabanı makinası vardır. Kuruluş açısından iki ana yapıya ayrılabilirler:

1. Mantıksal Programlama ile veri tabanı iki ayrı alt sistem imiş gibi düşünülerek bu ikisi arasında etkileşimi sağlıyacak bir arayüz yaratılır. Her iki sistem kendi varlıklarını bağımsız olarak sürdürmeye devam eder. Arayüz anabelleğe gerekli veri akışını sağlar. Prolog'a dayalı sistemler genellikle bu yöntemi kullanır.

2. Büyük bir veri tabanı üzerine bir mantıksal programlama yerleştirilerek bütünleşik bir sistem yaratılır. Veri yapıları ve algoritmalar tamamen bu sistem için yeniden yaratılır. Datalog'a dayalı sistemler bu gruptandır.

Birinci tür sistemin kuruluşu daha kolaydır; ama ikinci tür sistemler daha etkindir. Öte yandan, bu sistemler, mantıksal programlama ile veritabanı arasındaki etkileşimi sağlama yöntemleri, etkileşimin zamanı ve biçimi açısından da iki gruba ayrılabilirler:

Statik Eşleme: Veritabanı ile mantıksal programlama arasındaki etkileşim, mantıksal programlamanın dedüksiyonlarından tamamen bağımsızdır. Buna gevţek eţleme de denilir.

Dinamik Eşleme: Veritabanı ile mantıksal programlama arasındaki etkileşim, mantıksal programlamanın dedüksiyonlarına bağlıdır. Buna sıkı eşleme de denilir.

Hemen belirtelim ki, literatürde bu terimlerin kullanımlarında kesin bir birlik henüz sağlanmış değildir. Ayrıca, eşleme yöntemi ne olursa olsun, oluşturulan sistemin optimizasyonu için etkili yöntemler geliştirilmektedir. Bu yöndeki çalışmalara örnek olabilmesi için aşağıdaki sistemleri anmakta yarar vardır.

PRO-SQL: Yorktown Heights IBM Araştırma Merkezinde geliştirilmiştir. Prolog ile SQL/DS veritabanı sistemini eşlemektedir. Bu sistemde kullanıcının hem prologu hem de SQL dillerini bilmesi gerekmektedir.

EDUCE: Munich'deki Avrupa Bilgisayar Endüstrisi Araştırma Merkezi tarafından geliştirilmiştir. Prolog ile Ingres veritabanı sistemini eşlemekte ve QUEL dili ile ilişki kurmaktadır.

ESTEAM: Prolog ile veritabanları arasında eşleme yapmak amacıyla Espirit projesi çerçevesinde yaratılmıştır.

BERMUDA: Wisconsin Üniversitesinde geliştirilmiş bir prototypedır. Prolog ile Britton-Lee Intelligent Database Machine IDM 500'ü eşlemektedir.

PRIMO: İtalya'daki Modena Üniversitesinde geliştirilmiştir. Arity Prolog ile ORACLE veritabanı sistemini eşlemektedir.

QUINTUS: Quintus Prolog ile Unify Database System arasında bir arayüzdür. Kaliforniya'da Quintus Computer System tarafından geliştirilmiştir.

Bu sistemlerin her birisinin ayrı bir veritabanı sistemine bağlı olduğu izlenimi edinilmektedir. Bu gerçek olmakla birlikte, kuramsal olarak, eşleme yöntemleri kullanılan mantıksal programlama diline ve veritabanı sistemine ayrılmaz biçimde bağlı değildir. Bu demektir ki, bir eşleme yöntemi bazı ufak değişikliklerle başka sistemlerin yaratılmasında da kullanılabilir.

4.BÜTÜNLEŞİK BİR VERİTABANI SİSTEMİ : DATALOG

Sorgulama sürecinde prolog dili ile bütünleşmiş bir sistemin klasik veri tabanı yönetim sistemlerine üstünlüğü tartışılamaz. Ancak prologun bir veri tabanı programı olarak kullanılmasında kullanıcıya zorluk yaratan dört niteliği vardır.

a. Hedefler aranırken prolog her seferinde ancak bir yanıt bulur; bütün yanıtları birden sıralamaz.

b. Prolog kullandığı predicate'lerin, kuralların ve gerçeklerin sırasına kesinlikle uyar. Procedurelere bağlıdır. Oysa veri tabanını yönetenler sorgulama sürecinin procedurelerden ve sıralamadan bağımsız olmasını istiyebilir.

c. Prolog programcısı giriş/çıkış , debug, backtracking vb. işlemler için özel predicate'ler kullanmak zorundadır.

d. Prolog dili yinelgeli fonksiyon yaratmak ve karmaşık veri yapıları oluşturmak için özel fonksiyon simgelerine sahiptir.

Bütün bunlar düz bir veri tabanını yönetmek istiyen bir programcıya uygun olmayabilir. Bu nedenle, bütünleşik bir sistem istiyen programcıya değişik seçenekler sunulmalıdır. Bundan sonraki kesimlerde böyle bir sisteme örnek olarak datalog ele alınacak ve bu sistemin temelleri açıklanacaktır.

Datalog nedir?

Datalog veri tabanı programı olarak kullanılmak üzere tasarlanmış bir mantıksal programlama dilidir. Procedural değildir. Predicate'lerin, kuralların ve gerçeklerin sırasına karşı duyarsızdır. Özel predicate'ler ve fonksiyon sembolleri kullanmaz. İşlevleri matematiksel küme kuramına dayalıdır; yani sorgulamada hedefleri tek tek değil hepsini birden bir küme olarak sıralar. Teknik bir deyiţle, prolog'un sorgulaması derinlik önceliklidir; datalog ise genişlik öncelikli arama stratejisine sahiptir. Böylece prolog'un yukarıda söylenen dört kusurunu gidermektedir. Datalog'un sözdizimi prolog'unkine benzer. Sorgulama ve engelleme amacıyla prolog'un kullandığı bütün kuralları kullanır.

Başka bir deyişle, prolog'dan datalog'a geçiş evrimi, procedural ve record yöneltili dillerden nonprocedural ve kümesel dile geçişin evrimidir. Bu olgu, aynı zamanda, hiyerarşik ve network nitelikli veritabanı yönetim sistemlerden bağlantılı veritabani yönetim sistemlerine geçişin evrimine paraleldir.

Veri Tabanının Doğruluğunun Sağlanması

Bir dış veri tabanı ile bir mantıksal program eşlenerek yeni bir sistem oluşturulduğunda, sistem ilk adımda dış veri tabanındaki bilgilere dayalı olarak yeni veriler üretecektir. İkinci adımda, önce verilen bilgiler ile ilk adımda üretilenlere dayalı olarak yeni veriler ortaya çıkacaktır. Bu süreç istenildiği kadar devam edecektir. Her adımda ortaya çıkan yeni verilerin önceki verilere eklenmesiyle sistemin o anda bildiği bütün veriler kümesi oluşur. Buna, o adımda bilinen tabansal gerçekler diyeceğiz. Çok büyük olması olasılığı olan tabansal gerçekler kümesinde yanlışlar oluşmamalıdır; yani, herhangi bir adımda sistem yanlış bilgi üretmemelidir. Buna sistemin sağlamlığı (doğruluğu, soundness) diyoruz. Öte yandan, kuramsal olarak sistemin üretebileceği her bilgiye erişebilmemiz gerekir. Buna da sistemin tamlığı (completeness) diyoruz. Yaratılan bir sistemin sağlamlığı ve tamlığı matematiksel yöntemlerle kanıtlanmalıdır. Aksi halde, sistem güvenilir değildir; kullanılamaz.

Datalog'un Matematiksel Temelleri

Matematiksel mantıkta bir önermenin doğruluğu iki yöntemle belirlenir: model kuramı ya da kanıt kuramı. Model kuramında bir önermenin doğru olması, bütün değişkenleri için doğru olmasıyla mümkündür; yani bütün mümkün haller için önerme doğru olmalıdır. Kanıt kuramında ise, bir önermenin doğruluğu belitlere (axiom) dayalı olarak usavurmalarla çıkarılır. Biçimsel yönden bu iki ntem birbirine denktir; yani birisine göre doğru olan önerme ötekine göre de doğrudur. Datalog'un sağlamlığı ve tamlığı hem model kuramı ile hem de kanıt kuramı ile gösterilebilir. Model kuramının kuruluşu daha kolay olmakla birlikte, pratikte, kanıt kuramı daha çok kullanılır. Bu nedenle, burada ikinci yöntemi ele alacağız.

Datalog'un Kanıt Kuramı

Bu bölümde bir datalog programında yanıtın nasıl arandığını inceliyeceğiz; başka bir deyişle, datalog'un kanıt kuramını ele alacağız. Bunun için önce datalog'un bir dış veri tabanından yeni gerçekleri nasıl ürettiğini görecek, sonra da bu sürecin sağlamlığını ve tamlığını matematiksel olarak kanıtlıyacağız.

Gerçeklerin Türetilmesi

Tabansal

F1,F2,...,Fn

gerçeklerine dayalı R datalog kuralı (bağıntısı)

R: L0:- L1,L2,...,Ln

biçiminde tanımlı olsun. Her i=1,2,...,n için Liá=Fi olacak biçimde bir konum yapıldığını varsayalım. Yukarıdaki kuralı kullanarak tabansal gerçeklerden bir adımda L0á gerçeğini türetmiş olacağız. Türetilen L0á gerçeği önceden varolan bir tabansal gerçek olabileceği gibi, ortaya çıkmış yepyeni bir gerçek de olabilir. Bu yolla, varolan gerçeklerden yenilerinin türetilmesine ilkel türetme diyeceğiz. Tabii, herhangi bir kural ile bir tabansal gerçekler kümesi verildiğinde, ilkel türetme eylemini yapan bir İLKEL_TÜRETEN(R,F1,F2,...,Fn) fonksiyonunun kurulabileceğini varsayabiliriz. Bu fonksiyonun çıktısı, verilen argümanlara uygulanabildiğinde 'ilkel türetilebilen bütün gerçekler'; uygulanamadığında ise 'hiç' olsun.

2.Örnek: R datalog kuralı p(X,Z):-p(X,Y),p(Y,Z) olarak verilsin ve tabansal gerçekler {p(a,b)} ve {p(b,c)} olsun. á={X/a,Y/b,Z/c} konumunu ve ilkel türetme yöntemini kullanarak {p(a,c)} gerçeğini türetebiliriz. Öte yandan R2:q(X,Y):-q(Y,X) kuralı ve q(a,a) tabansal gerçeğinden ilkel türetme yöntemiyle yeni bir gerçek türetilemez; ancak q(a,a) gerçeği yeniden ortaya çıkar.

Burada p ve q bağıntıları uygun herhangi birer bağıntı olarak alınabilir. Örneğin, p(x,y) bağıntısı x<y olarak; q(s,t) bağıntısı ise "s ile t kardeştir" diye tanımlanabilir.

Yukarıdaki ilkel türetme yöntemi herzaman geçerli ve kolay uygulanır bir yöntemdir. Ancak, tabansal gerçekler ile daha sonra üretilen gerçekleri kullanarak yeni gerçekler üreten daha karmaşık yöntemlerin olması gerektiği seziliyor. Bu yöntemi yapacak prosedürü bir Pascal fonksiyonu imiş gibi belirliyebiliriz: Datalog hükümlerinden (clause'larından) oluşan bir S kümesi düşünelim. İlkel türetme yöntemiyle bir adımda S nin ürettiği bütün tabansal gerçekleri TÜRETEN(S) ile gösterelim.

FUNKTION TÜRETEN(S)

GİRDİ : Datalog hükümlerinin sonlu bir S kümesi.

ÇIKTI : İlkel türetme yöntemiyle bir adımda S nin türettiği bütün tabansal gerçekler.

BEGIN

sonuç := boţküme

S nin her R:L1...Ln kuralı için DO

S den seçilen her n-sıralı <F1,F2,...,Fn> için DO

BEGIN

yeni := İLKEL_TÜRETEN(R,F1,F2,...,Fn)

eğer (yeni <> hiç) ise

sonuç := sonuç U {yeni}

END;

RETURN sonuç

END.

Bu algoritma, S hükümlerinden ilkel türetme yöntemiyle bir adımda çıkarılabilecek bütün gerçekleri ortaya koyar.

3.Örnek: S datalog hükümleri R1:p(Z,Y):-p(X,Y),p(Y,Z) ile R2:p(X,Y):-p(Y,X) biçiminde tanımlanan iki hükümden (clause) oluşsun ve tabansal gerçekleri {p(a,b)}, {p(b,c)}, {p(c,d)}, {p(d,e)} olarak verilsin. Buna TÜRETEN algoritmasını uygulayarak elde edebileceğimiz tabansal gerçekler şunlar olacaktır:

TÜRETEN(S) = {{p(a,c)}, {p(b,d)}, {p(c,e)}, {p(b,a)} {p(c,b)}, {p(d,c)}, {p(e,d)}}.

Bunlara türetilen tabansal gerçekler diyeceğiz. Bu kavramı biraz daha biçimsel tanımlamaya gerekseme vardır: Datalog hükümlerinden oluşan bir S kümesi verilsin. Bir G gerçeği S içinde ise ya da ilkel türetme yönteminin sonlu kez uygulanmasıyla ortaya çıkarılabiliyorsa, G 'ye S'den türetilen tabansal bir gerçektir, denilir ve SÃG simgesiyle gösterilir. Bu kavramı tamamen matematiksel biçimde yinelgen (recursive) bir yöntemle tanımlayarak evrensel kesinlik kazandırabiliriz:

a. Eğer GîS ise SÃG dir.

b. RîS bağıntısı ile F1,F2,...,Fn tabansal gerçekleri varolsun. Eğer her i = 1,2,...,n için SÃFi oluyor ve G gerçeği ilkel türetme yönteminin R bağıntısına sonlu kez uygulanmasıyla ortaya çıkıyorsa SÃG dir.

c. Başka hiçbir durumda SÃG olamaz.

4.Örnek: Yukarıdaki örnekte {p(a,b)} ile {p(a,a)} gerçekleri S'den türetilen tabansal birer gerçektir; çünkü birincisi S 'ye aittir; ikincisi ise ilkel türetme yöntemiyle iki adımda ortaya çıkarılabilir. Gerçekten R2 bağıntısı {p(a,b)} gerçeğine uygulanırsa bir adımda SÃ{p(b,a)} çıkar. Sonra R1 bağıntısı bu son iki gerçeğe uygulanırsa SÃ{p(a,a)} olduğu görülür.

Burada olduğu gibi, bir dizi ilkel türetme yönteminin ard arda uygulanmasıyla S'den G'nin elde edilmesi sürecine G'nin kanıtlanması denilir. Bu süreç daima bir kanıt ağacı (proof tree) ile temsil edilebilir. Son örneğimiz için kanıt ağacı şöyle olacaktır:

{p(a,a)}

/ / \

/ / \

R1 {p(a,b)} {p(b,a)}

/ \

/ \

/ \

R2 {p(a,b)}

{p(a,a)} için kanıt ağacı

Kanıt ağacı, değişik düzeylerde düğümlerden (node) oluşur. Burada düğüm, ağaç kökünün dallanma noktalarına yerleşmiş tabansal gerçeklerdir. Bu gerçekler iki türe ayrılabilir: Bazı düğümler S 'ye ait hükümlerdir; bazıları ise S'den türetilmiş tabansal gerçeklerdir. Kanıt ağacının en derin köklerindeki uç düğümler daima S'ye ait hükümlerdir. Buradaki hükümler başlangıç düzeyindedirler. Bir üst düzeydeki düğümlerde hem S'ye ait olanlar hem de S'den türetilmiş olanlar yer alabilir. Buradaki düğümler birinci basamak düzeyini oluşturur. Gene S'ye ait bazı gerçekler ile bu düzeydeki bazı tabansal gerçeklerden ilkel türetme yöntemiyle çıkabilecek gerçekler bir sonraki düzeye, yani ikinci basamak düzeyine yerleşir... Bu süreç, kanıtlanan gerçeğe (burada {p(a,a)}) ulaşıncaya kadar devam eder. Her düğüm, bulunduğu basamaktan bir sonraki basamaktaki bir ve yalnızca bir düğüme bağlıdır. Bir önceki basamakta ise birden çok ilgili düğüme bağlanabilir. Bir hüküm birden çok düzeyde yer alabilir. Bir kanıt ağacının derinliği düzey sayısının bir eksiğidir. Örneğimizde üç düzey vardır; dolayısıyla {p(a,a)} için kanıt ağacının derinliği 2 dir.

Türetme Yönteminin Sağlamlığı ve Tamlığı

Bir S hükümler kümesi ile F1,F2,...,Fn tabansal gerçekleri verildiğinde, ilkel türetme yöntemiyle yeni gerçekler türetebiliyoruz. Ancak bu süreçte ortaya çıkan hükümlerin sağlamlığını (doğruluğunu) ve tamlığını (varolan bir gerçeğe ulaşılabileceğini) kanıtlamamız gerekir. Aksi halde, ilkel türetme yöntemimiz güvenle kullanılabilir bir yöntem olamıyacaktır.

Bunun kanıtı için matematiksel yöntemlere başvurup şu teoremi kanıtlamak mümkündür:

1.Teorem: S bir datalog hükümler kümesi ve G bir tabansal gerçek olmak üzere SÌG olması için gerekli ve yeterli koşul sÃG olmasıdır.

Burada SÌG simgesi simgesel mantıktaki S==>G ile eşanlamlıdır. Teoremin tamamen matematiksel usavurmalarla yapılabilen kanıtını, zaman ve yer kazanabilmek için burada tekrarlamıyacağız. Bu teoreme dayalı olarak aşağıdaki önemli sonuçları çıkarabiliriz. Datalogun bir S hükümler kümesinden çıkarılabilen bütün gerçeklere S'den elde edilen sabitler denilir ve cons(S) ile gösterilir.

2.Teorem: S bir datalog hükümler kümesi ve G bir tabansal gerçek olmak üzere

cons(S) = {G : SÃG dir }

dir.

Aşağıdaki algoritma sonlu bir S kümesinden elde edilebilecek bütün gerçekleri ortaya koyar.

FUNCTION YARATAN(S)

INPUT: Datalog hükümlerinden oluţan sonlu bir S kümesi.

OUTPUT: cons(S).

BEGIN

eski = boţ;

yeni = S;

WHILE yeni <> eski DO

BEGIN

eski := yeni;

yeni := yeni U TÜRETEN(yeni)

END;

sonuç := yeni'den çıkan bütün gerçekler;

RETURN sonuç

END.

Artık, gerçekler kümesinin tamamen belirlenebildiğini gösterebiliriz.

3.Teorem: S kümesi sonlu ise, yukarıdaki YARATAN algoritması sonlu adımda biter ve çıktısı cons(S) kümesine eşit olur.

4.Teorem: S kümesi sonlu ise cons(S) kümesi de sonludur.

Yukarıda tanımlanan YARATAN fonksiyonu, en dipdeki tabansal gerçeklerden başlıyarak yukarıya çıkar ve sonunda kanıtlanacak gerçeğe ulaşır. Bu nedenle bu yönteme dipten tepeye hesaplama yöntemi denilir.

Öte yandan TÜRETEN fonksiyonu, Ì gerektirme (implication) simgesinin gösterdiği gibi, gerçekleri yukarıdan aşağıya doğru ortaya koyar. Dolayısıyla bu yönteme öne doğru zincirleme adı verilir.

Şimdi bir E dış veri tabanı ile bir P datalog programı verildiğinde, bu veri tabanından kuramsal olarak elde edilebilecek bütün gerçekleri ortaya koyabilecek algoritmaya sahibiz: E U P kümesine YARATAN fonksiyonunu uyguladığımızda olası bütün gerçeklerin ortaya çıkacağını yukarıdaki teoremlerden biliyoruz. Bunların arasından, belirli bir amaca yönelik herhangi bir istemli veri tabanı yaratmak için istenen predicate'leri seçmek yetecektir. Matematiksel bir ifadeyle söylersek, istenen veri tabanı I(YARATAN(E U P)) olacaktır. Burada YARATAN algoritması işlemin özüdür; dolayısıyla ona yaratıcı makina (inference engine) adı verilir.

Matematiksel mantıkta yinelgen (recursive) bir kural ile sonuca ulaşmak için sabit nokta teoremleri çok kullanılır. Bu nedenle, yinelge kullanan her programlama dilinin semantiğini tanımlamak için sabit nokta teoremlerini kullanabiliriz. Burada sabit nokta teoremlerinin matematikte iyi bilinen kanıtlarına girmeden, o teoremleri datalog'un semantiğini belirlemekte kullanacağız. Bir L latisinden kendisi içine tanımlı monoton T fonksiyonlarını düşünelim. L latisinin en büyük alt sınırı'nı inf(L) simgesiyle gösterelim. T fonksiyonunun sabit bıraktığı noktalar arasında en küçük olana, T'nin en küçük sabit noktası denilir; bunu da EKSN(T) ile gösterelim. Şimdi bu en küçük sabit noktayı hesaplayan bir algoritma yazabiliriz:

FUNCTION EKSN(T)

GİRDİ: (L,®) örgüsü(lattice) üzerinde tanımlı monoton T dönüşümü.

ÇIKTI: EKSN(T), (eğer algoritma sona eriyorsa).

BEGIN

eski := inf(L) ;

yeni := T[inf(L)];

WHILE yeni <> eski DO

BEGIN

eski := yeni;

yeni := T(yeni);

END;

RETURN yeni

END.

Bu fonksiyonun çıktısı daima T'nin en küçük sabit noktasıdır. Böyle olduğunu aşağıdaki teorem yardımıyla matematiksel olarak kanıtlıyabiliriz:

5.Teorem: Eğer EKSN algoritması sona eriyorsa, çıktısı EKSN(T) dir.

Şimdi bu teoremi datalog semantiğine uygulayabilmek amacıyla bir yöntem geliştirelim: Datalog hükümlerinden oluşan bir S kümesi düşünelim. S kümesinin bütün tabansal gerçeklerini GERÇEK(S) ile, S'in bütün datalog kurallarını KURAL(S) ile gösterelim. S=KURAL(S) U GERÇEK(S) olacağı açıktır. Herbrand Tabanı (HT) önbağlardan ve sabitlerden oluşturulabilecek bütün pozitif tabansal birim hükümlerin kümesidir. Biribirlerinden bağımsız olarak, ünlü mantıkçılardan J.Herbrand ile T.Skolem, bir logic sistemdeki gerçeklerin daha basit bir küme ile temsil edilebileceğini göstermişlerdir. Bu temsil, bir anlamda, sonlu boyutlu bir uzayda sayılamaz çoklukta olan vektörlerle işlem yapabilmek için seçilen sonlu sayıdaki taban vektörlere benzer. Bu nedenle mantık sistemlerini incelemeyi çok kolaylaştırır. P(HT) simgesi HT kümesinin bütün alt kümelerinin oluşturduğu aile olsun. Bu aile kümesel kapsama bağıntısına göre bir örgü (lattice) dür. Bu rgüden kendi içine monoton bir TS dönüţümünü, HT'nin her W alt kümesi için

TS(W) = W U GRÇEK(S) U TÜRET(KURAL(S) U W)

biçiminde tanımlıyalım. Gerçekten TS'nin her S datalog hükümler kümesi için HT'den kendi içine monoton bir fonksiyon olduğunu kanıtlamak zor değildir. Bunun doğal sonucu olarak şu ilginç sonuca ulaşıyoruz:

6.Teorem: S bir datalog hükümler kümesi ise HT içindeki bir I kümesinin S'nin bir Herbrand modeli olması için gerekli ve yeterli koşul I'nın TS'in bir sabit noktası olmasıdır.

Ţimdi bu sonuca dayanarak, herhangi bir S datalog hükümler kümesinden çıkabilecek bütün gerçekleri; yani cons(S) kümesini en küçük sabit nokta yinelgesiyle belirleyebiliriz:

7.Teorem: S datalog hükümlerinden oluşan bir küme ise cons(S) = EKSN(TS) eşitliği vardır.

Bu sonuncu teorem yardımıyla, herhangi bir DVT dış veri tabanı ile bir P datalog programı verildiğinde, P'nin semantiğini belirlemek mümkün olacaktır. Gerçekten, PUDVT datalog hükümlerinden oluşan sonlu bir kümedir ve T(P U DVT) dönüşümü LDVT latisi üzerinde monotondur. Dolayısıyla, E(HT) nin her DVT alt kümesinden çıkacak gerçekler (semantic)

MP(DVT) = EKSN(TP U DVT) n IHT

olacaktır.

KAYNAKLAR

Ceri-Gottlab-Tanca : Logic Programming and Databases, Springer嘠牥慬

Verlag, 1990,

Chang,C.L. and Walker A. : PROSQL : A Prolog programming Interface with SQL/DS, Proc.First Workshop on Expert database Systems, Kiawah Island, SC,1984.

Charniak,E. and McDermott,D.M. :Introduction to Artificial Intelligence, Reading,MA, Addison-Wesley, 1985.

Hu,D :Expert Systems, Howard W.Sams & Company, Indianapolis, 1987.

Esprit Project 530 Epsilon (organizer); Workshop on Integration of Logic Programming and Databases, Venice, December 1986.

Fuchi,K. and Furukawa,K. : The Role of Logic programming in the Fifth Generation Computer Project, Int.Logic Programming Conference, July 1986.

Gallaire,H. and Minker J. : Logic and Databases, Plenium Press, 1978.

Krishnamurthy,R.,Ramakrishnan,R. and Shmueli,O. : A Framework for Testing Safety and Effective Computability of Extended Datalog, ACM SIGMOD Int. Conf. on Management of Data, Chicago,IL, June 1988, pp.154-163.

Kunifuji,S. and Yokota,H. : Prolog and Relational Databases for fifth generation Computer Systems, Workshop on Logical Bases for Databases, Toulose, December 1982.

Lassez,J.L., Nguyen,V.L. and Sonenberg,E.A. : Fixed Point Theorems and Semantics: A folk tale, Information Processing Letters, 14:3, May 1982.

Tsur,S. and Zaniolo,C. : LDL:A Logic-based Query Language, Proc. 12th Int. Conf. Very Large Data Bases, Kyoto, 1986.