BÖLÜM 3:MANTIK 3.1 ÖNERME NEDİR? Doğru (True=T) ya da Yanlış (False=F) doğruluk değerlerinden birisine sahip olan ifadelere önerme adı verilir. Örneğin, “Okullar açıldı” ya da “Kelebekler uçar” gibi. Milattan önce 384-322 yılları arasında yaşamış olan eskli Yunanlı düşünür Aristo’dan önce mantık, sadece matematik, fen bilimleri ve felsefe konuları ile sınırlı bir alanda kullanılmaktadır. Aristo tarafından ortaya konan klasik mantık, mantık ilkelerinin günlük yaşamın bir çok problemini anlamak ve açıklamak için de kullanılabileceğini göstermiştir. Ünlü filozof Bertrand Russell, temelleri 2300 yıl önce Aristo tarafından atılan bu klasik mantığı esas alarak, önerme mantığı için üç temel kural tanımlamıştır. Bu üç kural, önerme mantığını anlamak için iyi bir başlangıç olabilir.
3.1.1 Önerme Mantığı Eşdeğerlik Kuralı Bu kural, her özgün düşüncenin kendisine eşdeğer olduğunu söyler. Örneğin, “Ankara, Ankaradır” ya da “Yapay zeka, yapay zekadır” gibi. Doğruluk Değeri Kuralı Her ifadenin tek bir doğruluk değeri vardır: Doğru (True) ya da Yanlış (False). Herhangi bir ifadenin başka bir doğruluk değerine sahip olma şansı yoktur. Diğer bir deyişle, bir ifade kısmen doğru ya da kısmen yanlış olamaz. Kuşkusuz ki bu, günlük yaşantımızda karşımıza çıkan bütün ifadeler için söz konusu bir durum değildir. Örneğin, “Kırmızı güzel bir renktir” ifadesi için, günlük yaşantımızda kesin bir yargıya varmamız mümkün değildir. Zira nu ifadenin doğruluk değeri kimileri için Doğru, kimileri için Yanlış olabilir. Hatta bazıları bu ifadeyi kısmen doğru bulabilir. Ancak önerme mantığında her ifade için Doğru ya da Yanlış doğruluk değerlerinden birisi atanır.
3.1.1.1 Önerme Mantığı Karşıtlık Kuralı
Karşıtlık kuralına göre bir ifade ve onun karşıtı, farklı doğruluk değerlerine sahip olacaktır. Örneğin, “Hayat güzeldir” ifadesi ile bunun karşıtı olan, “Hayat güzel değildir” ifadelerinden birincisi Doğru ise ikincisi Yanlış, birincisi Yanlış ise ikincisi Doğru doğruluk değerine sahip olacaktır.
3.1.2 Önerme Mantığında Kullanılan Simgeler Önermeler genellikle p,q,r,s ve u harfleri ile gösterilir. Önermelere bu harflerden herhangi birisini karşılık getirmek için “=“ simgesi kullanılır. Önermeler, mantıksal bağlaçlarla bir araya getirilerek “mantıksal ifadeler” elde edilir. Bu bağlaçlar aşağıda verilmiştir: ^
: VE Bağlacı
V
: VEYA Bağlacı
→
: GEREKTİRME Bağlacı
↔
: ÇİFT YÖNLÜ GEREKTİRME Bağlacı
Bir önermenin karşıtı (ya da değili) ise ¬ önek simgesi ile gösterilir.
3.1.3 Atomlar ve Formüller Önermeler mantığında her bir önerme, bu sistematiğin en küçük yapıtaşı olması nedeniyle, “atomik formül” ya da kısaca “atom” olarak adlandırılır. “İyi-tanımlı formül” ya da kısaca formül olarak adlandırılan mantıksal ifadeler ise aşağıdaki kurallar kullanılarak oluşturulurlar: Her atom, bir formüldür. Eğer G bir formül ise, ¬G de bir formül olur. Eğer G ve H formül ise, G^H, GνH, G→H ve G↔H de formül olur. Bütün formüller yukarıdaki kurallar uygulanarak elde edilirler.
3.1.3.1 Atomlar ve Formüller - Örnek-1 Aşağıdaki önermeleri göz önüne alalım: p=
“Havadaki nem oranı yüksektir”
q=
“Sıcaklık yüksektir”
r=
“İnsanlar kendilerini iyi hissederler”
Bu durumda, (p^q) → ¬ r
bir formüldür. Bu formülün anlamı ise, “Havadaki nem oranı ve sıcaklık yüksek olduğunda insanlar kendilerini iyi hissetmezler” şeklinde olacaktır.
3.1.3.2 Atomlar ve Formüller - Örnek-2 Aşağıdaki önermeleri göz önüne alalım: p=
“Yağmur yağar”
q=
“Hava serinler”
Bu durumda, p → q formülünün anlamı, “Yağmur yağarsa hava serinler” olacaktır. Ancak bunun tersi olan q → p formülünü, yani “Hava serin ise yağmur yağıyordur” sonucunu ilk formülden çıkarmamız mümkün değildir. Çünkü havanın serin olması, yağmurun yağıyor olmasını gerektirmez. Hava başka bir sebepten de soğuk olabilir. İşte burada, ↔ simgesinin farklılığı ortaya çıkmaktadır. Çift yönlü gerektirme, her iki taraf da birbirini gerektirdiğinde kullanılmaktadır. Örneğin, p=
“Hava soğuktur”
q=
“Hava üşürler”
durumunda, p ↔ q formülü doğru bir ifade olacaktır. Çünkü havanın soğuk olması ve insanların üşümesi, birbirlerini çift yönlü olarak gerektirir. Diğer bir gösterimle, p↔q=p→q^q→p olur.
3.1.4 Formüllerin Doğruluk Değerlerinin Belirlenmesi p ve q iki farklı önerme olsun. Bu durumda p ve q önermeleri ve mantıksal bağlaçlar kullanılarak oluşturulacak temel formüllerin doğruluk değerlerini aşağıdaki tabloyu kullanarak belirleriz:
Tabloda da görüldüğü gibi, Ve bağlacı ile bağlı önermelerin oluşturduğu formül, ancak her iki önerme de doğru ise doğru olmakta, aksi hallerin tamamında yanlış olmaktadır. Veya bağlacı ile bağlı önermelerin oluşturduğu formül ise ancak her iki önerme de yanlış ise yanlış olmakta, aksi hallerin tamamında doğru olmaktadır. Gerektirme bağlacı ile bağlı önermelerin oluşturduğu formül, birinci önermenin doğru, ikinci önermenin yanlış olduğu durumda yanlış olmakta, aksi hallerin tamamında doğru olmaktadır. Çift yönlü gerektirmede ise, her iki önermenin de doğruluk değerlerinin aynı olduğu durumlarda sonuç doğru, aksi halde yanlıştır.
3.1.5 Formüllerin Yorumlanması Bir formülü oluşturan önermelere atanan belirli doğruluk değerlerine karşılık, formülün doğruluk değerinin belirlenmesi işlemine o formülün yorumlanması adı verilir. Örneğin, G=(p ^ q) → (r ↔ ¬s) formülünde yer alan önermeler {p,q,r,s} olarak yazılabilir. Bu önermelere, aynı sıralama ile {T,F,T,T} doğruluk değerlerini atadığımız takdirde, G formülünün doğruluk değer T, yani doğru olarak bulunmuş olur. Böylece G’nin {T,F,T,T} yorumlamasını yapmış oluruz.
3.1.5.1 Formüllerin Yorumlanması Bir formülü oluşturan önermelerin sayısını N ile gösterirsek, o formülün olası bütün yorumlamalarının sayısı,
olacaktır. Bir G formülünün bütün yorumlamalarını içeren tabloya, G formülü için doğruluk tablosu adı verilir.
3.1.5.2 Formüllerin Yorumlanması Örnek olarak G=(p ^ q) → (r ↔ ¬ s) formülünü göz önüne alalım. Bu formülde 4 adet önerme bulunduğundan (p,q,r ve s), formülün toplam yorumlama sayısı,
adet olacaktır. Diğer bir deyişle G formülünün doğruluk tablosu, toplam 16 satırdan oluşacaktır. Bir sonraki sayfada, G formülünün doğruluk tablosu verilmiştir.
3.1.5.3 Formüllerin Yorumlanması G=(p ^ q) → (r ↔ ¬ s) formülü için doğruluk tablosu:
3.1.6 Geçerlilik (Totoloji) ve Tutarsızlık (Çelişki) Bütün yorumlamaların sonucunda doğru değerini alan formüle “geçerli formül” ya da “totoloji” adı verilir. Diğer bir deyişle, doğruluk tablosunda her satırda T değeri elde edilen bir formül, geçerli bir formül olacaktır. Örnek olarak, G = ((p → q) ^ p) → q formülünü göz önüne alalım. Bu formülde toplam iki önerme olduğundan, 4 tane yorumlaması olacaktır. Bu yorumlamaların yer aldığı doğruluk tablosu aşağıda verilmiştir:
Görüldüğü gibi G formülü bütün yorumlamalarında T değerini almaktadır. Bu durumda G geçerli bir formüldür (totolojidir). Geçerli olmayan formüle, “geçersiz formül” denir. Diğer bir deyişle en az bir F doğruluk değerli yorumlamaya sahip olan formül, geçersiz olacaktır.
3.1.6.1 Geçerlilik (Totoloji) ve Tutarsızlık (Çelişki) Bütün yorumlamaların sonucunda yanlış değerini alan formüle “tutarsız formül” ya da “çelişki” adı verilir. Diğer bir deyişle, doğruluk tablosunda her satırda F değeri elde edilen bir formül, tutarsız bir formül olacaktır. Örnek olarak, H = (p → q) ^ p ^ ¬ q formülünü göz önüne alalım. Bu formülde toplam iki önerme olduğundan, 4 tane yorumlaması olacaktır. Bu yorumlamaların yer aldığı doğruluk tablosu aşağıda verilmiştir:
Görüldüğü gibi H formülü bütün yorumlamalarında F değerini almaktadır. Bu durumda G tutarsız bir formüldür (çelişkidir). Tutarsız olmayan formüle, “tutarlı formül” denir. Diğer bir deyişle en az bir T doğruluk değerli yorumlamaya sahip olan formül, tutarlı olacaktır. Bu tanımlama, geçersiz tanımlaması ile çakışır. Yani yorumlamalarının tamamı T ya da F doğruluk değerinden oluşmayan, iki doğruluk değerini de bulunduran formüller tutarlı, ancak geçersizdir.
3.1.6.2 Geçerlilik (Totoloji) ve Tutarsızlık (Çelişki) Şimdi G ve H formüllerinin sırasıyla totoloji ve çelişki olmalarının anlamını, bu formülleri oluşturan p ve q önermelerine günlük hayatımızdan birer anlam yükleyerek daha iyi görmeye çalışalım. p=
“Yağmur yağar”
q=
“Yerler ıslanır”
olsun. Buna göre G formülünü aşağıdaki gibi anlamlandırabiliriz: G = ((p → q) ^ p) → q “Yağmur yağar ise yerler ıslanır, yağmur yağıyor, o halde yerler ıslanır.” Görüldüğü gibi bu formülün geçerli olduğu, anlamsal olarak da açıktır. Oysa aynı önermelerle H formülünü oluşturursak: H = (p → q) ^ p ^ ¬ q
“Yağmur yağar ise yerler ıslanır, yağmur yağıyor, o halde yerler ıslanmaz.” İşte burada olduğu gibi günlük yaşantımızda kendisiyle çeliştiğini söylediğimiz formüller aslında mantık biliminde de birer çelişkidirler ve bu formüller, bütün yorumlamalarda F değerini alırlar.
3.1.7 Önerme Mantığında Sonuç Çıkarma Bazı durumlarda bir ya da daha çok formülün doğru olması durumunda, bunlara bağlı olarak başka bir formül de doğru olur. Bu formüle, diğer formüllerin mantıksal sonucu denir. Örnek olarak daha önceki G formülünü aynı önermelerle göz önüne alalım: p = “Yağmur yağıyor” q = “Yerler ıslanıyor” G = ((p → q) ^ p) → q Burada, q önermesi, (p → q) ve p formüllerinin mantıksal sonucu olacaktır. Çünkü, p → q : “Yağmur yağıyor ise yerler ıslanıyor” q : “Yağmur yağıyor” formüllerinden, “o halde yerler ıslanıyordur” sonucunu çıkarmamız, gayet doğaldır.
3.1.7.1 Önerme Mantığında Sonuç Çıkarma Daha sembolik gösterecek olursak, bir G formülünün G[1],G[2],…G[n] formülerinin mantıksal sonucu olması demek, G[1],G[2],…G[n] formüllerinin T değerini aldıkları bütün yorumlamalarda G formülünün de T değerini taşıması demektir. Buna denk olarak, G formülünün G[1],G[2],…G[n] formüllerinin mantıksal sonucu olması demek, G[1] ^ G[2] ^ … ^ G[n] → G formülünün geçerli bir formül , yani totoloji olması demektir.
3.1.7.2 Önerme Mantığında Sonuç Çıkarma Basit bir örnek verelim: p= “Hava sıcaklıkları mevsim normallerinin üzerindedir” q= “Barajlardaki su seviyesi normalin altındadır” r = “Programlı su kesintileri uygulanmaktadır” Şimdi, bu önermeleri kullanarak, aşağıdaki formülleri oluşturalım:
G[1] : p → q “Hava sıcaklıkları mevsim normallerinin üzerine çıkarsa barajlardaki su seviyesi normalin altına düşer” G[2] : q → r “Barajlardaki su seviyesi normalin altına düşerse programlı su kesintileri uygulanır” G[3] : p “Hava sıcaklıkları mevsim normallerinin üzerindedir”
Göstermek istediğimiz, r önermesinin G[1], G[2] ve G[3] formüllerinin mantıksal sonucu olduğudur. Yani yukarıdaki formüller doğru olduğunda, bunun bir sonucu olarak programlı su kesintilerinin uygulanacağı gerçeğini elde edeceğiz. Bunun için, ((p → q) ^ (q → r) ^ p) → r formülünün geçerli bir formül, yani totoloji olduğu gösterilmelidir. Doğruluk tablosu yöntemiyle bunu gerçekleştirelim.
3.1.7.3 Önerme Mantığında Sonuç Çıkarma ((p → q) ^ (q → r) ^ p) → r formülü için doğruluk tablosu:
Görüldüğü gibi oluşturduğumuz ((p → q) ^ (q → r) ^ p) → r formülü geçerli bir formüldür. Dolayısıyla r önermesi, (p → q), (q → r) ve p formüllerinin mantıksal sonucudur.
3.1.7.4 Önerme Mantığında Sonuç Çıkarma Sonuç çıkarma için doğruluk tablosu hazırlama yöntemi, her zaman pratik bir yöntem olmayabilir. Çünkü önerme sayısı fazla olduğunda, doğruluk tablosundaki satır sayısı buna bağlı olarak üstel bir şekilde artacağından, hatasız bir şekilde böyle büyük bir tablonun hazırlanması mümkün olmayabilir.
Formüllerin indirgenmesinde kullanılan kurallar, mantıksal sonuç çıkarımında da kullanılırlar. Bu kurallar, bir formülü en sade biçimine indirgemektedirler. Bu en sade biçim, totoloji ya da çelişki de olabilir. Dolayısıyla, G[1] ^ G[2] ^ … ^ G[n] → G şeklindeki bir formülün bu kurallar kullanılarak totoloji biçimine indirgenmesi demek, bu formülün aslında özdeş olarak totoloji olması demektir ki, bu da G formülünün G[1],G[2],…G[n] formülerinin mantıksal sonucu olması demek olacaktır.
3.1.7.5 Önerme Mantığında Sonuç Çıkarma G, H ve J herhangi üç formül olsun. Totoloji atom ⊕ simgesi ile, çelişki atom ise Ø simgesi ile gösterilmek üzere, formül indirgeme kuralları aşağıdaki gibi verilir:
(1)
G ↔ H = (G → H) ^ (H → G)
(2)
G→H=¬GνH
(3a)
GνG=G
(3b)
G^G=G
(4a)
G ν H = H νG
(4b)
G ^ H = H ^G
(5a)
(G ν H) ν J = G ν(H ν J)
(5b)
(G ^ H) ^ J = G ^ (H ^ J)
(6a)
G ν (H ^ J) = (G ν H) ^ (G ν J)
(6b)
G ^ (H ν J) = (G ^ H) ν (G ^ J)
(7a)
GνØ=G
(7b)
G^⊕=G
(8a)
Gν⊕=⊕
(8b)
G^Ø=Ø
(9a)
G ν¬ G = ⊕
(9b)
G ^¬ G = Ø
(10)
¬ (¬ G) = G
(11a)
¬ (G ν H) = ¬ G ^ ν H
(11b)
¬(G ^ H) = ¬ G ν ¬ H
3.1.7.6 Önerme Mantığında Sonuç Çıkarma Bir G formülünün, G[1],G[2],…G[n] formüllerinin mantıksal sonucu olması ile, G[1]^G[2] ^ … ^ G[n] → G
formülünün totoloji olmasının aynı anlama geldiğini biliyoruz. Daha önce ele aldığımız örnekte bu formülün geçerliliğini, doğruluk tablosu yöntemini kullanarak göstermiştik. Şimdi, aynı örneği, yani ((p → q)^(q → r) ^ p) → r formülünün geçerli bir formül olduğunu, indirgeme kurallarını kullanarak yapalım.
3.1.7.7 Önerme Mantığında Sonuç Çıkarma
Görüldüğü gibi, indirgeme işlemi sonucunda doğruluk tablosunda olduğu gibi totoloji elde edilmiştir. Bunun anlamı, ((p → q) ^ (q → r) ^ p) → r ifadesinin geçerli olması, dolayısıyla r önermesinin (p → q), (q → r) ve p formüllerinin sonucu olduğudur.
3.1.7.8 Önerme Mantığında Sonuç Çıkarma Bir G formülünün G[1],G[2],…G[n] formüllerinin mantıksal sonucu olduğunu göstermek için alternatif yöntemlerden birisi de, karşıtlık kuralının kullanılmasıdır. Karşıtlık kuralına göre, bir G formülünün değeri T ise, bunun değili ¬G’nin değeri F olmalıdır. Yani, G[1] ^ G[2] ^ … ^ G[n] → G formülünün totoloji olması ile, bunun değili olan, ¬ (G[1] ^ G[2] ^ … ^ G[n] → G) formülünün çelişki olması aynı anlama gelmektedir. Bu formüle indirgeme kurallarını uygularsak,
¬ (G[1] ^ G[2] ^ … ^ G[n] → G) = ¬ (¬ (G[1] ^ G[2] ^ … ^ G[n]) ν G) = ¬ (¬ G[1] ν ¬ G[2] ν … ν ¬ G[n] ν G) = G[1] ^ G[2] ^ … ^ G[n] ^ ¬ G elde edilir. Yani G formülünün G[1],G[2],…G[n] formüllerinin mantıksal sonucu olduğunu göstermek için,
G[1] ^ G[2] ^ … ^ G[n] ^ ¬ G formülünün çelişki olduğunun gösterilmesi de yeterli olacaktır.
3.1.7.9 Önerme Mantığında Sonuç Çıkarma Şimdi, indirgeme kurallarını kullanarak, ((p → q) ^ (q → r) ^ p) → r formülünün geçerli bir formül olduğunu göstermek yerine, bunun değili olan, (p → q) ^ (q → r) ^ p ^ ¬ r formülünün çelişki olduğunu gösterelim.
3.1.7.10 Önerme Mantığında Sonuç Çıkarma
Görüldüğü gibi, indirgeme işlemi sonucunda çelişki elde edilmiştir. Bunun anlamı, (p → q) ^ (q → r) ^ p ^ ¬ r ifadesinin çelişki olması, dolayısıyla bunun değili olan ((p → q) ^ (q → r) ^ p) → r ifadesinin geçerli olmasıdır. O halde r önermesi(p → q),(q → r) ve p formüllerinin mantıksal sonucudur.
3.2 YÜKLEM MANTIĞI Yüklem mantığını, önerme mantığının daha gelişmiş bir biçimi olarak tanımlayabiliriz. Bu mantıkta, önerme mantığına ek olarak bazı kavramlar türetilmiştir. Doğrudan programlama diline dönüştürülebilmesi oldukça kolay olduğundan, yapay zekanın teorik temellerinde geniş bir uygulama alanı olan yüklem mantığı, ilgili literatürde “birinci düzey mantık” olarak da adlandırılmaktadır. Kendine özgü bir dili ve sistematiği olan yüklem mantığında, önerme mantığına ek olarak değişken, sabit ve fonksiyonlardan oluşan terimler, yüklemler ve niceleyici sembolleri bulunur.
3.2.1 Değişkenler, Sabitler ve Fonksiyonlar Yüklem mantığının temelini oluşturan yüklemler, aynı zamanda bu mantığın en küçük yapıtaşları, yani atomlarıdır. Örneğin, “7, 3’den büyüktür” diyebilmek için, öncelikle bu eylemin, yani “x, y’den büyüktür” ifadesinin yükleminin oluşturulması gereklidir. Bunu yüklem mantığında, büyüktür(x,y) şeklinde yaparız. Buna göre, “7, 3’den büyüktür” ifadesini büyüktür(7,3) olarak yazabiliriz. Fonksiyonlar ise, yüklemler gibi bir yargı bildirmezler, işlevsel olarak kullanılırlar. Örneğin, “x+y” işlevini toplam(x,y) fonksiyonu ile gösterebiliriz. Bu iki örneği birleştirirsek, büyüktür(toplam(3,2),2) yükleminin anlamı, “3 ve 2’nin toplamı, 2’den büyüktür” olacaktır.
3.2.1.1 Değişkenler, Sabitler ve Fonksiyonlar Aynı örnek üzerinde, değişken ve sabit kavramlarını öğrenelim:büyüktür(toplam(x,2),x) yükleminin anlamı, “x ve 2’nin toplamı, x’den büyüktür”
olacaktır. Gerçektende, herhangi bir x sayısının 2 ile toplamı her zaman kendisinden büyük olacaktır. Burada x, değişken sembolüdür. Değişkenler genellikle x,y,z harfleri ile gösterilirler. 2 ise sabittir. Sabitlerin mutlaka sayısal olmaları gerekmez, farklı türlerde de olabilirler. Örneğin, baba(x) fonksiyonu, x’,in babasını göstersin. Bu durumda, sever(Ali,baba(Ali)) yüklemi, Ali’nin babasını sevdiğini ifade etmektedir. Burada Ali, sabittir.
3.2.2 Terimler ve Atomlar Yüklem mantığında terim, aşağıdaki gibi tanımlanır: 1. Her sabit, bir terimdir. 2. Her değişken, bir terimdir. 3. f, n-bileşenli bir fonksiyon sembolü, t[1], t[2], …, t[n]’ler terimler ise, f(t[1], t[2], …, t[n])’de bir terimdir. 4. Bütün terimler, yukarıdaki kurallar kullanılarak oluşturulabilirler. Örnek: Aşağıdakiler, yüklem mantığının birer terimidirler: 2, x, f(x,y,z), g(2,h(x,y)), böl(x,2). Atomu ise şu şekilde tanımlayabiliriz: P, n-bileşenli bir yüklem sembolü ve t[1], t[2], …, t[n]’ler terimler olsunlar. Bu durumda P(t[1], t[2], …, t[n]) bir atomdur. Örnek: Aşağıdakiler, yüklem mantığında birer atomdurlar: sever(x,y), p(f(x,y),z,t), q(h(1),3,x).
3.2.3 Niceleyiciler Yüklem mantığına özgü bir kavram olan niceleyiciler, değişkenlerin geçerliliklerinin belirlenmesi için kullanılırlar ve iki türdürler. Evrensel Niceleyici ve Varlık Niceleyicisi adını alan bu niceleyiciler, sırasıyla ∀ ve ∃ simgeleriyle gösterilirler. Bunların işlevi, kendilerinden sonra gelen değişkenin, formül içersindeki niceliğini belirlemektir. Evrensel niceleyici, kendisinden sonra gelen değişkenin “her değeri için” formülün doğru olduğunu söylerken, varlık niceleyicisi, kendisinden sonra gelen değişkenin “bazı değerleri için” ya da diğer bir deyişle, “en az bir değeri için” doğru olduğunu söyler.
3.2.3.1 Niceleyiciler Örneğin, ∀ x(büyüktür(x+1,x)) formülü, “Her x için, x+1, x’den daha büyüktür” şeklinde ifade edilebilir. Ancak burada, erensel küme gibi yeni bir kavramdan bahsedilmesi gerekmektedir. Şöyle ki, her x için dediğimiz zaman, hangi türdeki x değerlerini kastettiğimiz açık olmalıdır. Dolayısıyla bunu şu şekilde değiştirebiliriz: “Her x gerçel sayısı için, x+1, x’den daha büyüktür” Diğer örneğe geçmeden önce, sayı kümeleri hakkında kısa bir önbilgi verilmesinde fayda vardır.
3.2.3.2 Niceleyiciler İnsanlar tarafından kullanılan ilk sayı kümesi olan “Sayma Sayıları”, 1 den başlayan pozitif tamsayılardır. Bu kümeye 0 (sıfır) sayısının eklenmesi ile N ile gösterilen “Doğal Sayılar” kümesi elde edilir. N={0,1,2,3,4, … ∞ } Negatif sayı kavramının geliştirilmesi ve bu sayıların da doğal sayılara katılması ile, daha geniş olan “Tamsayılar” kümesi elde edilmiştir. Z harfi ile gösterilen bu küme, her iki taraftan da sonsuz büyüklükte olacaktır. Z={-∞ … -4,-3,-2,-1,0,1,2,3,4, … ∞ } Sıfırın solunda yer alan sayılar “negatif tamsayılar”, sağındakiler ise “pozitif tamsayılar” olarak adlandırılırlar. Tamsayılarla ilgili çeşitli sınıflandırmalar bulunmaktadır. Bunlardan en önemlileri, tek ve çift tamsayılar ile asal sayılardır. 2 ile tam bölünebilen tamsayılara çift tamsayı denir. Çift olmayan tamsayılar, tek tamsayılardır. Örneğin 2,4,6 çift, 3,5,7 ise tek tamsayılardır. 1 dışında sadece kendisine tam bölünebilen tamsayılar ise asal sayılar adını alır. Diğer bütün tamsayılar, asal tamsayıların bir çarpımı olarak yazılabilirler. Örneğin 2,3,5,7,11,13,17 asal tamsayılardır.
3.2.3.3 Niceleyiciler a ve b iki tamsayı olmak üzere, a/b şeklinde yazılan sayılar “rasyonel sayılar” ya da “kesirli sayılar” olarak adlandırılır. Örneğin 1/2, 4/7, 11/5 gibi. Bu sayılardan, kesir çizgisinin üzerinde yer alana “pay”, altında yer alana “payda” adı verilir. Her tamsayı, paydası 1 olan bir rasyonel sayı olarak ifade edilebilir. Örneğin 3=3/1, -4=4/1 olarak yazabiliriz. Dolayısıyla, Q harfi ile gösterilen “Rasyonel Sayılar” kümesi, tamsayılar kümesini de içine alan daha geniş bir küme olacaktır.
3.2.3.4 Niceleyiciler
Bu noktada, insanoğlunu uzun bir süre meşgul etmiş sorulardan birisi ile karşılaşırız. Aşağıdaki şekilde de görüldüğü gibi, sayı doğrusu adı verilen yatay doğru üzerine bütün tamsayıları ve onların kesirli biçimleri olan rasyonel sayıları işaretlediğimizde, bu doğru üzerinde herhangi bir boşluk kalır mı?
Eski Yunanlılar tarafından kanıtlanmış bir teorem, bu şekilde yazılamayan sayıların varlığı konusunda önemli bir ipucu vermektedir. Bu teoreme göre, √2 sayısı a/b şeklinde yazılamaz. Yani bu sayı rasyonel değildir. Gerçekten de bu sayıyı hesapladığınız takdirde, virgülün sağında yer alan kısmın, sonsuza kadar rastgele bir düzende giden sayılardan oluştuğunu gözlemleriz:
√2=1.41421356237309504880168872420969807856967187537 …
3.2.3.5 Niceleyiciler Her ne kadar varlıkları kanıtlansa da, sayı doğrusu üzerinde yerlerinin tam olarak belirlenememesi nedeniyle “rasyonel olmayan” bu sayılara uzunca bir süre şüpheyle yaklaşılmıştır. Bu sayıların en meşhurlarından olan √2 sayısının yerinin sayı doğrusu üzerinde tam olarak belirlenmesi, M.Ö. 500’lü yıllarda yaşamış olan matematikçi ve filozof Pisagor tarafından kanıtlanmış ünlü Pisagor Teoremi’nden sonra gerçekleştirilebilmiştir. Bu teoreme göre, herhangi bir dik üçgenin kenarları aşağıdaki bağıntıyı sağlamak zorundadır:
Pisagor teoremi
3.2.3.7 Niceleyiciler Böylece, “irrasyonel sayılar” olarak adlandırılan bu sayıların da rasyonel sayılara eklenmesi ile, en geniş sayı kümesi olan ve R ile gösterilen “Gerçel Sayılar” kümesi elde edilmiş olur. Aşağıdaki resimde, sayı kümelerinin birbirleri ile kapsama ilişkisi görülmektedir:
3.2.3.8 Niceleyiciler Şimdi, niceleyiciler ile ilgili olarak aşağıdaki detaylı örneği inceleyelim: Aşağıdaki ifadeleri yüklem mantığında sembolize ediniz: (a) Her doğal sayı, aynı zamanda bir tamsayıdır. (b) Her rasyonel sayı, aynı zamanda bir gerçel sayıdır. (c) Asal olan en az bir tamsayı vardır. (d) Her sayıdan daha büyük olan en az bir sayı vardır. (e) Bir sayı irrasyonel ise, rasyonel değildir. (f) Bir tamsayı tek ise, 2 ile tam bölünemez ve çift değildir. (g) Bir tamsayı çift ise, tek ya da asal değildir. (h) Bir a tamsayısı bir b tamsayısına tam bölünemez ise a/b bir rasyonel sayıdır.
3.2.3.9 Niceleyiciler Öncelikle, kullanılacak yüklem ve fonksiyon sembollerini belirleyelim:
Yüklemler: doğalsayı(x)
: “x bir doğal sayıdır”
tamsayı(x)
: “x bir tamsayıdır”
rasyonelsayı(x)
: “x bir rasyonel sayıdır”
irrasyonelsayı(x)
: “x bir irrasyonel sayıdır”
gerçelsayı(x)
: “x bir gerçel sayıdır”
teksayı(x)
: “x bir tek tamsayıdır sayıdır”
çiftsayı(x)
: “x bir çift tamsayıdır sayıdır”
asalsayı(x)
: “x bir asal tamsayıdır sayıdır”
büyüktür(x,y)
: “x>y”
bölünür(x,y)
: “x, y ile tam bölünür”
Fonksiyonlar: böl(x,y) : x/y
3.2.3.10 Niceleyiciler Bu durumda, verilen ifadelerin yüklem mantığındaki biçimleri aşağıdaki gibi olacaktır: Her doğal sayı, aynı zamanda bir tamsayıdır. (∀x)(doğalsayı(x) → tamsayı(x)) Her rasyonel sayı, aynı zamanda bir gerçel sayıdır (∀x)(rasyonelsayı(x) → gerçelsayı(x)) Asal olan en az bir tamsayı vardır. (∃ x)asalsayı(x) Her sayıdan daha büyük olan en az bir sayı vardır. (∀ x)(∃ y)büyüktür(x,y) Bir sayı irrasyonel ise, rasyonel değildir. (∀ x)(irrasyonelsayı(x)
→ ¬ rasyonelsayı(x))
Bir tamsayı tek ise, 2 ile tam bölünemez ve çift değildir. (∀ x)(teksayı(x)
→ (¬ bölünür(x,2) ^ ¬ çiftsayı(x)))
Bir tamsayı çift ise, tek ya da asal değildir. (∀ x)(çiftsayı(x) → (¬ teksayi(x) ν ¬ asalsayı(x))) Bir a tamsayısı bir b tamsayısına tam bölünemez ise a/b bir rasyonel sayıdır. (∀ a)(∀ b)(¬ bölünür(a,b) → (rasyonelsayi(böl(a,b)))
3.2.4 Bağımlı ve Bağımsız Değişkenler Bir niceleyicinin kapsamı, o niceleyicinin etki alanı olarak tanımlanır. Örneğin; (∀ x)(∃ y)(p(x,y) → q(x)) formülünde yer alan evrensel ve varlık niceleyicilerinin kapsamları, p(x,y) → q(x) olarak belirlenmiştir. Niceleyiciler genellikle formüllerin başında yer alır ve kapsamları formülün bütünü üzerinde olur.
Eğer bir formül içersinde yer alan bir değişken, o değişken için tanımlı bir niceleyicinin kapsamı içersinde yer alıyor ise “bağımlı değişken” adını alır. Bir değişken bağımlı değil ise, “bağımsız değişken” adını alır.
3.2.5 Formüller Yüklem mantığında formüller, önerme mantığında olduğu gibi tanımlanır: (1) Her atom, bir formüldür. (2) Eğer G bir formül ise, ¬ G de bir formül olur. (3) Eğer G ve H formül ise, G ^ H, G ν H, G → H ve G ↔ H de formül olur. (4) Eğer G bir formül ve x, G içinde bağımsız bir değişken ise, (∀ x)G ve (∃ x)G de birer formül olur. Bütün formüller yukarıdaki kurallar uygulanarak elde edilirler.
3.2.5.1 Formüller Örneğin, “Bütün insanlar ölümlüdür. Konfiçyüs bir insandır. O halde Konfiçyüs ölümlüdür.” ifadesini bir yüklem mantığı formülüne dönüştürelim: “x bir insandır” ifadesini insan(x) yüklemi ile, “x ölümlüdür” ifadesini ölümlü(x) yüklemi ile gösterirsek, “Bütün insanlar ölümlüdür” ifadesini, (∀ x)(insan(x) → ölümlü(x)) formülü ile gösterebiliriz. Bu durumda verilen ifadenin yüklem mantığındaki formül karşılığı, (∀ x)((insan(x) → ölümlü(x)) ^ insan(Konfiçyüs)) → ölümlü(Konfiçyüs)) şeklinde olacaktır.
3.2.6 Formüllerin Yorumlanması Yüklem mantığında bir formülün yorumlanabilmesi için, öncelikle formülü oluşturan yüklem, fonksiyon ve sabitlerin değerlerini alacakları bir “değer kümesi” nin belirlenmesi gereklidir. D ile gösterilen bu kümeden, formüldeki yüklem, fonksiyon ve sabitlere aşağıdaki kurallar kullanılarak değer ataması yapılır: 1. Her sabite D içinden bir değer atanır.
2. Her n-bileşenli fonksiyon sembolü için,
şeklinde bir dönüşüm atanır.
3. Her n-bileşenli yüklem sembolü için,
şeklinde bir dönüşüm atanır.
Bu durumda formülde yer alan (∀ x) ve (∃ x) niceleyicilerinin anlamı sırasıyla “D kümesindeki her x elemanı için” ve “D kümesindeki en az bir x elemanı için” şeklinde olacaktır.
3.2.6.1 Formüllerin Yorumlanması D kümesinden atanan değerlere göre, her formül için T ya da F değeri ile sonuçlanacak bir yorumlama aşağıdaki kurallar kullanılarak yapılabilir: (1) G ve H formüllerinin doğruluk değerleri biliniyor ise, → G, G ^ H, G ν H, G → H ve G ↔ H formüllerinin doğruluk değerleri de, önerme mantığında verilen temel formüllerin doğruluk değerleri kullanılarak hesaplanabilir. (2) Eğer G formülünün doğruluk değeri, D kümesindeki her eleman için T ise (∀ x)G formülü T değerini alır; aksi halde, yani D kümesindeki en az bir eleman için G formülünün doğruluk değeri F oluyorsa (∀ x)G formülünün doğruluk değeri F dir. (3) Eğer G formülünün doğruluk değeri, D kümesindeki en az bir eleman için T ise (∃ x)G formülü T değerini alır; aksi halde, yani D kümesindeki her eleman için G formülünün doğruluk değeri F oluyorsa (∃ x)G formülünün doğruluk değeri F dir.
3.2.6.2 Formüllerin Yorumlanması Örnek 3.1 (∀ x)(∃ y)p(x,y) formülünü göz önüne alalım. Bu formül için, D={1,2} kümesi üzerinden yapılan atamalar aşağıdaki gibi olsun:
p(1,1) T
p(1,2) F
p(2,1) F
p(2,2) T
Formülün T değerini alması için, D kümesindeki her x değeri için, p(x,y) atomunun doğru değerini alacağı en az bir y değerinin bulunması gereklidir. x=1 olsun. Tablodan görüldüğü gibi p(1,y)’nin T değerini aldığı bir y değeri vardır: y=1. x=2 olsun. Tablodan görüldüğü gibi p(1,y)’nin T değerini aldığı bir y değeri vardır: y=2. Bu durumda, D kümesindeki her x değeri için p(x,y) yükleminin T değerini alacağı en az bir y değeri bulunduğundan, (∀ x)( ∃ y)p(x,y) formülü D kümesine göre yapılan yorumlamada T değerini alır.
3.2.6.3 Formüllerin Yorumlanması Örnek 3.2 (∀ x)(p(x) → q(f(x),a))
formülünü göz önüne alalım. Bu formülde;
a : bir sabit, f : bir tek-bileşenli fonksiyon sembolü, p : bir tek-bileşenli yüklem sembolü, q : bir iki-bileşenli yüklem sembolüdür. Değer kümemiz yine D={1,2} olsun. Bu küme üzerinden yukarıdaki atomlara yapılan atamalar aşağıdaki gibi verelim:
a 1 q(1,1) T
f(1) 2
f(2) 1
q(1,2) T
q(2,1) F
p(1) F
p(2) T
q(2,2) T
3.2.6.4 Formüllerin Yorumlanması Şimdi, niceleyicimiz (∀ x) olduğundan, D={1,2} kümesindeki her bir eleman için verilen formülü yorumlayalım: x=1 için; p(x) → q(f(x),a) = p(1) → q(f(1),1) = p(1) → q(2,1) =F→F =T
x=2 için
p(x) → q(f(x),a) = p(2) → q(f(2),1) = p(2) → q(1,1) =T→T =T
3.2.6.5 Formüllerin Yorumlanması Alıştırma 3.1 Aşağıdaki formülleri, Örnek-2’ de verilen değer kümesi ve değer atamalarını kullanarak yorumlayınız:
(a) (∀ x)(p(f(x)) ^ q(x,f(a))) (b) (∃ x)(p(x) ^ q(x,a)) (c) (∀ x)(∃ y)(p(x) ^ q(x,y)) (d) (∀ x)(∃ y)(p(f(x)) → q(a,f(y)))
3.2.6.6 Formüllerin Yorumlanması Şimdi, daha geniş sayı kümelerindeki durumu görmek açısından, daha önce verdiğimiz sayı kümeleri ile ilgili örnekteki bir formül için değer kümesini belirleyelim ve buna göre bu formün doğruluk değerini araştıralım: (∀ x)(doğalsayı(x) → tamsayı(x)) formülü için değer kümesi olarak, bu formülü kapsayan en geniş sayı kümesi olan tamsayıları seçelim. Yani D=Z olsun. doğalsayı(x) atomunun doğru değerini aldığı x’ler, 0 dan başlayan pozitif tamsayılar olacaktır. Yani, doğalsayı(0), doğalsayı(1), doğalsayı(2), … atomlarının tümü T değerine sahiptir. Bunların dışındakiler ise F değerine sahip olacaktır. Diğer yandan, tamsayı(x) atomu bütün D üzerinde T değerine sahiptir. O halde verilen formül için geçerlidir diyebiliriz. Çünkü bir gerektirmenin yanlış değer aldığı bir tek durum vardır; o da T → F durumudur. Birinci atomun, yani doğalsayı(x) yükleminin T değerini aldığı x sayıları için, ikinci atomun, yani tamsayı(x) yükleminin F değerini alması olasılığı söz konusu değildir. Çünkü bir sayı doğal sayı ise, aynı zamanda tamsayı da olacaktır.
3.2.6.7 Formüllerin Yorumlanması Daha önce önerme mantığı için yapılan geçerlilik ve tutarlılık tanımları benzer olarak yüklem mantığı için de aşağıdaki gibi yapılabilir: Bir G formülünün T değerini aldığı bir I yorumlaması var ise G formülüne tutarlıdır denir. Eğer G formülünün T değerini aldığı hiçbir I yorumlaması yoksa G formülüne tutarsızdır (çelişki) denir. Bir G formülü, bütün yorumlamalarda T değerini alıyorsa geçerlidir (totoloji) denir. En az bir yorumlamada F değerini alan formül ise geçersiz olacaktır.
Önerme mantığında olduğu gibi, yüklem mantığında da tutarlılık ve geçersizlik tanımları çakışmaktadır. Yani bir G formülü bazı yorumlamalarda T, bazılarında F değerini alıyorsa tutarlı, ancak geçersiz olacaktır.
3.2.6.8 Formüllerin Yorumlanması Örnek 3.3 (∀ x)p(x) ^ (∃ y) ¬ p(y) formülünün tutarsız, yani çelişki olduğunu gösterelim. Değer kümemiz D olsun. Öncelikle, formülün birinci kısmının, yani (∀ x)p(x) bölümünün doğru olduğunu varsayalım. Bu durumda, D kümesindeki her bir x değeri için, p(x) yüklemi T değerini alacaktır. Formülün ikinci kısmı olan (∃ y) ¬ p(y) bölümüne bakalım. Bu formül, D kümesindeki en az bir y değeri için p(y)’nin değilinin doğru olduğunu, dolayısıyla da p(y)’nin yanlış olduğunu söylemektedir ki, bu da birinci bölümün doğru olması ile çelişir. Yani eğer birinci bölüm T ise, ikinci bölüm F olur ki bu da formülün F değerini almasına sebep olur. (iki bölümün ‘ve’ ile bağlı olduğuna dikkat ediniz) Şimdi, formülün ikinci kısmının, yani (∃ y) ¬ p(y) bölümünün doğru olduğunu varsayalım. Bu durumda, D kümesindeki en az bir y değeri için, ¬ p(y) doğru, dolayısıyla p(y) yanlış olacaktır. Ancak bu durumda, D kümesindeki her x değeri için p(x) yükleminin doğru olduğunu söyleyen birinci bölüm F değerini alır, bu da formülün bütünün F değerini almasını sağlayacaktır. Sonuç olarak bu formül, hiçbir D kümesi için herhangi bir yorumlamada T değerini alamaz, dolayısıyla tutarsızdır.
3.2.6.9 Formüllerin Yorumlanması Alıştırma 3.2 Aşağıdakileri, Örnek 3.3’de olduğu gibi siz gösteriniz: (i)
(∀ x)p(x) → (∃ y)p(y)
Formülleri geçerlidir.
(ii) p(a) → ¬ (((∃ x)p(x))
Formülleri geçerlidir.
(iii) (∀ x)p(x) ν ((∃ y) ¬ p(y))
Formülleri geçerlidir.
3.2.7 Mantıksal Sonuçlar Mantıksal sonuç tanımı, yüklem mantığında da önerme mantığına benzer olarak aşağıdaki gibi yapılabilir: G[1], G[2], … ,G[N] formüllerini göz önüne alalım. Yüklem mantığında bir H formülünün bu formüllerin mantıksal sonucu olması demek,
G[1] ^ G[2] ^ … ^ G[N] ifadesinin doğru olduğu bütün yorumlamalarda H formülünün de doğru olması demektir.
3.2.7.1 Mantıksal Sonuçlar Örnek 3.4
G[1] : (∀ x)(p(x) → q(x)) G[2] : p(a) formüllerini göz önüne alalım. q(a)’nın bu formüllerin mantıksal sonucu olduğunu gösterelim. G[1] ^ G[2] = (∀ x)(p(x) → q(x)) ^ p(a) formülünün T değerini aldığı bir I yorumlamasını göz önüne alalım. Bu yorumlamada q(a)’nın da T değerini aldığını gösterebilirsek, istediğimiz olacaktır. (∀ x)(p(x) → q(x)) ^ p(a) formülünün değeri T ise, ‘ve’ bağlacı ile bağlı olduklarından, her iki formülün doğru olması gerekir. Dolayısıyla p(a)’nın değeri de T olacaktır. Şimdi q(a)’nın yanlış olduğunu varsayalım. Bu durumda, ¬ p(a)vq(a) formülü, hem ¬ p(a) hem de q(a) yanlış olduğundan, F değerini alacaktır.¬ p(a) ν q(a) = p(a) → q(a) olduğundan, p(a) → q(a) formülü de yanlış olacaktır ki, bu da (∀ x)(p(x) → q(x)) formülünün doğru olması ile çelişir. Dolayısıyla varsayımımız yanlış, yani q(a) doğrudur. Bu da q(a)’nın G[1] ve G[2] formüllerinin mantıksal sonucu olduğunun kanıtı olacaktır. Bu kanıtı herhangi bir I yorumlaması için yaptığımızdan, her yorumlama için geçerli olacaktır.
3.2.8 Formüllerin Standart Biçime Dönüştürülmesi Yüklem mantığında sonuç çıkarma teknikleri, yapay zeka problemlerinin çözümünde önemli bir kullanım alanına sahiptir. Bundan önceki kesimde verilen örnek, mantıksal sonucu elde etmekten çok, mevcut bir formülün, diğer formüllerin mantıksal sonucu olduğunu göstermektedir. Yani sonuç, önceden bilinmelidir. Bir sonraki kesimde, yüklem mantığında kullanılan en önemli sonuç çıkarma tekniği olan çözümleme ilkesi anlatılacaktır. Ancak bunun için, öncelikle formüllerin standart biçime dönüştürülmesi gerekir. Standart biçime dönüştürme kuralları, daha önce önerme mantığında verilen formül indirgeme kurallarını büyük ölçide kapsamaktadır. Bu kurallara ek olarak, yüklem mantığına özgü bir kavram olarak niceleyiciler için yeni kurallara gereksinim vardır. Standart biçime dönüştürme işlemini iki aşamada gerçekleştireceğiz. Bunlardan ilki, “Prenex Kuralları” olarak bilinen kuralların uygulanması ile formülün, niceleyicilerin formülün önünde toplandığı, “ve” bağlaçlarının öncelikli olduğu biçime getirilmesi aşamasıdır. Bu biçime, “Prenex normal formu” adı verilir.
İkinci aşamada ise, “Skolem Kuralları” olarak bilinen kurallar ile, formülün varlık niceleyicilerinden arındırılması sağlanır. Bu biçime ise, “Skolem standart formu” denir.
3.2.8.1 Formüllerin Standart Biçime Dönüştürülmesi Prenex Normal Formu Qi (i=1,2,…,n), ∃ ya da ∀ niceleyicilerinden birisi ve H1, H2, …, Hk niceleyicileri ve (→ , ↔) bağlaçlarını içermeyen formüller olmak üzere, G=(Q1X1)(Q2X2)…(QnXn)(H1 ^ H2 ^ … ^ Hk) biçimindeki G formülüne “Prenex normal formundadır” denir. Bu formülde, (Q1)(Q2)…(Qn) bölümüne formülün “önceli”, (H1 ^ H2 ^ … ^ Hk) bölümüne ise formülün “gövdesi” adı verilir.
3.2.8.2 Formüllerin Standart Biçime Dönüştürülmesi Prenex Kuralları A. Niceleyiciden-Bağımsız Kurallar (A1)
G ↔ H = (G → H) ^ (H → G)
(A2)
G→H=¬GνH
(A3)
GνG=G
(A4)
G^G=G
(A5)
GνH=HνG
(A6)
G^H=H^G
(A7)
(G ν H) ν J = G ν (H ν J)
(A8)
(G ^ H) ^ J = G ^ (H ^ J)
(A9)
G ν (H ^ J) = (G ν H) ^ (G ν J)
(A10) G ^ (H ν J) = (G ^ H) ν (G ^ J) (A11) ¬ (¬ G) = G (A12) ¬ (G ν H) = ¬ G ^ ¬ H (A13) ¬(G ν H) = ¬ G ν ¬ H
3.2.8.3 Formüllerin Standart Biçime Dönüştürülmesi Prenex Kuralları B. Niceleyici-Bağımlı Kurallar
(B1)
¬ ((∀ x)G[x])=(∃ x)(¬ G[x])
(B2)
¬ ((∃ x)G[x])=(∀x)(¬ G[x])
(B3)
(∀ x)(G[x] ^ H[x])=(∀ x)(G[x]) ^ (∀ x)(H[x])
(B4)
(∃ x)(G[x] ^ H[x])=(∃ x)(G[x]) ^ (∃ x)(H[x])
(B5)
(∀ x)(G[x] ν H[x])=(∀ x)(G[x]) ν (∀ x)(H[x])
(B6)
(∃ x)(G[x] ν H[x])=(∀ x)(G[x]) ν (∀ x)(H[x])
(B7)
(∃ x)(∃ y)(G[x,y])=(∃ y)(∃ x)(G[x,y])
(B8)
(∀ x)(G[a] ν H[x])=G[a] ν (∀ x)(H[x])
(B9)
(∀ x)(G[a] ^ H[x])=G[a] ^ (∀ x)(H[x])
(B10) (∀ x)(G[a] ν H[x])=G[a] ν (∃ x)(H[x]) (B11) (∃ x)(G[a] ν H[x])=G[a] ^ (∃ x)(H[x])
3.2.8.4 Formüllerin Standart Biçime Dönüştürülmesi Örnek 3.5 (∀ x)(∃ y)(∀ z)((¬ p(x,y) → q(y)) ^ r(x,y,z)) formülünde, bütün niceleyiciler başta toplanmıştır. Ancak gövde bölümü ‘ve’ öncelikli biçimde değildir. Prenex kurallarını kullanarak formülü Prenex normal formuna dönüştürelim: (∀ x)(∃ y)(∀ z)((¬ p(x,y) → q(y)) ^ r(x,y,z)) = (∀ x)(∃ y)(∀ z)((p(x,y) ν q(y)) ^ r(x,y,z)) Bulunan formül, Prenex normal formundadır: (∀ x)(∃ y)(∀ z)((p(x,y) ν q(y)) ^ r(x,y,z))
3.2.8.5 Formüllerin Standart Biçime Dönüştürülmesi Örnek 3.6 (∀ x)p(x) → (∃ x)q(x) formülünü Prenex normal formuna dönüştürelim: (∀ x)p(x) → (∃ x)q(x)
= ¬ (∀ x)p(x) ν (∀ x)q(x) =(∃ x) ¬ p(x) ν (∃ x)q(x) =(∃ x)(¬ p(x) ν q(x)) =(∃ x)(p(x) ^ ¬ q(x)) Bulunan formül, Prenex normal formundadır: (∃ x)(p(x) ^ ¬ q(x))
3.2.8.6 Formüllerin Standart Biçime Dönüştürülmesi Örnek 3.7 (∀ x)(∀ y)((∃ z)p(x,y,z) ^ ((∀ v) ¬ q(x,v) ν (∃ v)q(y,v))) formülünü Prenex normal formuna dönüştürelim: (∀ x)(∀ y)((∃ z)p(x,y,z) ^ ((∀ v) ¬ q(x,v) ν (∃ v)q(y,v))) =(∀ x)(∀ y)((∃ z)p(x,y,z) ^ ((∀ v)(∃ w)(¬ q(x,v) ν q(y,w)))) =(∀ x)(∀ y)(∃ z)(∀ v)(∃ w)(p(x,y,z) ^ (¬ q(x,v) ν q(y,w))) Bulunan formül, Prenex normal formundadır: (∀ x)(∀ y)(∃ z)(∀ v)(∃ w)(p(x,y,z) ^ (¬ q(x,v) ν q(y,w)))
3.2.8.7 Formüllerin Standart Biçime Dönüştürülmesi Skolem Standart Formu Prenex normal formundaki bir formülde, bütün niceleyicilerin evrensel niceleyici (∀) olduğu biçime “Skolem standart formu” denir. Örneğin,
(∀ x)(∀ y)(∀ z)(p(x,y,z) ^ (q(x,y) ν r(x))) formülü, Skolem standart formundadır. Prenex normal formundaki bir ifadede yer alan varlık niceleyicileri (∃ ), Skolem kuralları kullanılarak elimine edilirler.
3.2.8.8 Formüllerin Standart Biçime Dönüştürülmesi Skolem Kuralları
G=(Q1X1)(Q2X2)…(QnXn)(H1 ^ H2 ^ … ^ Hk) (1) 1 ≤ r ≤ n olmak üzere (QrXr), formülün öncelinde yer alan bir varlık niceleyicisi olsun ve (QrXr)’den önce (bu niceleyicinin solunda) hiçbir evrensel niceleyici bulunmasın. Bu
durumda G formülünün gövdesinde yer alan bütün Xr değişkenleri herhangi bir sabit sembolü ile değiştirilir ve (QrXr) niceleyicisi öncelden silinir. (2) 1 ≤ r ≤ n olmak üzere (QrXr), formülün öncelinde yer alan bir varlık niceleyicisi olsun ve (QrXr)’den önce (bu niceleyicinin solunda) (QS1XS1)(QS2XS2)…(QsmXSm) evrensel niceleyicileri bulunsun. Bu durumda G formülünün gövdesinde yer alan bütün Xr değişkenleri herhangi bir f(XS1, XS2,…, XSm) fonksiyon sembolü ile değiştirilir ve (QrXr) niceleyicisi öncelden silinir. Bu fonksiyona “Skolem fonksiyonu” adı verilir.
3.2.8.9 Formüllerin Standart Biçime Dönüştürülmesi Örnek 3.8
(∃ x)(∀ y)(∃ z)(∃ u)(∀ ν )(∃ w)p(x,y,z,u,v,w) formülünü Skolem standart formuna dönüştürelim:
(∃ x)(∀ y)(∀ z)(u)(∀ ν)(∃ w)p(x,y,z,u,v,w) (1)
=(∀ y)(∀ z)(∃ u)(∀ ν )(∃ w)p(a,y,z,u,v,w) (2)
=(∀ y)(∀ z)(∀ ν)(∃ w)p(a,y,z,f(y,z),v,w) (3) =(∀ y)(∀ z)(∀ ν )p(a,y,z,f(y,z),ν,g(y,z,v)) (4) (1) Bu adımda, (∃ x) varlık niceleyicisi elimine edilecektir. Bu niceleyiciden sonra herhangi bir evrensel niceleyici bulunmadığından, bu niceleyicinin nicelediği x değişkeni gövdede a sabiti ile değiştirilir ve (∃ x) varlık niceleyicisi öncelden kaldırılır. (2) Sıradaki niceleyicimiz, (u)’dur. Bu niceleyicinin solunda, (∃ y)(∃ z) niceleyicileri yer aldığından, (∃ u)’nun öncelden kaldırılması için u değişkeninin gövdede y ve z değişkenlerinin bir Skolem fonksiyonu ile, f(y,z) ile değiştirilmesi gerekir. (3) (∃ w) varlık niceleyicisinin kaldırılması için, önceki adımdakine benzer bir işlemle, gövdedeki w değişkeni g(y,z,v) Skolem fonksiyonu ile değiştirilir. Çünkü öncelde (∃ w)’nin solunda, bu değişkenleri niceleyen evrensel niceleyiciler bulunmaktadır. (4) Bu adımda elde edilen formül, verilen formülün Skolem standart formudur.
3.2.8.10 Formüllerin Standart Biçime Dönüştürülmesi Sonuç olarak, yüklem mantığında bir formülün standart biçime dönüştürülmesi için iki aşamadan geçirilmesi gerekir: Prenex Normal Formu ve Skolem Standart Formu. Bir sonraki örneğimizde, verilen formül bu iki aşamadan geçirilerek nihai biçimi olan standart biçime dönüştürülmektedir.
3.2.8.11 Formüllerin Standart Biçime Dönüştürülmesi Örnek 3.9 (∀ x)(∃ y)(¬ p(x,y) ^ q(y)) ν (∀ y)(∃ z)r(x,y,z) formülünü standart biçime dönüştürelim: İlk olarak formülü Prenex normal formuna dönüştürelim: (∀ x)(∃ y)(¬ p(x,y) ^ q(y)) ν (∀ y)(∃ z)r(x,y,z) =(∀ x)(∃ y)(∃ u)(∃ z)(¬ p(x,y) ^ q(y)) ν r(x,u,z)) =(∀ x)(∃ y)(∀ u)(∃ z)((¬ p(x,y) ν r(x,u,z))^(q(y)νr(x,u,z))) Şimdi, bulunan formüle Skolem kurallarını uygulayalım: (∀ x)(∃ y)(∀ u)(∃ z)((¬ p(x,y) ν r(x,u,z))^(q(y) ν r(x,u,z))) =(∀ x)(∀ u)(∃ z)((¬ p(x,f(x)) ν r(x,u,z))^(q(f(x)) ν r(x,u,z))) =(∀ x)(∀u)((¬ p(x,f(x)) ν r(x,u,g(x,u)))^(q(f(x)) ν r(x,u,g(x,u))))
3.2.8.12 Formüllerin Standart Biçime Dönüştürülmesi Örnek 3.9’da verilen formülün standart biçime dönüşüm şeması aşağıda verilmiştir:
3.2.9 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Standart biçime getirilen bir formül, çözümleme ilkesi kullanılarak sonuç çıkarma işlemi için de uygun bir veri haline gelmiştir. Ancak çözümleme işlemi, yantümce (clause) kümesi üzerinde çalışan bir yöntem olduğundan, standart formdaki formülden yantümce kümesinin elde edilmesi gerekir. Yantümce Nedir?
Yantümce, ya Ø ile gösterilen “çelişki” ya da “boş yantümce”dir, ya da yüklemler veya onların değillerinin ‘veya’ (ν) bağlacı ile birleştirilmesinden oluşan ve niceleyici içermeyen formüldür. Örneğin, aşağıdakiler birer yantümcedir: p(x,f(x,y)) p(x,y,z) ν ¬ q(h(x),y) ν r(a,z) p(x,h(a,b)) ν ¬ q(x)
3.2.9.1 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Standart biçime getirilmiş bir formülden yantümce kümesinin elde edilmesi oldukça kolaydır. Bunun için, formülün gövde bölümünde yer alan ‘ve’ bağlacı ile bağlanmış yüklemlerin alınması yeterli olacaktır. Örnek 3.8’de elde ettiğimiz standart biçimdeki formül olan, (∀ y)(∀ z)(∀ v)p(a,y,z,f(y,z),ν,g(y,z,v)) formülünün yantümce kümesi, S={p(a,y,z,f(y,z),ν,g(y,z,v))} şeklindeki bir elemanlı küme olacaktır. Örnek 3.9’da elde ettiğimiz standart biçimdeki formül olan, (∀ x)(∀ u)((¬ p(x,f(x))νr(x,u,g(x,u))) ^ (q(f(x)) ν r(x,u,g(x,u)))) formülünün yantümce kümesi ise, S={¬ p(x,f(x)) ν r(x,u,g(x,u)), q(f(x))νr(x,u,g(x,u))} olarak bulunur.
3.2.9.2 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Anlaşılabilirliğinin kolay olması açısından, çözümleme ilkesini öncelikle önerme mantığı üzerinde deneyelim. İlke temel olarak şu şekilde çalışır: C1 ve C2 iki yantümce olsun. p, C1 yantümcesi içersinde bir yüklem olsun. Eğer ¬p, C2 yantümcesi tarafından içeriliyor ise, C1 ve C2 yantümcelerinden p ve ¬p yüklemleri silinir ve geriye kalan yüklemler ‘veya’ bağlacı ile bağlanarak yeni bir yantümce elde edilir. Elde edilen bu yeni yantümce, C1 ve C2 yantümcelerinin çözümü olacaktır. Elde edilen her yeni yantümce için, çözümleme işlemi aynı şekilde sürdürülür; ta ki yeni bir çözümleme adımı bulunamayana kadar. Nihai sonuç, başta alınan yantümce kümesinin mantıksal sonucu olacaktır.
3.2.9.3 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Basit bir örnekle başlayalım: Q önermesinin, P → Q ve P önermelerinin mantıksal sonucu olduğunu biliyoruz. Şimdi bunu, çözümleme ilkesini kullanarak gösterelim. (1) ¬PνQ (2) P (3) Q (1) ve (2) yantümcelerinden, P ve onun değili olan ¬ P silinir ve sonuç olarak Q yantümcesi elde edilir. Çözümleme bu noktada durur, çünkü Q ile çözümlenecek hiçbir yantümce yoktur. O halde (3), (1) ve (2)’nin mantıksal sonucudur.
3.2.9.4 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Diğer bir örnek: (1) ¬ P ν Q (2) PvR (3) QvR (1) ve (2) yantümcelerinden, P ve onun değili olan ¬ P silinir ve sonuç olarak QvR yantümcesi elde edilir. Çözümleme bu noktada durur, çünkü bu yantümce ile çözümlenecek hiçbir yantümce yoktur. O halde (3), (1) ve (2)’nin mantıksal sonucudur.
3.2.9.5 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Daha karmaşık bir örneği göz önüne alalım. S={PνQ, ¬PνQ, Pν¬Q, ¬Pν¬Q} yantümce kümesinin mantıksal sonucunu, çözümleme ilkesini kullanarak bulalım: (1) (2) (3) (4) (5) (6) (7)
PvQ ¬P ν Q Pν¬Q ¬Pν¬Q Q (1) ve (2)’nin çözümü ¬Q (3) ve (4)’ün çözümü Ø (5) ve (6)’nın çözümü
Dolayısıyla S kümesi tutarsız, yani bir çelişkidir.
3.2.9.6 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması
Çözümleme ilkesi, yüklem mantığında da aynı şekilde çalışır. Ancak yüklem mantığındaki değişken, fonksiyon ve sabit sembollerinin varlığı, bazı yeni tanımların yapılmasını gerektirmektedir. Basit bir örnekle başlayalım. S={p(x) ν q(x),¬ q(x)} yantümce kümesinin mantıksal sonucunu bulalım: (1) p(x) ν q(x) (2) ¬q(x) (3) p(x) olur. Şimdi bu örneği biraz daha zorlaştıralım.
3.2.9.7 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması S={p(x) ν q(f(a)),¬ q(x)} yantümce kümesinin mantıksal sonucunu, çözümleme ilkesini kullanarak bulmaya çalışalım: (1) p(x) ν q(f(a)) (2) ¬ q(x) (3) ? Burada, (1) yantümcesinde yer alan q(f(a)) ile (2) yantümcesinde yer alan ¬ q(x) yükleminin çözümlenebilmesi için, yüklemlerin parametrelerinin aynı olması gerekir. Böyle durumlarda, çözümlenecek yantümceler üzerinde yapılacak bir “dönüşüm” ile iki yantümce “bütünleştirilir.” Burada, (1) ve (2) yantümcelerinde x yerine f(a) yazılarak yapılacak dönüşüm ile, bu yantümceler bütünleştirilmiş, dolayısıyla aşağıdaki çözümleme elde edilmiş olur: (1) p(f(a)) ν q(f(a)) (2) ¬ q(f(a)) (3) p(f(a)) (1) ve (2)’nin çözümü
3.2.9.8 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Çözümleme ilkesinin yüklem mantığında kullanılmasında anahtar rol oynayan “dönüşüm” ve “bütünleştirme” kavramlarını tanımlayalım. Dönüşüm : t1,t2,…,tn’ler terimler, v1,v2,…,vn’ler birbirlerinden farklı değişkenler olmak üzere, {t1/v1,t2/v2,…,tn/vn} kümesine bir dönüşüm adı verilir. Burada t1/v1 ifadesinin anlamı, “t1 teriminin yerine v1 koy”dur. Örneğin, Θ={a/x, f(b)/y, c/z} dönüşümünü göz önüne alalım. Bu dönüşümü S={¬ p(x,y,z),p(a,f(b),c) ν q(x,f(a))} yantümce kümesine uygularsak, SΘ={¬ p(a,f(b),c),p(a,f(b),c) ν q(x,f(a))}
kümesi elde edilir.
3.2.9.9 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması S={C1,C2,…,Cn} yantümce kümesini ve bir Θ dönüşümünü göz önüne alalım. Eğer C1Θ=C2Θ=…=CnΘ oluyorsa, Θ dönüşümüne S kümesi için bir “bütünleştirici” adı verilir. Bu durumda S kümesine “bütünleştirilebilir” denir. Örneğin, S={p(a,y),p(x,f(b))} kümesi, Θ={a/x,f(b)/y} dönüşümü ile bütünleştirilebilir bir kümedir. Çünkü,
SΘ={p(a,f(b)),p(a,f(b))} olur. Bütünleştirme işlemi, daha önceki örnekte olduğu gibi, iki yantümce arasında bir yüklem ile onun değili elimine edilirken kullanılacaktır.
3.2.9.10 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Örnek 3.10 G=(∃ x)(p(x) ^ c(x)) formülünün, M=(∀ x)((e(x) ^ ¬ ν (x)) → (y)(s(x,y) ^ c(y))) N=(∃ x)(p(x) ^ e(x) ^ (∀ y)(s(x,y) → p(y))) O=(∀ x)(p(x) → ¬ ν (x) formüllerinin mantıksal sonucu olduğunu, çözümleme ilkesini kullanarak gösterelim. G’nin M,N ve O formüllerinin mantıksal sonucu olması demek, M ^ N ^ O → G formülünün geçerli olması, ya da buna denk olarak olması demektir. Çözümleme ilkesi sonuç olarak bir eliminasyon yöntemi olduğundan, bu durumda M ^ N ^ O ^ ¬ G formülünün tutarsız olduğunun gösterilmesi daha kolay olacaktır. Bunun için izlememiz gereken işlem sırası aşağıdaki gibi olacaktır: M, N, O ve ¬G formülleri standart biçime getirilir. Standart biçime getirilen bu formüller kullanılarak S yantümce kümesi elde edilir. Elde edilen yantümce kümesinden, çözümleme yolu ile çelişki (Ø) elde edilir. Böylece M ^ N ^ O ^ ¬ G formülünün tutarsız olduğu, dolayısıyla da M ^ N ^ O → G formülünün geçerli olduğu gösterilmiş olur. Bu da, G’nin M,N ve O formüllerinin mantıksal sonucu olması anlamına gelecektir.
3.2.9.11 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması M
→ (∀x)((e(x)^¬v(x))→(∃ y)(s(x,y)^c(y))) → (∀x)(¬(e(x)^¬v(x))ν(∃ y)(s(x,y)^c(y)))
→ (∀x)(¬e(x)νV(x))ν(∃ y)(s(x,y)^c(y))) → (∀x)(∃ y)(¬e(x)νV(x)ν(s(x,y)^c(y))) → (∀x)(∃ y)(¬e(x)νV(x)νs(x,y))^(¬e(x)νV(x)νc(y)))
→ (∀x)(¬e(x)νV(x)νs(x,f(x)))^(¬e(x)νV(x)νc(f(x)))) → {¬e(x)νV(x)νs(x,f(x)), ¬e(x)νV(x)νc(f(x)}
3.2.9.12 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması N → (∃ x)(p(x) ^ e(x) ^ (∀ y)(s(x,y) → p(y))) → (∃ x)(p(x) ^ e(x) ^ (∀ y)(¬ s(x,y) v p(y))) → (∃ x)(∀ y)(p(x) ^ e(x) ^ (¬ s(x,y) ν p(y)))
→ (∀ y)(p(a)^ e(a) ^ (¬ s(a,y) ν p(y))) → {p(a), e(a), ¬s(a,y)vp(y)}
3.2.9.13 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması O → (∀ x)(p(x)→ ¬ ν (x)) → (∀ x)(¬ p(x) ν ¬ ν (x)) → {¬ p(x)ν ¬ ν (x)}
3.2.9.14 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması
¬G → ¬ (∃ x)(p(x) ^ c(x))
→ (∀ x)(¬ p(x) ν ¬ c(x))
→ {¬ p(x)ν ¬ c(x)}
3.2.9.15 Çözümleme İlkesi ve Sonuç Çıkarmada Kullanılması Yantümceleri elde ettik. Şimdi çözümlemeye başlayabiliriz:
(1) ¬e(x) ν V(x) ν s(x,f(x)) (2) ¬e(x) ν V(x) ν c(f(x)
M
(3) p(a) (4) e(a) (5) ¬ s(a,y) ν p(y)
N
(6) ¬ p(x) ν ¬ ν (x)
O
(7) ¬ p(x) ν ¬ c(x)
¬G
(8) ¬ ν (a) (9) ν (a) ν c(f(a)) (10) c(f(a)) (11) v(a)vs(a,f(a)) (12) s(a,f(a)) (13) p(f(a)) (14) ¬ c(f(a)) (15) Ø
(3) ve (6) ’nın {a/x} dönüşümü ile çözümü. (2) ve (4) ’ün {a/x} dönüşümü ile çözümü.
(8) ve (9) ’un çözümü. (1) ve (4) ’ün {a/x} dönüşümü ile çözümü.
(11) ’in çözümü. (5) ve (12) ’nin {f(a)/y} dönüşümü ile çözümü. (7) ve (13) ’ün {f(a)/x} dönüşümü ile çözümü. (10) ve (14) ’ün çözümü. (8) ve
Böylece istenen gösterilmiş olur.
3.2.10 Bir Uygulama: Otomatik Teorem İspatlama Teoremler, evrensel bir gerçekliği ifade eden ispatlanmış yargılardır. Temel olarak bir teorem iki ana bölümden oluşur: varsayımlar ya da aksiyomlar ve sonuç. Varsayımların ya da gerçekliği daha önceden ispatlanmış olan aksiyomların doğru olduğu her yorumlamada, sonuç da doğru oluyor ise bu durumda teorem ispatlanmış olur. Teoremi aşağıdaki şekilde sembolize edebiliriz: A1^A2^...^An→R
Dolayısıyla bu teoremin geçerliliğini, daha önce mantıksal sonuç çıkarımında yaptığımız gibi, A1^A2^...^An^¬R formülünün tutarsız olduğunu çözümleme ilkesini kullanarak göstermek suretiyle söyleyebiliriz. Bu işlem son derece mekanik ve algoritmik olduğundan, bilgisayarların teorem ispatlamalarında oldukça etkili bir yöntem olarak kullanılmaktadır. Ancak iki temel problem, hala geçerliliğini korumaktadır: 1. Çözümleme ilkesinin her bir adımı, doğal dile çevrilmek suretiyle ispatın herkes tarafından anlaşılabilir bir biçime dönüştürülmesi gerekmektedir. Ancak bu her zaman mümkün olamamaktadır. 2. Teoremler ispatlanırlarken, sadece verilen aksiyomlar ve varsayımlar değil, konuyla ilgili daha önceden bilinen bütün gerçekler kullanılabilir. Dolayısıyla ispatlama programının son derece geniş ve bulduğu yeni gerçekleri de kendisine katarak sürekli genişleyen bir veritabanı bulunmalıdır.
3.2.10.1 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.11 Aşağıdaki geometri teoremini, çözümleme ilkesini kullanarak gösterelim:
Bir yamukta köşegen tarafından oluşturulan iç ters açılar birbirine eşittir.
İşlem adımlarımız aşağıdaki gibi olacaktır: I. Adım : Teoremin yüklem mantığında ifade edilebilmesi için gereken semboller tanımlanacaktır. II. Adım : Teoremin aksiyomları (A1, A2, …, An) ve sonucu (R) belirlenecek, buna göre A1^A2^…^An^¬R formülü oluşturulacaktır. III. Adım : A1^A2^…^An^¬R formülü standart biçime getirilecektir. IV. Adım : Standart biçime getirilen formülün yantümce kümesi elde edilecektir. V. Adım : Elde edilen yantümce kümesinin tutarsız olduğu, çözümleme ilkesi kullanılarak gösterilecektir.
3.2.10.2 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.11 - I. Adım: t(x,y,u,v) : xyuv, sol-üst köşesi x, sağ-üst köşesi y, sol-alt köşesi v, sağ-alt köşesi u olan bir yamuktur.
p(x,y,u,v) : xy doğrusu, uv doğrusuna paraleldir. e(x,y,z,u,v,w) : xyz açısı, uvw açısına paraleldir.
3.2.10.3 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.11 - II. Adım: A1 : “Bir yamukta, alt ve üst taban doğruları birbirlerine paraleldir.” A2 : “xy doğrusu uv doğrusuna paralel ise, xyv açısı uvy açısına eşittir.” A3 : “abcd bir yamuktur.” R : “abd açısı, cdb açısına eşittir.”
A1 : (∀ x)(∀ y)(∀ u)(∀ v)(t(x,y,u,v) → p(x,y,u,v)) A2 : (∀ x)(∀ y)(∀ u)(∀ v)(p(x,y,u,v) → e(x,y,v,u,v,y)) A3 : t(a,b,c,d) R
:
e(a,b,d,c,d,b)
¬ R : ¬ e(a,b,d,c,d,b)
3.2.10.4 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.11 - III. Adım: A1 : (∀ x)(∀ y)(∀ u)(∀ v)(¬ t(x,y,u,v) ν p(x,y,u,v)) A2 : (∀ x)(∀ y)(∀ u)(∀ v)(¬ (p(x,y,u,v) ν e(x,y,v,u,v,y)) A3 : t(a,b,c,d) ¬ R : ¬ e(a,b,d,c,d,b) IV. Adım:
¬ (p(x,y,u,v) ν e(x,y,v,u,v,y) S={¬ t(x,y,u,v) ¬ p(x,y,u,v) t(a,b,c,d) ¬ e(a,b,d,c,d,b)}
3.2.10.5 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.11 - V. Adım:
(1) ¬ t(x,y,u,v) ν p(x,y,u,v)
(2) ¬ p(x,y,u,v) ν e(x,y,v,u,v,y) (3) t(a,b,c,d) (4) ¬ e(a,b,d,c,d,b) (5) ¬ p(a,b,c,d) (2) ve (4)’ün {a/x, b/y, c/u, d/v} dönüşümü ile çözümü. (6) ¬ t(a,b,c,d) (1) ve (5)’in {a/x, b/y, c/u, d/v} dönüşümü ile çözümü. (7) Ø (3) ve (6)’nın çözümü.
3.2.10.7 Bir Uygulama: Otomatik Teorem İspatlama İşlem adımlarımız önceki örnekteki gibi olacaktır: I. Adım : Teoremin yüklem mantığında ifade edilebilmesi için gereken semboller tanımlanacaktır. II. Adım : Teoremin aksiyomları (A1, A2, …, A9) ve sonucu (R) için G=A1^A2^…^An^¬R formülü oluşturulacaktır. III. Adım : G=A1^A2^…^An^¬R formülü standart biçime getirilecektir. IV. Adım : Standart biçime getirilen G formülünün S yantümce kümesi elde edilecektir. V. Adım : Elde edilen S yantümce kümesinin tutarsız olduğu, çözümleme ilkesi kullanılarak gösterilecektir. Bu da teoremimizin ispatı olacaktır.
3.2.10.8 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.12 - I. Adım: e(x)
:
“x bir erkektir.”
p(x)
:
“x Pompeylidir.”
r(x)
:
“x Romalıdır.”
im(x)
:
“x imparatordur.”
b(x)
:
“x bir bireydir.”
s(x,y)
:
“x, y’ye sağdıktır.”
n(x,y)
:
“x, y’den nefret eder.”
k(x,y)
:
“x, y’ye suikaste kalkışır.”
3.2.10.9 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.12 - II. Adım:
(1)
e(Markus)
(2)
p(Markus)
(3)
(∀ x)(p(x) → r(x))
(4)
im(Sezar)
(5)
(∀ x)(r(x) → (s(x,Sezar) ν n(x,Sezar)))
(6)
(∀ x)(∃ y)s(x,y)
(7)
(∀ x)(∀ y)((b(x) ^ im(y) ^ k(x,y)) → ¬ s(x,y)
(8)
k(Markus,Sezar)
(9)
(∀ x)(e(x) → b(x))
¬ R : ¬ n(Markus,Sezar)
3.2.10.10 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.12 - III. Adım:
(1)
e(Markus)
(2)
p(Markus)
(3)
(∀ x)(¬ p(x) ν r(x))
(4)
im(Sezar)
(5)
(∀ x)(¬ r(x) ν s(x,Sezar) ν n(x,Sezar))
(6)
(∀ x)s(x,f(x))
(7)
(∀ x)(∀ y)(¬ b(x) ν ¬ im(y) ν ¬ k(x,y) ν ¬ s(x,y))
(8)
k(Markus,Sezar)
(9)
(∀ x)(¬ e(x) ν b(x))
¬ R : ¬ n(Markus,Sezar)
3.2.10.11 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.12 - IV. Adım:
S= {e(Markus), p(Markus), ¬p(x)vr(x), im(Sezar), ¬ r(x) ν s(x,Sezar) ν n(x,Sezar), s(x,f(x)), ¬ b(x) ν ¬ im(g(x)) ν ¬ k(x,g(x)) ν ¬ s(x,g(x)), k(Markus,Sezar), ¬ e(x) ν b(x), n(Markus,Sezar) }
3.2.10.12 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.12 - V. Adım:
(1)
e(Marcus)
(2)
p(Marcus)
(3)
¬ p(x) ν r(x)
(4)
im(Sezar)
(5)
¬ r(x) ν s(x,Sezar) ν n(x,Sezar)
(6)
s(x,f(x))
(7)
¬ b(x) ν ¬ im(y) ν ¬ k(x,y) ν ¬ s(x,y)
(8)
k(Markus,Sezar)
(9)
¬ e(x) ν b(x)
(10)
¬ n(Marcus,Sezar)
(11)
b(Marcus) (1) ve (9)’un {Markus/x} dönüşümü ile çözümü.
(12)
¬ im(y) ν ¬ k(x,y) ν ¬ s(x,y) (7) ve (11)’in {Markus/x} dönüşümü ile çözümü.
3.2.10.13 Bir Uygulama: Otomatik Teorem İspatlama Örnek 3.12 - V. Adım (Devamı) : (13)
¬ k(x,Sezar) ν ¬ s(x,Sezar) (4) ve (12)’nin {Sezar/y} dönüşümü ile çözümü.
(14)
¬ s(Markus,Sezar) (8) ve (13)’ün {Markus/x} dönüşümü ile çözümü.
(15)
r(Markus) (2) ve (3)’ün {Markus/x} dönüşümü ile çözümü.
(16)
s(Markus,Sezar) ν n(Markus,Sezar) (5) ve (15)’in {Markus/x} dönüşümü ile çözümü.
(17)
s(Markus,Sezar)
(10) ve (17)’nin çözümü.
(18) Ø (14) ve (17)’nin çözümü.
BÖLÜM:4BİR MANTIK PROGRAMLAMA DİLİ:PROLOG 4.1 PROLOG'UN KISA BİR TARİHÇESİ Prolog kelimesi “PROgramming in LOGic”, yani “Mantıkta Programlama” kelimelerinden türetilmiştir. Teorik temelleri ve mantığı Frege’nin yüklem mantığı ve yüklem analizi (predicate calculus) çalışmalarına dayanan Prolog’un temelleri, 1920-1960 yılları arasında Skolem, Herbrand, Horn, Davis, Putnam, Gilmore ve Robinson tarafından atılmıştır. Bu günkü anlamı ile bir programlama dili halini alması ise 1970 yılında Kowalski, Colmerauer ve diğerleri tarafından yapılan çalışmalarla gerçekleşmiştir. Gelişimi Prolog ile paralel olarak süren bir başka önemli mantıksal programlama dili de Lisp’dir. Lisp’in, Prolog’a kıyasla daha sembolik ve doğrudan mantıksal sözdizime daha yakın olması sebebiyle, öğrenilmesi Prolog’dan daha zordur. Mantığın bilgisayar ortamına taşınması amacıyla Prolog ve Lisp gibi daha bir çok “hesaplanabilir” sistem geliştirilmiştir, ancak diğerleri, bu iki dil kadar geliştirilip desteklenmediğinden, bir çoğu “programlama dili” aşamasında geçememiştir. Eğitim amaçlı kullanılan çeşitli Prolog ve Lisp derleyicileri kullanıcılara ücretsiz olarak sunulmaktadır. Biz, bu dersimizde, vereceğimiz örnek programları, oldukça yaygın olan ve derleyicisi ile kod kütüphanelerini ticari-olmayan kullanımlar için ücretsiz olarak sunan, “Visual Prolog” derleyicisinin 5.2. sürümünü kullanarak geliştireceğiz.
4.2 PROLOG DİLİNİN SÖZDİZİMİ VE YAPISI Prolog üç farklı temel yapıtaşından oluşur: Veri yapılarını gösteren terimler, terimler arasındaki ilişkileri belirleyen bilinen gerçekler ve kurallar, terimlerin hangi gerçeklerle ilişkili olduğunu soran sorgular. Terimler, atomlar, sayılar, değişkenler ve daha karmaşık nesneler olan yapılar dan oluşurlar. Atomlar, yüklem mantığındaki yüklem sembollerine karşılık gelirler. Prolog’da yüklem isimleri büyük ya da küçük harfle başlarlar, ancak ismin içersinde sayı ya da alt tire ( _ ) simgesi bulundurabilirler. Değişkenler ise büyük harfle ya da özel durumlarda alt tire sembolü ile başlarlar. Mantıksal dillere özgü bir nesne grubu olan yapılar ise, bileşik bir türdür. Yüklem mantığında kullanılan fonksiyon sembolleri, Prolog’da yapı olarak karşımıza çıkarlar. Yapıların en önemli özellikleri, iç içe tanımlanabilir olmalarıdır. Örneğin,
besteci(isim(Berlioz),milliyet(Fransa)) nesnesi, iç içe tanımlanmış üç yapıdan oluşan bir yapıdır. “isim” ve “milliyet” yapıları, “besteci” yapısının içersinde tanımlanmıştır. Bu yapı türündeki bilgi, Berlioz’un Fransız bir besteci olduğunu söylemektedir.
4.2.1 Prolog Dilinin Sözdizimi ve Yapısı Prolog’da özel bir yapı türü olan listeler, köşeli parantezler içersinde liste elemanları birbirlerinde virgül ile ayrılmış şekilde tanımlanırlar. Örneğin, [ankara,istanbul,izmir,adana] [2,4,6,8] [elma,armut,kelmahmut] gibi. Hiçbir elemanı bulunmayan listeye boş liste denir ve [] simgesi ile gösterilir. Listenin ilk elemanı baş (head), geriye kalan elemanlar ise kuyruk (tail) olarak adlandırılır. Baş ve kuyruk birbirlerinden | simgesi ile ayrılırlar. Örnek: [arı | at,ayı,ceylan,geyik,horoz,tavşan] listesinde “arı” baş eleman, diğer elemanlar ise kuyruk elemanlarıdır. İşlem sırasında liste sonu, kuyruğu boş liste olan tek elemanlı liste olarak tanımlanır. Listeler, genellikle yapay zeka programlarında, bilgisayarlar için pek bir şey ifade etmeyen metin (string) türündeki verilerin, yapı türü verilere dönüştürülmeleri işlemlerinde kullanılırlar. Gramer çözümlemesi (parsing) adı verilen bu işlem, işlevi ne olursa olsun bir çok yapay zeka algoritması için vazgeçilmez bir işlemdir.
4.2.2 Prolog Dilinin Sözdizimi ve Yapısı Prolog’da doğruluğu bilinen gerçekler, doğrudan yüklem sembolleri kullanılarak ifade edilirler. Örneğin, babasıdır(mustafa,çetin). sever(aslı,[hayvan(köpek),hayvan(kedi)]). gibi. Kurallar ise, yüklem mantığındaki yantümcelere karşılık gelirler. Ancak Prolog’da aksiyomlar ve sonuç bölümünden oluşan klasik formül yapısı, yüklem mantığından biraz farklı bir sözdizime sahiptir. Aşağıdaki tabloda, genel olarak aksiyomlar ve sonuçtan oluşan ve yüklem mantığında teorem olarak adlandırdığımız temel formülün Prolog’daki karşılığı, bir “Prolog Kuralı” (Prolog Clause) olarak verilmiştir. YÜKLEM MANTIĞINDA
PROLOG' DA
A1^A2^...^An→ R
R :–A1,A2,...,An
4.2.3 Prolog Dilinin Sözdizimi ve Yapısı Örnek olarak “babasıdır”, “annesidir” ve “dedesidir” yüklemleri arasındaki ilişkiyi açıklayan, aşağıdaki kuralı yazalım: dedesidir(X,Z) :- babasıdır(X,Y), babasıdır(Y,Z). dedesidir(X,Z) :- babasıdır(X,Y), annesidir(Y,Z). Birinci kural, şu gerektirmeyi ifade etmektedir:
“X, Y’nin babası, Y de Z’nin babası ise X, Z’nin dedesidir.” İkinci kural ise, aşağıdaki gerektirmeyi ifade etmektedir:
“X, Y’nin babası, Y de Z’nin annesi ise X, Z’nin dedesidir.” gerektirmesini ifade etmektedir.
4.2.4 Prolog Dilinin Sözdizimi ve Yapısı Şimdi, bu kurallara bazı gerçekler ekleyerek ilk Prolog programımızı yazalım: Örnek 4.1 : predicates
nondeterm
Dedesidir(symbol,symbol);
nondeterm
Babasidir(symbol,symbol);
nondeterm
Annesidir(symbol,symbol);
clauses Dedesidir(X,Z) :- Babasidir(X,Y), Babasidir(Y,Z). Dedesidir(X,Z) :- Babasidir(X,Y), Annesidir(Y,Z). Babasidir(murat,çetin).
Babasidir(ali,ahmet). Babasidir(ahmet,mehmet). Babasidir(çetin,can). Babasidir(mustafa,necla). Annesidir(necla,hasan). goal Dedesidir(X,hasan).
4.2.5 Prolog Dilinin Sözdizimi ve Yapısı Bu basit program üzerinde, Prolog dilinin sözdizimini ve çalışma şeklini inceleyelim. Bu program, Prolog dilinin en temel üç bölümünü içermektedir: Predicates, Clauses ve Goal. Bunların açıklamaları aşağıda verilmiştir: Predicates : “Yüklemler” anlamına gelen bu sözcük, adında anlaşılacağı gibi, programın bütününde kullanılacak yüklem sembollerinin tanımlandığı bölümü göstermektedir. Bu bölümde, aynı zamanda bu yüklemlerin bileşen sayıları ve bu bileşenlerin veri türleri de belirlenmektedir. Örnek programımızda bu bölümde üç tane yüklem tanımlanmıştır: Dedesidir, Babasidir ve Annesidir. Her üç yüklem de iki bileşenlidir ve bu bileşenler “symbol” türünde tanımlanmıştır.
nondeterm
Dedesidir(symbol,symbol);
nondeterm
Babasidir(symbol,symbol);
nondeterm
Annesidir(symbol,symbol);
Yüklem sembollerinin önünde yer alan “nondeterm” önbildirimi ise bu yüklemlerin nondeterministik olarak tanımlandıklarını göstermektedir. Bu gereklilik, kuralların tanımlandığı “clauses” bölümünde bu yüklemlerin kullanılış biçiminden kaynaklanmaktadır.
4.2.6 Prolog Dilinin Sözdizimi ve Yapısı Clauses : “Yantümceler” anlamına gelen clauses bölümünde, yüklemlerin birbirleri ile ilişkilerinin tanımlandığı bağıntılar yer alır. Örnek programımızda tanımlanan tek kural, “Dedesidir” kuralıdır. Dedesidir(X,Z) :-
Babasidir(X,Y), Babasidir(Y,Z).
Dedesidir(X,Z) :-
Babasidir(X,Y),
Annesidir(Y,Z).
Bu kuralları, yüklem mantığı formüllerine çevirelim: (∀ x)(∀ y)(∀ z)((Babasıdır(X,Y) ^ Babasıdır(Y,Z)) → Dedesidir(X,Z))
“Eğer X, Y’nin babası ve Y de Z’nin babası ise X, Z’nin dedesidir” (∀ x)(∀ y)(∀ z)((Babasıdır(X,Y) ^ Annesidir(Y,Z)) → Dedesidir(X,Z)) “Eğer X, Y’nin babası ve Y de Z’nin anesi ise X, Z’nin dedesidir” Nasıl? Mantıklı değil mi? Bu bölümde yer alan diğer kurallar ise, kimin, kimin babası; kimin, kimin annesi olduğunu belirlemektedirler: Babasidir(murat,çetin). Babasidir(ali,ahmet). Babasidir(ahmet,mehmet). Babasidir(çetin,can). Babasidir(mustafa,necla). Annesidir(necla,hasan). Bu kuralları bir bakıma veriler olarak düşünebiliriz. Aslında bu tür veriler Prolog’da veritabanı yapısında saklanırlar. Bu şekilde, yüklem sembolleri kullanılarak kod içersinden veri girişi yapıldığında, bu yüklemlerin nondeterministik olarak tanımlanmaları gerekir
4.2.7 Prolog Dilinin Sözdizimi ve Yapısı Goal : “Amaç” anlamına gelen goal bölümünde, sorgular yer alır. Örnek programımızda yer alan ifade, Hasanın dedesinin kim olduğunu sormaktadır: goal
Dedesidir(X,hasan). Bu durumda program tarafından verilecek yanıt,
X=mustafa 1 Solution şeklinde olacaktır.
4.2.8 Prolog Dilinin Sözdizimi ve Yapısı Aşağıdaki tabloda, örnek program 4.1 için yapılan farklı sorgulamalar için programın verdiği yanıtlar verilmiştir:
Amaç (Goal)
Programın Cevabı
Dedesidir(X,can)
X = murat
Dedesidir(ali,X)
X = mehmet
Dedesidir(mustafa,can)
No
Dedesidir(mustafa,hasan)
Yes
İlk olarak, “Can’ın dedesi kimdir?” sorusu sorulmuş ve “Murattır” yanıtı alınmıştır. İkinci sorgulamada ise, “Ali kimi dedesidir?” sorusu sorulmuş, “Mehmettir” yanıtı alınmıştır. Üçüncü sorgulamada “Mustafa, Can’ın dedesi midir?” sorusuna karşılık “Hayır” yanıtı alınmıştır. Son sorgulamada ise, “Mustafa, Hasan’ın dedesi midir?” sorusuna “Evet” yanıtı alınmıştır.
4.2.9 Prolog Dilinin Sözdizimi ve Yapısı Örnek 4.2 : Önceki örnekte verilen durumu biraz daha geliştirelim. Bu kez veri olarak, aşağıdaki soyağacını kullanalım.
Resimde de görüldüğü gibi, Alirıza ve Rukiye’nin üç çocukları vardır: Kerim, Naci ve Naciye. Muharrem ve Nazlı’nın ise iki çocukları vardır: Nermin ve Nihat. Çetin ve Mehtap ise, Naci ve Nermin’in çocuklarıdır. Burada amacımız, Dede, Anneanne, Babaanne, Anne, Baba, Amca, Hala, Teyze ve Dayı bağıntılarını tanımlayarak, bu soyağacı üzerinden sorgulamalar gerçekleştirmektir. Ancak önemli olan, bu işlemi mümkün olan en az kural ve veri girişi ile sağlamaktır. Biz de bu minimum işlem gerektiren en iyi çözümü bulmaya çalışacağız.
4.2.10 Prolog Dilinin Sözdizimi ve Yapısı Öncelikle akrabalık ilişkilerini yüklem mantığında aşağıdaki gibi tanımlayalım: (∀ x)(∀ y)(∀ z)((Babasıdır(X,Y) ^ Babasıdır(Y,Z)) → Dedesidir(X,Z)) “Eğer X, Y’nin babası ve Y de Z’nin babası ise X, Z’nin dedesidir” (∀ x)(∀ y)(∀ z)((Babasıdır(X,Y) ^ Annesidir(Y,Z)) → Dedesidir(X,Z)) “Eğer X, Y’nin babası ve Y de Z’nin anesi ise X, Z’nin dedesidir” (∀ x)(∀ y)(∀ z)((Annesidir(X,Y) ^ Annesidir(Y,Z)) → Anneannesidir(X,Z)) “Eğer X, Y’nin babası ve Y de Z’nin babası ise X, Z’nin dedesidir” (∀ x)(∀ y)(∀ z)((Annesidir(X,Y) ^ Babasıdır(Y,Z)) → Babaannesidir(X,Z)) “Eğer X, Y’nin babası ve Y de Z’nin anesi ise X, Z’nin dedesidir” (∀ x)(∀ y)(∀ z)((Babasıdır(Y,Z) ^ Erkek_Kardeşidir(X,Y)) → Amcasıdır(X,Z)) “Eğer X, Y’nin babası ve Z de X’in erkek kardeşi ise Z, Y’nin amcasıdır” (∀ x)(∀ y)(∀ z)((Babasıdır(Y,Z) ^ Kız_Kardeşidir(X,Y)) → Halasıdır(X,Z)) “Eğer X, Y’nin babası ve Z de X’in kız kardeşi ise Z, Y’nin halasıdır” (∀ x)(∀ y)(∀z)((Annesidir(Y,Z) ^ Erkek_Kardeşidir(X,Y)) → Dayısıdır(X,Z)) “Eğer X, Y’nin babası ve Z de X’in erkek kardeşi ise Z, Y’nin dayısıdır” (∀x)(∀ y)(∀ z)((Annesidir(Y,Z) ^ Kız_Kardeşidir(X,Y)) → Teyzesidir(X,Z)) “Eğer X, Y’nin babası ve Z de X’in kız kardeşi ise Z, Y’nin teyzesidir”
4.2.11 Prolog Dilinin Sözdizimi ve Yapısı Soyağacından elde ettiğimiz gerçekler ise aşağıdaki gibi olur:
Babasıdır(alirıza,kerim). Babasıdır(alirıza,naci). Babasıdır(alirıza,naciye). Babasıdır(muharrem,nermin). Babasıdır(muharrem,nihat). Babasıdır(naci,çetin). Babasıdır(naci,mehtap). Annesidir(rukiye,kerim). Annesidir(rukiye,naci). Annesidir(rukiye,naciye). Annesidir(nazli,nermin). Annesidir(nazli,nihat). Annesidir(nermin,çetin). Annesidir(nermin,mehtap). Erkek_Kardeşidir(kerim,naci). Erkek_Kardeşidir(naci,naciye). Erkek_Kardeşidir(kerim,naciye). Erkek_Kardeşidir(nihat,nermin). Kız_Kardeşidir(naciye,naci). Kız_Kardeşidir(naciye,kerim). Kız_Kardeşidir(nermin,nihat).
4.2.12 Prolog Dilinin Sözdizimi ve Yapısı Bu durumda Prolog programımızı, bölümler halinde tanımlayalım: predicates nondeterm Dedesidir(symbol,symbol); nondeterm Babasidir(symbol,symbol); nondeterm Annesidir(symbol,symbol); nondeterm Anneannesidir(symbol,symbol); nondeterm Babaannesidir(symbol,symbol);
nondeterm Amcasidir(symbol,symbol); nondeterm Halasidir(symbol,symbol); nondeterm Dayisidir(symbol,symbol); nondeterm Teyzesidir(symbol,symbol); nondeterm Erkek_Kardesidir(symbol,symbol); nondeterm Kiz_Kardesidir(symbol,symbol);
4.2.13 Prolog Dilinin Sözdizimi ve Yapısı clauses Dedesidir(X,Z) :-
Babasidir(X,Y),
Babasidir(Y,Z). Dedesidir(X,Z) :-
Babasidir(X,Y),
Annesidir(Y,Z). Anneannesidir(X,Z) :-
Annesidir(X,Y),
Annesidir(Y,Z). Babaannesidir(X,Z) :-
Annesidir(X,Y),
Babasidir(Y,Z). Amcasidir(X,Z) :-
Babasidir(Y,Z),
Erkek_Kardesidir(X,Y). Halasidir(X,Z) :-
Babasidir(Y,Z),
Kiz_Kardesidir(X,Y). Dayisidir(X,Z) :-
Annesidir(Y,Z),
Erkek_Kardesidir(X,Y). Teyzesidir(X,Z) :-
Annesidir(Y,Z),
Kiz_Kardesidir(X,Y).
4.2.14 Prolog Dilinin Sözdizimi ve Yapısı Babasidir(aliriza,kerim). Babasidir(aliriza,naci). Babasidir(aliriza,naciye).
Babasidir(muharrem,nermin). Babasidir(muharrem,nihat). Babasidir(naci,çetin). Babasidir(naci,mehtap). Annesidir(rukiye,kerim). Annesidir(rukiye,naci). Annesidir(rukiye,naciye). Annesidir(nazli,nermin). Annesidir(nazli,nihat). Annesidir(nermin,çetin). Annesidir(nermin,mehtap). Erkek_Kardesidir(kerim,naci). Erkek_Kardesidir(naci,naciye). Erkek_Kardesidir(kerim,naciye). Erkek_Kardesidir(nihat,nermin). Kiz_Kardesidir(naciye,naci). Kiz_Kardesidir(naciye,kerim). Kiz_Kardesidir(nermin,nihat).
4.2.15 Prolog Dilinin Sözdizimi ve Yapısı goal
Dedesidir(aliriza,X). Bu sorgulama sonucunda, programın bize verdiği yanıt, X=çetin X=mehtap şeklinde olacaktır. Şimdi, farklı sorgulamalar için programdan alacağımız farklı yanıtlar neler olabilir, onları inceleyelim.
4.2.16 Prolog Dilinin Sözdizimi ve Yapısı
Sorgu
Anlamı
Programın Cevabı
Dayisidir(X,mehtap) Teyzesidir(X,çetin)
Mehtap’ın dayısı kimdir? Çetin’in teyzesi kimdir?
X=nihat No Solution
Amcasidir(X,çetin)
Çetin’in amcası kimdir?
X=kerim
Halasidir(X,mehtap)
Mehtap’ın halası kimdir?
X=naciye
Anneannesidir(rukiye,çetin) Rukiye, Çetin’in anneannesi midir?
No
Babaannesidir(rukiye,çetin) Rukiye, Çetin’in babaannesi midir?
Yes
Anneannesidir(nazli,X)
Nazlı kimin anneannesidir?
X=çetin X=mehtap
Dedesidir(X,mehtap)
Mehtap’ın dedesi kimdir?
X=aliriza X=muharrem
4.3 ÖZYİNELEME (REKÖRSİYON) Özyineleme, programlama dillerinin tekrarlı işlemlerde sıklıkla başvurdukları yöntemlerden birisidir. Tercih edilmelerinin en önemli sebepleri, işlem yoğunluğunu ve kod uzunluğunu kısaltmalarıdır. Rekörsiyon (Recursion) olarak da bilinen özyineleme tekniğini, tipik bir örnek olan faktöriyel hesaplama problemi üzerinde açıklayalım: Bir pozitif tamsayının faktöriyeli, 1’den başlayarak o tamsayıya kadar olan bütün tamsayıların çarpımı olarak tanımlıdır. Sayının yanına yazılan ! (ünlem işareti) simgesi ile gösterilir. Örneğin, 1!=1 2!=1×2=2 3!=1×2×3=6 4!=1×2×3×4=24 5!=1×2×3×4×5=120 ve genel olarak, n!=1×2×…×(n-1)×n olur.
4.3.1 Özyineleme (Rekörsiyon) Öncelikle bu işlemi klasik döngü yaklaşımı ile gerçekleştirecek bir algoritma yazalım:
faktöriyel:=1 For j:=1 to n faktöriyel:=faktöriyel×j Next j Döngü değişkeni olan j, 1’den başlayıp n değerine ulaştığında faktöriyel değişkeni n! değerine ulaşacaktır.
4.3.2 Özyineleme (Rekörsiyon) Aynı işlemi özyineleme tekniğine dayalı olarak gerçekleştirmeden önce, faktöriyel işleminin özyinelemeli olarak tanımlamalıyız. Bunun için, yine örnekler üzerinden hareket edelim: 1!=1 2!=1×2=1!×2=2 3!=1×2×3=2!×3=6 4!=1×2×3×4=3!×4=24 5!=1×2×3×4×5=4!×5=120 ve genel olarak, n!=(n-1)!×n olur.
4.3.3 Özyineleme (Rekörsiyon) Şimdi faktöriyel hesabı yapacak özyinelemeli bir algoritma yazabiliriz: faktöriyel(n) If n=1 then RETURN(1) Else RETURN(n×Faktöriyel(n-1)) End Bu algoritmada Faktöriyel() bir alt program olarak düşünülmelidir. Altprogramın ürettiği sonuç, RETURN ifadesi ile geri gönderilmektedir. n=1 değerine ulaşana kadar algoritma sayıyı bir eksilterek tekrar kendisini çağırmaktadır. n=1 değerine ulaştığında ise geriye doğru işlem başlar ve sonuç hesaplanır. Bu “geriye doğru işlem” mantığına “backtracking” adı verilir.
4.3.4 Özyineleme (Rekörsiyon)
Bu şekilde kendi içersinden kendisini çağıran algoritmalara özyinelemeli (rekösif) algoritmalar adı verilir. Özyineleme, Prolog’da da çok önemli bir uygulama alanıdır. Aşağıda, faktöriyel hesaplama işlevini gerçekleştiren özyinelemeli Prolog programı verilmiştir: predicates nondeterm Faktoriyel(integer,integer) clauses Faktoriyel(1,1). Faktoriyel(N,F) :- N>0, N1=N-1, Faktoriyel(N1,F1), F=F1*N. goal Faktoriyel(8,Sonuç). Programın cevabı, Sonuç=40320 şeklinde olacaktır.
4.4 LİSTELER Prolog’da özel bir yapı olan listeler, gramer çözümlemesi (parsing) adı verilen yapay zeka yöntemlerinde kullanılan geçiş aşaması olmaları nedeniyle, sıklıkla kullanılan bir veri türüdürler. Bilgisayarlar tarafından sadece ham veri olarak değerlendirilen metin tabanlı (text-based) bilgiler, onlar için anlamlı ifadelere dönüştürülmeden önce listeler gibi dizinsel yapılara dönüştürülürler. Örneğin, “Bu gün nasılsın?” sorusu, bizim için çok anlamlı olmasına rağmen, bir bilgisayar için sadece harflerin bir dizisi olarak değerlendirilir. Bu diziyi, [“B”, ”u”, ” “ , “g”, “ü”, “n”, “ “, “n”, “a”, “s”, “ı”, “l”, “s”, “ı”, “n”, “?”] şeklinde bir liste haline getirdiğimizde, kelimelerin ve eklerin ayrıştırılması, ya da noktalama işaretlerinden cümlenin yapısı gibi konularda bilgi sahibi olunabilir. Bu bilgiler daha sonra, aşağıdaki gibi daha karmaşık bir yapının oluşturulmasında kullanılacaktır: Soru_Nasılsın(Zaman(Bugün))
İşte bu yapı, size de tanıdık geldiği üzere, özellikle mantık programlama dilleri tarafından doğrudan “işlenebilir” bir veri olacaktır.
4.4.1 Listeler Gramer çözümleme, doğal dillerin analizinde olduğu gibi, başka alanlardaki verilerin çözümlenmesinde de kullanılmaktadır. Örneğin matematiksel ifadelerin çözümlenmesi ya da programlama dilleri arasında çeviri işlemlerinin yapılması gibi. Sözgelimi, “(x+1)×(x+7)” ifadesi, aşağıdaki aşamalarla bilgisayar tarafından “anlaşılabilir” bir ifadeye dönüşecektir:
4.4.2 Listeler Prolog’da bütün yapılarda olduğu gibi listeler de program kodunun “Domains” bölümünde tanımlanırlar. Liste tanımlama belirteci olarak yıldız (*) simgesi kullanılır. Örneğin, bir string (karakterdizisi) listesi tanımlayacaksak, programın en üst kısmında, domains Listem = string* tanımlamasını yaparız. Böylece, “Listem” adlı yeni bir veri türü tanımlamış oluruz. Dolayısıyla bu türü, predicates bölümündeki bütün yüklem tanımlamalarında diğer türler gibi kullanabiliriz.
4.4.3 Listeler-Liste Oluşturma İlk olarak, kullanıcı tarafından girilen tamsayılardan bir liste oluşturacak programla başlayalım: domains
LISTE = integer* predicates
nondeterm ListeYap(LISTE) clauses
ListeYap([Bas|Kuyruk]) :-
write("Sayi Giriniz ?"), readint(Bas), Bas<>0, ListeYap(Kuyruk).
ListeYap([]). goal
ListeYap(Liste1). ListeYap kuralı, kullanıcı tarafından girilen ve “readint”, yani tamsayı okuma komutu ile okunan tamsayılar sıfırdan farklı oldukları sürece liste oluşturur. Bu işlem şu şekilde gerçekleşmektedir: Okunan her bir sayı, listenin ilk elemanı yapılır ve aynı kural, özyinelemeli olarak kuyruk, yani listenin kalan kısmı için tekrar çağırılır. İşlem, ListeYap([]) kuralı ile sonlanır ve geriye doğru işlem başlar.
4.4.3.1 Listeler-Liste Oluşturma Giriş işlemi, sıfır sayısının girilmesi ile sonlanmaktadır. Bu karşılaştırma kuralın aksiyomlarına bu yüzden eklenmiştir. ListeYap([Bas|Kuyruk]) :-
write("Sayi Giriniz ?"), readint(Bas),
Bas<>0, ListeYap(Kuyruk). Aşağıda verilen örnek girişin sonucunda, geriye-doğru işlemin sonucu açıkça görülmektedir: Sayi Giriniz ?3 Sayi Giriniz ?2 Sayi Giriniz ?6 Sayi Giriniz ?5 Sayi Giriniz ?8 Sayi Giriniz ?9 Sayi Giriniz ?7 Sayi Giriniz ?0 Liste1=[3,2,6,5,8,9,7] Liste1=[3,2,6,5,8,9] Liste1=[3,2,6,5,8] Liste1=[3,2,6,5]
Liste1=[3,2,6] Liste1=[3,2] Liste1=[3] Liste1=[] 8 Solutions
4.4.4 Listeler-Listenin Elemanı Olma Bir elemanın, verilen bir listenin içersinde yer alıp almadığını kontrol edecek kural, aşağıdaki gibi tanımlanır: domains
LISTE = integer* predicates nondeterm ListeElemanimi(integer,LISTE) clauses
ListeElemanimi(X,[X|_]). ListeElemanimi(X,[_|T]) :goal
ListeElemanimi(X,T).
ListeElemanimi(2,[3,5,2,7,8,9]). Bu sorgulamanın cevabı, Yes olacaktır.
4.4.4.1 Listeler-Listenin Elemanı Olma Kodlarda yer alan _ (alt tire) simgesi, kuralın aksiyomlarında kullanılmayan parametreler için gereksiz yere değişken simgesi verilmesine engel olmak için kullanılır. ListeElemanımı kuralının temel çalışma mantığı, aranan eleman listenin ilk elemanı (X) olana kadar kendi kendisini listenin kalan kısmı için (T) çağırması üzerine kurulmuştur.
4.4.5 Listeler-Liste Uzunluğunun Hesaplanması Verilen bir sembol listesinin uzunluğunu hesaplayan kural, aşağıdaki gibi tanımlanır: domains
LISTE = symbol* predicates nondeterm ListeUzunluk(LISTE,integer)
clauses ListeUzunluk([],0).
ListeUzunluk(T,Uzunluk1),
ListeUzunluk([_|T],Uzunluk) :-
Uzunluk=Uzunluk1+1. goal ListeUzunluk([a,b,c,d,e,f],Uzunluk). Geriye-doğru işlem, ListeUzunluk([],0) kuralı ile sonlanır. Bu kural, boş listenin uzunluğunun sıfır olduğunu söylemektedir ki, bu da gayet makuldür.
4.4.6 Listeler-İki Listenin Birleştirilmesi Verilen iki sembol listesini birleştirerek üçüncü bir liste oluşturan kural Prolog’da aşağıdaki gibi tanımlanır: domains LISTE = symbol* Predicates nondeterm ListeBirlestir(LISTE,LISTE,LISTE) clauses ListeBirlestir([],L,L).
ListeBirlestir([H|T],L,[H| U]) :-
ListeBirlestir(T,L,U).
goal ListeBirlestir([a,b,c,d,e,f],[sw,we,fg,hb,jg],L). Programın çıktısı şöyle olacaktır:
L=["a","b","c","d","e","f","sw","we","fg","hb","jg"]