mantıksal programlama

14

Click here to load reader

Upload: betul-kesimal

Post on 20-Mar-2017

33 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Mantıksal programlama

MANTIKSAL PROGRAMLAMALOGIC PROGRAMMING

Betül KESİMAL

Bilişim Sistemleri Mühendisliği BölümüMuğla Sıtkı Koçman Üniversitesi

[email protected]

ÖZET

Bu araştırmada mantıksal programlamanın yeri ve önemi üzerinde özellikle durulmakta, mantıksal programlama kapsamındaki yapılabilecek çalışmalar anlatılmakta ve mantıksal programlamaya kullanıcıların gereksinimi ve kullanımı açısından bakılarak katılımcılara bilgiler verilmektedir. Pek çok teknoloji ve uygulamadan bahsetmek, prolog mantıksal programlama dili hakkında bilgi vermek, çeşitli notlar ile araştırmayı desteklemek, mantıksal programlama alanına dikkatleri çekmek ve literatür hakkında tanıtıcı bilgiler vererek yenilikleri anlatmak, bu çalışmanın kapsamındadır. Bu araştırma ile amaçlanan, mantıksal programla dillerinin yapay zekâ yöntemleri ile birlikte icra edilmesidir.

1. GİRİŞ

Mantık, bilgi ve altında yatan doğrulama işi arasındaki ilişkilere dayanır. Mantık programlamanın kaynağı Predicate Calculus’tür, çünkü ispat yapabilmek için gereken net bir karakterize etme tekniği içermektedir. İspatlar formal ya da sembolik olarak algoritmalarla ifade edilebilen, analiz edilebilen matematiksel nesnelerdir.

Gerçek yaşamdaki bazı nesnelerin durumlarından bahsederken genellikle;

Nazım resimi çok sever.Abidin resim seven herkesin dostudur.

Şeklindeki tanıtıcı (declarative) cümleler kurarız. Bu cümleleri okuyan çoğu kişi hemen aşağıdaki sonuç cümlesini rahatlıkla üretebilecektir.

Abidin, Nazım’ın dostudur.

Bu şekilde insan düşünce sürecini aydınlatmamıza/biçimselleştirmemize yarayan sisteme mantık denmektedir. Yukarıdaki şekildeki mantık klasik mantık olup aşağıdaki gibi bu ifadeleri sembolik mantıkla ifade edebiliriz.

A1: sever (Nazım, resim)A2: HER X sever (resim) → dost (Abidin, X)T1: dost (Abidin, Nazım)

Doğal insan dili ilk görüşte ideal gibi gözükse de uzun, belirsiz, şüpheli olması ve içerik gerektirmesi nedeniyle onu ifade etmek için filozoflar ve matematikçiler bir şeyler aramışlardır. Mantıkta bunlardan biridir.

Imperative yaklaşım da denilen Von Neumann yöntemi makinenin işleyeceği yönergelerin özel mimarilerde aşağıdan yukarıya (bottom-up) olarak türetilir. Buna örnek olarak aşağıdaki doğal sayıların karesini üreten algoritmayı verebiliriz.

Sayı=0Döngü: Kare=Sayı*Sayı Yaz(Kare); Sayı=Sayı+1; Git Döngü;

Bu algoritmayı teknik ayrıntılara göre daha uygun hale getirmek için daha yüksek seviyeli programlama paradigması ile yeniden tanımlamamız daha iyi bir biçimselleştirme olacaktır. Burada oluşacak olan kritik soru mantığın problemi temsil etmede mi, yoksa problemi çözmede mi kullanılacağıdır.

Bunun için Mantık yardımıyla bu doğal sayıların karesini alma işleminin teknik ayrıntıları aşağıdaki gibidir:

Sayılar: 0 → 0, 1→ s(0), 2 → s(s(0)), 3 → s(s(s(0))), ……

Doğal sayıların tanımı: doğal(0) VE doğal(s(0)) VE doğal(s(s(0))) VE …….

Daha iyi bir çözüm:

doğal(0) VE HER X (doğal(X)→doğal(s(X)))

Doğal Sayıların Toplanması:

HER X (doğal(x)→topla(0,X,X)) VE

HER X HER Y HER Z (topla(X,Y,Z))→topla(s(X),Y,s(Z)))

Doğal Sayıların Çarpılması:

HER X(doğal(X)→çarp(0,X,0)) VE

HER X HER Y HER Z (çarp(X,Y,W) VE topla(W,Y,Z))→çarp(s(X),Y,Z)

Doğal Sayıların Karesi:

HER X HER Y (doğal(X) VE doğal(Y) VE çarp(X,X,Y))→doğal_kare(X,Y))

En son yazılan ifade imperative programın teknik ayrıntısı olarak görülebilir.

Page 2: Mantıksal programlama

Bu yapılan çözüm gösterim için faydalıdır ama efektif tümdengelim yordamı yardımıyla bu problem çözülebilir. [1]

Tümdengelim yöntemini bilgisayarda bir kez ve hepsini programla.

Problem için uygun bir gösterim bul. Çözümleri elde etmek için sorular sor ve geri

kalanını tümdengelim yordamına bırak.

Yukarıdaki tanımlama aşağıdaki şekilde işlenebilir:

Sorgu: doğal (s(0))?

Yanıt: (evet)

Sorgu: HERHANGİ X topla(s(0),s(s(0)),X)?

Yanıt: X=(s(s(s(0))))

Sorgu: HERHANGİ X topla(s(0),X,s(s(s(0))))?

Yanıt: X=s(s(0))

Sorgu: HERHANGİ X doğal(X)?

Yanıt: X=0 VEYA X=s(0) VEYA X=s(s(0)) VEYA …..

Sorgu: HERHANGİ X HERHANGİ Y topla(X,Y,s(0))?

Yanıt: (X=0 VE Y=s(0)) VEYA (X=s(0) VE Y=0)

Sorgu: HERHANGİ X doğal_kare(s(s(0)),X)?

Yanıt: X=(s(s(s(0))))

Sorgu: HERHANGİ X HERHANGİ Y doğal_kare(X, Y)?

Yanıt: (x=0 VE Y=0) VEYA (X=s(0)) VE Y=s(0)) VEYA Y=s(s(s(s(0)))) VEYA ….

Yukarıdaki mantık işlemleri aşağıdaki mantık ve yargılama işlemleri ile yapılır.

Mantıklar:

Önermesel (propositional) Mantık Birinci dereceden yükleme dayanan matematik Yüksek dereceli mantıklar Modal mantık Λ Calculus

Yargılama Yordamları Doğal tümdengelim, klasik yöntemler Kesim çözüm Prawitz / Bibel Bottom-up fixpoint Yeniden yazma Daraltma

2. MANTIKSAL PROGRAMLAMA

2.1. Mantıksal Programlamanın Tarihçesi

Mantığı bir programlama dili olarak kullanma fikri bilgisayar bilimleri topluluğunda uzun zaman önceden beri var olan bir fikirdir. Erken zamanlarda teoremleri ispat eden programlar

geliştirilmişti ama hız ve depolamaya bağlı kısıtlı kapasite ve daha ciddi olan ve arama karmaşıklığından kaynaklanan problemler vardı. Alan Robinson tarafından 1960’lı yıllarda geliştirdiği, bir teoremin ispatlanmasında ispatın yaratılması için rehber olarak kullanılan Resolution ilkesi mantıksal ispatlar kurulmasına dayanan programlama dillerinin gerçekleştirilmesi hedefine büyük katkı sağlamıştır. Bu ilkeyi takiben Londra’daki Imperial Kolejdeki Robert Kowalski ve arkadaşlarının ve aynı dönemde Alain Colmerauer ve arkadaşlarının bir doğal dilin çözümlenmesi için çalıştırılabilir gramerler üzerinde çalışmaları sonucunda Prolog dili 1972 yılında gerçekleştirildi. Üzerinden geçen 20 yıla karşın mantık programlama alanı çekiciliğini çoğu bilgisayar bilimcisi için kaybetmemiş ve yeni bilimciler için araştırma konusu olmuş faal durumunu kaybetmemiş olup araştırmalar halen sürmektedir.Mantıksal programlamanın gelişimi sırasında geçilmiş önemli adımlar şunlardır:

1934’te Alfred Tarski “Predicate Calculus” için anlamsal bir teori geliştirmiştir.

1936’da Gerhard Gentzen “Bir cümle için Predicate Calculus ispatı varsa bu ispat konu dışı içeriklere girilmeden cümlenin içeriğinden de üretilir.” Fikrini ortaya atmıştır.

İlk teorem ispatlayan algoritmaların yaratılması teşebbüsü ispatı mümkün olan algoritmalar arasında yorucu aramalara neden olmuştur. 1950’lerde üretilen bilgisayarların gücüne rağmen, öne sürülen predicate calculus ispat prosedürlerinin karmaşıklıkları çok zorlayıcı olmuştur.

1960’larda predicate logic’in daha basit şekli olan “clausal logic” ortaya çıkmıştır. Bu, verimli hesaplanabilir prosedür üretmek için çok önemli bir ispattır. Daha basit clausal logic, daha farklı ve daha etkin ispat işleme yaklaşımlarına yol açmıştır.

1963’te J. Alan Robinson resolution olarak adlandırdığı çok basit ve çok etkin bir çıkarım kuralını prensip alan bir clausal logic icat etmiştir. Sezgisel bir çıkarım kuralı olmamasına rağmen resolution, bir goal’e ulaşmak için kullanılan ispat prosedürünün büyük adımlarla ilerlemesine izin vermektedir.

Mantığa dayalı yapay zekâ sistemlerinin geliştirilmesine tanımlayıcı bir yaklaşım, mantıksal programlama araştırmalarının ilerlemesiyle aynı döneme rastlamaktadır. 1960’lı yılların sonunda yapay zekâ komiteleri, yapay zekâ amaçları için bilginin tanımlanarak mı yoksa prosedürel olarak mı daha iyi gösterilebileceğini tartışıyordu.

1972’de Robert Boyer ve Strother Moore tarafından implementasyon stratejilerinin geliştirilmesi için çalışmalar yapılmış ve bu çalışmalar popular ve uygulanabilir bir mantıksal programlama dili olan Prolog’u ortaya çıkarmıştır.

1974’te Robert Kowalski bilginin “Horn Clause” gösterimi ile prosedürel gösteriminin denkliğini ispatlamıştır. Bu aşamadan sonra mantık programlama sistemlerinin uygulanması ve geliştirilmesi için teknolojik bir ortam oluşmuştur.

Page 3: Mantıksal programlama

2.2. Mantık Programlamanın Temelleri

2.2.1. Mantık Programlama Nasıl Olur?

Bir mantık programı axiom kümeleri ve bir hedef cümlesinden oluşur. Hedef cümlesinin doğruluğu için axiomların yeterli olup olmadığının tespiti için çıkarım kuralları vardır. Mantık programının çalışması axiomların hedef cümlesinin ispatının kurulmasına denktir. Bu dillerin diğer bir adı da kural tabanlı dilleridir. Bu isim belirli durumların sağlanması ve sağlandığı zaman buna uygun bir tepkinin verilmesinden verilmiştir. Bu dala giren en çok bilinen Prolog dilidir.

Mantık programlama sayesinde programlar hakkında muhakemeler yapılması, çıkarımlar yapılması sağlanır. Ayrıca bu işin otomatik olarak yapılabilmesi açısından kolaydır. Otomatik dönüşümlere, paralelizasyon, yarı otomatik debugging ve program doğrulama için kapı açar. Geliştirilmiş programlama üreticiliği vardır.

Mantık programlama modelinde programcı temel mantıksal ilişkileri tanımlamaktan sorumlu olup çıkarım kurallarının uygulanmasının stilinden sorumlu değildir. Böylece:

Mantık+Kontrol=Algoritmalar olmaktadır.

Mantık programlama değişken kümelerine dayanmaktadır. Belirtimler (predicate) değişken kümelerinin veri tipinin soyutlanması ve genelleştirilmesidir. Bir değişken kümesini:

S0xS1xS2x…….xSn

Şeklinde ifade edebiliriz. Örneğin doğal sayıların kare alma fonksiyonu aşağıdaki şekilde değişken kümeleriyle ifade edilebilir:

{(0,0),(1,1),(2,4),…..}

Bu şekildeki bir kümeye ilişki denir ve aşağıdaki ifadede kare alma ilişkisinin tanımı görülmektedir:

doğal_kare={(0,0),(1,1),(2,4),…..}

Her çiftler için genelleştirme ve isim için bir soyutlama yapılarak aşağıdaki ifade elde edilir:

doğal_kare=(x,x2)

İsmi parametreleştiririz ve şu ifadeyi elde edilir:

doğal_kare(X,Y)<--- Y is } X*X

Burada çift kümesi doğal_kare olarak adlandırıldı ve parametre olarak X,Y ifadeleri kullanıldı.

2.2.2. Mantık Sistemlerinin Sözdizimi (Syntax)

Mantık bir dil olduğu için her dil gibi bir sözdizimi vardır. Mantık sisteminin sözdizimi, sembollerden üretilen iyi biçimlendirilmiş formül (well formed formulas-legal logical expressions)leri tanımlar. Tipik sözdizimi aşağıdaki elemanları içerir:

Sabitler (Constants)

Fonksiyonlar (Functions)Yüklemler (Predicates)Değişkenler (Variables)Bağlaçlar (Connectives)Tanımlayıcılar (Quantifiers)Noktalama işaretleri

2.2.3. Mantık Sistemlerinin Semantiği

Kullanılan dilin anlambilimini (semantic) bilmeden o dilin ifade ettikleri anlaşılmaz. Bu yüzden mantıkta kullanılan formüllerin anlaşılması için önce anlambiliminin öğrenilmesi gerekir.W bir formüller kümesi olsun (içerdiği tüm formüllerin birleşimi) ve A bir formül olsun,

W l = A

İfadesi her W modeli için A doğrudur manasına gelir. Bunu açıklayacak olursak her W’nin doğru olması durumu için, A da doğru olacaktır. Bu yüzden aşağıdaki şekilde cümleler ile bu açıklanabilir:

W A’yı gerektirir. W A’yı içerir. A W’den sonra gelir. A W’nin mantıksal sonucudur.A W’nin bir teoremidir.

Örnek: Aşağıdaki yüklemlerle temsil edilen blokların dünya olduğu varsayılırsa:

Üstünde (A,B): A B’nin üstündedir.Yukarısında (A,B): A B’nin yukarısındadır.W kümesi aşağıdaki formülleri içersin (a,b,c farklı blokları temsil eden sabitler)Üstünde (a,b)Üstünde (a,b)

HER X,Y için yukarısında (X,Y )← üstünde (X,Y)HER X,Y için yukarısında (X,Z)←üstünde (X,Y) & yukarısında (Y,Z)

Bu verilere göre yukarısında (a,c) ifadesinin doğru olduğunu, yukarısında (c,b) ifadesinin de yanlış olduğu görülür.

2.2.4. Predicate Logic

Clausal Form: Implacation (→) ve eşitlik operatörleri yardımıyla yazılan Predicate Calculus cümleleri Λ (conjunction), V (disjunction) ve (negation) operatörleri kullanılarak ta yapılabilirler. Bütün predicate calculus cümleleri clausal form adı verilen özel bir biçimde ifade edilebilir. Clausal form, predicate calculus cümleleri Prolog cümlelerine benzetilebilir. Bu nedenle clausal form Prolog ve mantık arasındaki ilişkiyi anlamak açısından önemlidir.Bir predicate calculus cümlesinin normal forma çevrilmesi altı ana adımda gerçekleşir:

Page 4: Mantıksal programlama

1. Adım: Impllication’ların yok edilmesi: İlk adımla → ve ↔ operatörleri ortadan kaldırılır.

a→b a V ba↔b (ab)(ab)ab (ab)(ba)

bu durumda HER(X,adam(X)insan(X)) cümlesi HER(X, adam(X)insan(X)) olarak çevrilebilir.

2. Adım: Negation operatörünü içe doğru hareket ettirmek: Eğer negation operatörü atomik olmayan bir cümleye uygulanırsa bu adım uygulanır.

(insan(sezar) yaşıyor(sezar)) cümlesi(insan(sezar) yaşıyor (sezar))

olarak çevrilebilir.

3. Adım: Skolem Normal Form: Varoluş tanımlayıcıları ortadan kaldırmaktır. Bu işlem varoluş değişkenler yerine skolem sabit olarak adlandırılmış yeni sabit semboller kullanılarak gerçekleştirilir. Bu özelliklerden en az bir nesne vardır demek yerine böyle bir nesne için bir isim yaratılır ve bu özelliklere sahip olduğu söylenir. Bu ifadenin anlamını en çok bozan çevrim skolem normal forma çevrilir.

VAR(X,kadın(X) annesi (X,havva))

Skolem normal forma çevrilirse:

kadın (g197) annesi(g197,havva)

burada g197 başka hiçbir yerde kullanılmamış yeni bir sabittir. Sabit g197 annesi havva olan bir kadını gösterir. Daha önce kullanılmamış bir sembol seçmek önemlidir.

4. Adım: Evrensel tanımlayıcıları dışa doğru hareket ettirmek: Bütün evrensel tanımlayıcılar cümlenin dışa doğru hareket ettirilir. Bu adım anlamı bozmaz.

kadın(X) çiçek(Y) sever(X,Y)

olarak çevrilebilir.

5. Adım: bağlacınıbağlaçları üzerine dağıtmak: Bu adımda predicate calculus cümlesinin çok değiştiği görülmektedir. Artık cümledeki tanımlayıcılar yok olmuştur. Bağlaç olarak ise sadece ve bağlaçları kalmıştır. Bu adımda cümle yeni bir forma (conjunctive normal form ) sokulacaktır ve artık cümlede conjunction’lar disjunction’lar içinde yer almayacaktır.Çevrim aşağıdaki kurallar doğrultusunda gerçekleştirilecektir.

(AB)C işlemi (AC) (BC)(AB)C işlemi (AC) (BC)

olarak çevrilecektir.

6. Adım: Clause forma sokmak: Yukarıdaki formül dikkatle incelenirse bağlaçlarıyla bağlanmış literal veya literallerden oluştuğu görülür. Literal grupları bağlacıyla bağlanmış literallerdir.bağlacıyla bağlanmış literal gruplarının ayrıntılarına inilmezse genel gösterimi:

(AB) (C(DE))

Şeklindedir. Parantezler gereksiz çünkü aşağıdaki cümlelerin hepsi aynı anlama gelmektedir.

(AB) (C(DE))(A((BC) (DE))(AB) ((CD) E)

kısacası yukarıdaki cümle

ABCDE

şeklinde yazılabilir.

2.2.5. Resolution Yöntemi

Resolution tekniğindeki temel prensip şudur:Aynı literal bir clause’un sol tarafında ve diğer clause’un sol tarafında bulunursa, iki clause bir araya getirilip tekrar eden literal atılarak yeni bir clause oluşturulur. Örnek olarak:

Üzgün(turgay); kızgın (turgay): -çalışma_günü (bugün), yağmurlu (bugün).Tatsız( turgay):-kızgın(turgay), yorgun (turgay).

Resolution tekniği ile:

Üzgün(turgay);tatsız(turgay):-çalışma_günü(bugün), yağmurlu(bugün),yorgun(turgay)

cümlesi çıkartılabilir.

Yukarıdaki örnekte iki şey atlanmıştır. Birincisi clause’lar değişken içerdiğinde durum daha da zorlaşır. İkincisi tekrar eden literaller tamamıyla aynı olmak zorunda değildir. İki literaller birbiriyle aynı olmasa da eşlenebilir.İkinci örnekte bu iki durumun nasıl çözüme kavuştuğu anlatılmıştır.

1. Şahıs (f1(X));kral(X):-.2. kral(Y):-saygıduyar(f1(Y),Y).3. saygı_duyar(Z,arthur):-şahıs(Z)

2. ve 3. Numaralı clause’lardan aşağıdaki sonuç çıkarılabilir.(saygı_duyar literallerini eşleyerek)

4. kral(arthur):-şahıs(f1(arthur))

Y ile Arthur, Z ile f1(Y) eşlendi. Bir sonraki adımda 1. Ve 4. Numaralı clause’lardan “Arthur bir kraldır” sonucu çıkarılacaktır.

5. kral(arthur):-kral(arthur)

Page 5: Mantıksal programlama

Resolution tekniğinde eşleme (matching) olarak adlandırılan işlem unification adını alır. [2]

2.3. Mantık Programlamanın Alanları

Mantık programlama kökleri A1’e dayanan güçlü metafordur. Bir mantık programı spesifikasyon olarak deklarif okumaya sahiptir, bir teori mantık kümeleri şeklinde ifade edilmektedir. Mantık programlamanın özellikle kullanıldığı problem alanları aşağıdaki gibidir:

Teorem kanıtlama Yorumlayıcı ve derleyiciler Çizge algoritmaları Protokol doğrulama Bilgi temsili Uzman sistemler, karar destek sistemleri Planlama ve programlama( scheduling) Doğal dil işleme Veritabanı modelleme

Bu alanlarda aşağıdaki uygulamalar geliştirilmektedir:

İlişkisel veritabanları Doğal dil arayüzleri Uzman sistemler Sembolik denklem çözümleri Planlama Prototip üretimi Similasyon Programlama dil gerçekleştirimleri

Alternatif programlama şemaları ise şu şekildedir:

Coroutining Concurrency Denklemlere dayalı mantık programlama

o Fonksiyonel yetenekler Sınırlamalı mantık programlama(constraint)

o Mantıksal aritmetik, kümeler,….. Tümdengelimli veritabanları

3. PROLOG

3.1. Genel Bakış

Prolog en geniş şekilde kullanılan mantık programlama dilidir. Bazı özellikleri:

Mantıksal değişkenleri kullanır. Bunlar diğer dillerdeki değişkenlere benzemeler. Programcı bunları veri yapıları içerisindeki hesaplama sürdükçe doldurulabilen delikler olarak kullanabilir.

Birleştirme parametreleri geçiren, sonuçları döndüren, veri yapılarını seçen ve yaratan kurulu manipülasyondur

Temel kontrol akış modeli backtracing’dir. Program cümleleri ve veri aynı forma sahiptir. Yordamların ilişkisel formu tersinir yordamlar

tanımlanabilmesine olanak sağlar.

Cümleler durum analizi ve nondeterminizmi ifade etmek için elverişli bir yol sunar.

Bazı durumlarda mantığın içermediği kontrol özellikleri kullanılabilir.

Bir prolog programı kuralları içerdiği gibi olguları da içeren bir ilişkisel veritabanı olarak gözükebilir.

İfadeler bir problem hakkında çözümün nasıl yapılacağı yerine neyin doğru olduğuna dair bilgiler içerir. Prolog sistemi ifadeleri mümkün çözümler uzayı içerisinden bir çözüm arama yolu ile çözümü gerçekleştiren ifadeler içerir. Büyün problemler saf deklarif tanımlamalar içermediğinden bazen extralogical cümleler gerekebilir.Prolog için gramer örneği:

Core Prolog

Program::= Clause… Query | QueryClause::= Predicate .| Predicate:- PredicateList .PredicateList::= Predicate | PredicateList , PredicatePredicate::= Atom | Atom (TermList)TermList::= Term | TermList , TermTerm::= Numeral | Atom | Variable | StructureStructure::= Atom (TermList)Query::= ?-Predicatelist .Numeral::= an integer or real numberAtom::= string characters beginning with a lowercase letter on encluded in apostrophes.Variable::= string of characters beginning with an uppercase letter or underscore

Terminals= {Numeral, Atom, Variable,:-,çomma, period, left and right parentheses}

3.2. Prolog Programı Örneği

Elephant(george).Elephant(mary).

Panda(chi_chi).Panda(ming_ming).

Dangerous(X):- big_teeth(X).Dangerous(X):- venomous(X).

Guess(X, tiger):- stripey(X), big_teeth(X), isaCat(X).Guess(X, koala):- arboreal(X), sleepy(X).Guess(X, zebra):- stripey(X), isaHorse(X).

3.3. Prolog Temelleri

Page 6: Mantıksal programlama

Şekil 1. Prolog ’un Temel Yapıları Tablosu

3.3.1. Cümleler: Gerçekler ve Kurallar

Bir prolog programcısı nesneleri, bağıntıları (relation) ve bu bağıntılarım doğru olduğu kuralları tanımlar.

Bill likes dog.

Örnekte Bill ve dog nesneleri arasındaki bağıntıyı gösterir. Bu cümleye bağıntının ne zaman doğru olduğunu gösteren bir kural eklenirse:

Bill likes dog if the dogs are nice.

3.3.2. Gerçekler: Bilinenler

Prologda nesneler arası bağıntılar predicate olarak adlandırılır.Aşağıdaki konuşma dilinde likes bağıntısı örneklenmiştir:

Bill likes Cindy.Cindy likes Bill.Bill likes dog.Takip eden örneklerde ise prolog dilinde yazılmış bazı gerçekler görülmektedir;

likes (Bill, Cindy)likes (Cindy, Bill)likes (Bill, dogs)

Gerçekler nesnelerin özelliklerini belirtmek amacıyla da kullanılırlar:

Kermit is green. green(kermit)Caitlin is a girl. girl(caitlin)

gibi.

3.3.3. Kurallar: Verilen Gerçeklerle Hangi Sonuçlara Ulaşılabilir

Kurallar verilen gerçeklerden yeni gerçekler türetmeye yararlar. Aşağıda likes bağıntısıyla ilgili bazı kurallar listelenmiştir:

Cindy likes everything that Bill likes.Caitlin likes everything that is green.

Verilen kurallar doğrultusunda aşağıdaki yargılara ulaşılabilir:

Cindy likes Cindy.Caitlin likes Kermit.

Aynı kuralları Prolog dilinde yazmak gerekirse:

likes(cindy, something):- likes(bill, something).likes(caitlin, something):-green(something).

3.3.4. Sorgular (Queries)

Prologda bir dizi gerçek verildiğinde; bu gerçeklerle ilgili sorular sorulabilir ve bu işleme Prolog sistemini sorgulamak denir. Verilen gerçekler ve kurallar doğrultusunda aşağıdaki sorular cevaplanabilir:

Does Bill likes Cindy?

Prolog dilinde bu soru aşağıdaki gibi sorulur:

likes(bill, cindy).

Bu soruya karşılık prolog yes cevabını döndürür.Sorulabilecek ikinci soru “what does Bill likes?” sorusudur. Bu soru prolog diline aşağıdaki gibi çevrilebilir:

likes(bill, what)

dikkat edilirse prolog dilinde gerçekler ve sorgular arasında yazım farkı yoktur. Burada dikkat edilmesi gereken nokta birinci nesne (bill) küçük harfle başlar. Bu Bill’in sabit bir nesne olduğunu gösterir. What ise büyük harfle başlar ve değişken bir nesnedir.

Prolog bir sorguya cevap verebilmek için daima en tepeden başlayarak gerçekleri tarar. Prolog tarama işlemine taranacak gerçek kalmayana kadar devam eder. Yukarıdaki sorgunun sonucu aşağıdaki gibi döndürülecektir.

What= cindyWhat= dogs

2 solutions

Sorguyu değiştirip What does Cindy likes? Şekline getirirsek:

likes(cindy, what)

Prolog aşağıdaki sonucu döndürecektir:

What= billWhat= cindyWhat= dogs3 solutions

3.3.5. Gerçekler, Kurallar ve Sorguların Birleştirilmesi

Aşağıdaki gibi gerçeklerin ve kuralların verildiği varsayılırsa:

A fast car is fun.A big car is nice.A little car is practicalBill likes a car if the car is fun.

Bu gerçekler incelendiğinde Bill’in hızlı arabalardan hoşlandığı sonucu çıkartılabilir. Prologda aynı sonucu bulur.

Aşağıda proloğun sorguları cevaplamak için gerçekleri nasıl kullandığını gösteren örnek sunulmuştur:

Page 7: Mantıksal programlama

Predicatesnondeterm likes(symbol, symbol)

Clauseslikes(ellen, tenis)likes(john, football)likes(tom, baseball)likes(eric, swimming)likes(mark, tennis)likes(bill, activity):- likes(tom, activity)

Goallikes(bill, baseball)

Sistem diyalog penceresine aşağıdaki sonucu döndürür:

Yes.

3.3.6. Değişkenler: Genel cümleler

Prologda değişkenler kullanılarak genel gerçekler ve kurallar yazıldığı gibi genel sorularda sorulabilmektedir. Konuşma dilinde değişkenler çok sık kullanılır. Örnek olarak aşağıdaki İngilizce cümle ele alınırsa:

Bill likes the same thing as Kim.

cümle prolog diline çevrilirse:

likes(bill, thing):- likes(kim, thing)

şeklinde yazılır. Yukarıda görüldüğü gibi Prologda değişkenler büyük harfle veya “_” karakteri ile başlar. [3]

3.4. Prolog Çalışma Prensipleri

Prolog bir goal’ü bir subgoal ile uyuşturmaya çalışırken unufication adı verilen bir arama işlemi yapılır. Unuficationi subgoal’de bulunan veri yapıları ile verilen clause’daki bilgileri uyuşturma çabasıdır. Unuficationi diğer geleneksel dillerde bulunan parametre iletme, durum seçimi, yapı yaratma, yapı erişimi ve atama gibi işlemleri implement eder.

Domains

title, author= symbolpages= unsigned

Predicates

book (title, pages)nondeterm written_by (author, title)nondeterm long_novel (title)

Clauses

written_by (fleming, “DR NO”)written_by (melville, “MOBY DİCK”)book (“MOBY DİCK”, 250)book (“DR NO”, 310)long_novel (Title):- written_by (_, Title)

book (Title, Length) Length>300

verilen örnek program için Goal written_by(X,Y)’dir

Bu goal’ü sağlayacak veriyi bulmak için prolog, programa verilmiş tüm written_by clause’larını test eder. X ve Y değişkenlerini written_by clause’ undaki veri yapıları ile eşleştirmek için program baştan sonra doğru taranır. Bu goal ile uyuşan bir clause bulunduğunda clause’un değerleri X ve Y değişkenlerine bağlanır, böylece goal ile clause identical (özdeş) hale gelirler. Yani goal ile clause unify edilmiş (birleştirilmiş) olur bu unufication işlemidir.

Bu programda goal, ilk written_by clause’u ile özdeşleşebilir.

written_by(X,Y)written_by(fleming,”DR NO”)

X değişkeni fleming verisine, Y değişkeni ise DR NO verisine bağlanır. Program çalıştırıldığında sonuç X=fleming, Y= DR NO olarak görüntülenir.

3.4.1. Backtracking

Bir problemin çözümünü ararken mantıksal bir yol izlemek gereklidir. Ama bazen izlenen mantıksal yol istenen sonuca ulaşamayabilir. Böyle durumla karşılaşıldığında başka alternatif çözüm yolları denemek gerekir. Örneğin; bir labirentin içinde çıkış yolu bulmak üzere dolaşırken izlenebilecek ve kesin çözüme götürecek yöntemlerden biri de yolun her ikiye ya da üçe ayrıldığı noktada hep soldaki yolu seçmektir. Bu şekilde ilerlenirken çıkmaz bir yere gelinirse en son sola dönülen yere kadar geriye dönülerek bu sefer sağdaki yol seçilip yine bir sonraki yol ayrımlarından hep sola dönme yöntemi izlenebilir. Bu şekilde olası tüm yollar denenmiş olur ve sonuca mutlaka ulaşılır

Prolog da bu yöntemin aynısını kullanmaktadır. Bu yönteme backtracking yani geri dön tekrar dene yöntemi denmektedir. Prolog bir probleme çözüm ararken, iki olası durum arasında karar vermek zorunda kalabilir. Her seçim yaptığı noktaya bir backtracking point noktası koyarak subgoallerden ilkini sağlamasını gerçekleştirmeye çalışır. Eğer seçtiği subgoal çözüme ulaşmazsa Prolog geriye dönecek, belirteç koyduğu noktada diğer bir alternatifi seçerek çözümü aramaya devam edecektir.

Backtracking kavramı örnek bir program üzerinde açıklanabilir.

Predicates

nondeterm likes(symbol, symbol)nondeterm tastes(symbol, symbol)nondeterm food(symbol)

Clauses

likes(bill, X):- food(X), tastes(X,good)tastes(pizza, good)tastes(spinach, bad)food(spinach)food(pizza)

Page 8: Mantıksal programlama

Goal

likes(bill, What)

Bu örnekteki kuraldan Bill’in tadı güzel olan yiyeceklerden hoşlandığı anlaşılmaktadır. Program Bill’in neden hoşlandığını aramak üzere likes(bill, What) goal’ünü gerçekleştirecektir.Bu iş için program baştan sonra doğru taranmaya başlanır. Bulunan ilk clause’da What değişkeni X değişkeni ile unify edilir çünkü aranan ve bulunan clause’lar birbiriyle uyuşmuştur.

likes(bill, What)likes(bill, X)

unificaiton işleminden sonra Prolog, ele aldığı kuralın goal’ü sağlayıp sağlamadığını araştırır. Bunun için kuralın ilk bölümü olan

food(X)

subgoal’ü ele alınır. Bu ilk subgoal’ü sağlamak için Prolog tekrar programın en başına döner ilk clause’da X değişkeni spinach bilgisi ile sağlanır. Elde edilen çözüm dışında bir başka alternatif daha olduğu için Prolog ilk çözümü bulduğu noktaya bir backtracking point koyar. Bu nokta proloğun spinach verisi için çözüm gerçekleşmezse geriye döneceği ve diğer alternatifi deneyeceği noktadır.Bu veri ile prolog

tastes(spinach, good)

subgoal ’ünü sağlamaya çalışır. Bu subgoal kuralın ikinci maddesidir. Clause’lar arasında

tastes(spinach, good)

durumu sağlanmadığından prolog backtracking point koyduğu noktaya food(spinach) durumuna geri döner. Bu noktada prolog başka bir değişkeni deneyebilmek için bu noktadan sonra bağladığı tüm değişkenleri bırakır. Programın bu noktada food(X) clause’u için deneyebileceği diğer alternatif veri pizzadır. X değişkeni pizza verisine bağlanır. Bu noktadan sonra program sağlaması gereken ikinci subgoal olan

tastes(pizza, good)

clause ’unu ele alır. Bu clause’a uygun bir durum olup olmadığını programın yine en başına dönülerek program sonuna kadar aranır. Aranan yeni subgoal program içinde bulunduğundan, çözümü aranan goal için başarıya ulaşılmış olur. Kontrol edilen

likes(bill, What)

goal’ü için pizza çözümü bulunur çünkü What değişkeni likes kuralındaki X değişkeni ile unify edilmiş ve değişkeni de pizza verisine bağlanmıştır. Sonuç aşağıdaki gibi rapor edilir:

What= pizza1 solution

Prolog problemin birden fazla çözümü olduğu durumlarda sadece ilk çözümünü bulmakla kalmaz, tüm olası çözümleri de

bulur. Dikkat edilmesi gereken bir nokta proloğun gereksiz sonuçlar da bulabileceğidir.

Backtracking ’in Dört Temel İlkesi

Subgoal’ler yukarıdan aşağıya doğru sırayla sağlanmalıdır.

Clause’lar programın içinde bulundukları sıra ile test edilirler.

Bir subgoal bir kuralın sol taraf değeri ile uyuştuğu zaman, kuralın sağ tarafının da doğruluğu sağlanmalıdır. Kuralın sağ tarafı doğruluğu sağlanacak bir alt goal’ler kümesidir.

Bir goal, bulunması gereken tüm gerçekler bulunduğunda sağlanmış olur.[4]

4. TÜMEVARIMLI MANTIK PROGRAMLAMA

TMP, makine öğrenmesi ve mantık programlamanın kesişimi olarak tanımlanabilir. Amacı gözlemlerden(örneklerden) hipotezler geliştiren ve artalan bilgisinden yeni bilgiler elde eden teknikler ve araçlar geliştirmektir. Bu sebeple TMP, makine öğrenmesi ve mantık programlama tekniklerinin her ikisini de kullanır.

Makine öğrenmesi Mantık Programlama

İstatiksel tekniklerin Teori uygulamasının uygulanması gösterimi Örneklerden mantık programların oluşturmak için teori uygulaması ve program uygulaması

Şekil 2. Makine öğrenmesi, Mantık Programlama Ve TMP

TMP’de kullanılan mantıksal terimlerin tanımları aşağıda açıklanmıştır.

B sonlu sayıda cümlecik içeren artalan bilgisidir.E sonlu sayıda örnek setidir = E+ ∪ E−

Pozitif örnekler: Boş olmayan tanımlı cümle kümesidir.

Negatif Örnekler: Horn cümleciği kümesidir (boş olabilir).

Bu mantıksal terimlerin ne ifade ettiğini birinci dereceden yüklem mantığına benzer bir gösterim kullanarak bir örnek ile açıklayalım. Aile içindeki akrabalık ilişkilerinin öğrenileceği bir aile örneğini ele alalım. Bunun için verilenler şunlardır:

(1)

TMP

Page 9: Mantıksal programlama

Dede ve torunları arasındaki ilişkiyi gösteren pozitif örnekler aşağıda verilmiştir.

(2)

Ek olarak aşağıdaki negatif örneklerin de verildiğini varsayalım.

(3)

B’nin doğruluğunu kabul edip, yeni E+ E+ ve E−E− gerçekleri ile karşılaşıldığında aşağıdaki ilişki tahmin edilebilir.

H= ebeveyn(X,Y) ← anne(X,Y) (4)

Burada H, elde edilen hipotezdir.[5]

5. MANTIKSAL PROGRAMLAMANIN GELECEĞİ VE SONUÇLAR

Mantıksal programlama kendisini pek çok kullanım alanında kanıtlamış bir yöntemdir. Bu kullanım alanları arasında diagnostic uzman sistemler, doğal dil işleme, agent tabanlı kontrol sistemleri yer almaktadır. Bunlardan doğal dil işleme mantıksal programlamanın kullanıldığı en zor uygulama alanları arasında gösterilmektedir. Doğal dil işleme mantıksal programlama ile doğal dillerin gramer tabanlı gösterimlerinin birleştirilmesiyle konuşma dilini anlayan araçların geliştirilmesi için çalışan bir uygulama alanıdır.

Mantıksal programlamanın Web’e açılması da diğer bir kullanım alanı olarak yerini almış bulunmaktadır. Mantıksal programlamanın kullanımındaki amaç Web için geliştirilen uygulamalara knowledge tabanlı tekniklerin uygulanabilirliğini sağlamaktır. Böyle bir yaklaşımın avantajları kaynaklar hakkında knowledge seviyesinde reasoning yapma ve bilgi filtrasyonu tekniklerine mantık tabanlı teknikler ekleyebilme olacaktır.

Prolog gibi mantıksal programlama için kullanılan bir programlama dilinin uygulama alanlarının genişletilmesini sağlayan bir etken de proloğun Java implementasyonlarının geliştirilmesi olmuştur. Böylece mantıksal programlamanın Java’nın eklentisiyle Web üzerinden uygulamalarının da mümkün olabileceği düşünülmüştür.

Bazı agent uygulamalarında mantıksal programlama dillerinin sağladığı yüksek formalizasyon seviyesinden de faydalanılabilmektedir. Şu anda kullanılan agentların ilk mantık tabanlı modelleri ile agentların diğer programlama dilleri ile realize edilmeleri arasında bir geçiş mevcut değildir. Bu geçiş deklarif bir mantık tabanlı programlama dilinin yazılım agentlarının realize edilmesi için kullanılmasıyla gerçekleştirilebilir.

Mantıksal programlamanın bir diğer kullanım alanı constraint programlamadır. Bu programlama açısından çok

esnek bir paradigma olup uygulamayı içeren constraint’i hesaplamaları yapan inference engine’i açıklar. Kontrol, scheduling ve bankacılık gibi pek çok kullanım alanı vardır.İnducive mantıksal programlama ise mantıksal programlamanın önerdiği sunumlar arasında veri madenciliği ve makinelerin öğrenmesi süreçlerini inceleyen bir uygulama alanıdır.

6. KAYNAKÇA

[1]Hermenegildo, M. (tarih yok). www.cliplab.org: http://cliplab.org/~logalg/slides/PS/1_intro_cs550.pdf adresinden alındı

[2]www.emu.edu.tr: http://www.emu.edu.tr/aelci/Courses/D-318/D-318-Files/plbook/logic.htm adresinden alındı

[3]Hermenegildo, M. (tarih yok). www.cliplab.org: http://cliplab.org/~logalg/slides/PS/2_logic_programming.pdf adresinden alındı

[4]Hermenegildo, M. (tarih yok). www.cliplab.org: http://cliplab.org/~logalg/slides/PS/3_prolog_language.pdf adresinden alındı

Page 10: Mantıksal programlama

[5]AYDIN, Ö., & KILIÇASLAN, Y. (2010). Tümevarımlı Mantık Programlama ile Türkçe için Kelime Anlamı Belirginleştirme Uygulaması., (s. 4).

[6]Karaçay, T. (tarih yok). www.başkent.edu.tr: http://www.baskent.edu.tr/~tkaracay/etudio/agora/bt/akillivt.htm adresinden alındı