Professional Documents
Culture Documents
Yapay Zeka (60 Sayfa)
Yapay Zeka (60 Sayfa)
Yapay Zeka (60 Sayfa)
Örneğin,
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.
Örneğin,
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,
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.
Ö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.
Ö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ı
Bir önermenin karşıtı (ya da değili) ise ¬ önek simgesi ile gösterilir.
q= “Sıcaklık yüksektir”
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.
p= “Yağmur yağar”
q= “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.
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.
Ö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.
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.
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:
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:
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.
p= “Yağmur yağar”
q= “Yerler ıslanır”
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.
Ö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
q : “Yağmur yağıyor”
((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.
((p → q) ^ (q → r) ^ p) → r
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
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
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
(p → q), (q → r) ve p
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,
((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
Görüldüğü gibi, indirgeme işlemi sonucunda çelişki elde edilmiştir. Bunun anlamı,
(p → q) ^ (q → r) ^ p ^ ¬ r
((p → q) ^ (q → r) ^ p) → 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.
Örneğin,
“7, 3’den büyüktür” diyebilmek için, öncelikle bu eylemin, yani “x, y’den büyüktür”
büyüktür(x,y)
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ı,
olacaktır.
öğrenelim:büyüktür(toplam(x,2),x)
yükleminin anlamı,
2 ise sabittir. Sabitlerin mutlaka sayısal olmaları gerekmez, farklı türlerde de olabilirler.
Örneğin,
baba(x)
sever(Ali,baba(Ali))
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.
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, 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:
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:
(f) Bir tamsayı tek ise, 2 ile tam bölünemez ve çift 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:
büyüktür(x,y) : “x>y”
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:
(∀x)(doğalsayı(x) → tamsayı(x))
(∀x)(rasyonelsayı(x) → gerçelsayı(x))
(∃ x)asalsayı(x)
(∀ x)(∃ y)büyüktür(x,y)
(∀ x)(irrasyonelsayı(x) → ¬ rasyonelsayı(x))
Bir a tamsayısı bir b tamsayısına tam bölünemez ise a/b bir rasyonel sayıdır.
Örneğin;
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.
3.2.5 Formüller
Yüklem mantığında formüller, önerme mantığında olduğu gibi tanımlanır:
(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.
3.2.5.1 Formüller
Örneğin,
(∀ x)(insan(x) → ölümlü(x))
şeklinde olacaktır.
(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.
(∀ 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:
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.
(∀ 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:
Ş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
(∀ 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,
atomlarının tümü T değerine sahiptir. Bunların dışındakiler ise F değerine sahip olacaktır.
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.
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.
(∀ x)p(x) ^ (∃ y) ¬ p(y)
Ş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.
(∀ 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.
Bu kanıtı herhangi bir I yorumlaması için yaptığımızdan, her yorumlama için geçerli
olacaktır.
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.
G=(Q1X1)(Q2X2)…(QnXn)(H1 ^ H2 ^ … ^ Hk)
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
B. Niceleyici-Bağımlı Kurallar
(B1) ¬ ((∀ x)G[x])=(∃ x)(¬ G[x])
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)p(x) → (∃ x)q(x)
(∀ x)p(x) → (∃ x)q(x)
= ¬ (∀ x)p(x) ν (∀ x)q(x)
(∃ x)(p(x) ^ ¬ q(x))
Prenex normal formundaki bir formülde, bütün niceleyicilerin evrensel niceleyici (∀)
olduğu biçime “Skolem standart formu” denir.
Örneğin,
formülü, Skolem standart formundadır. Prenex normal formundaki bir ifadede yer alan
varlık niceleyicileri (∃ ), Skolem kuralları kullanılarak elimine edilirler.
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.
(4)
(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.
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
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.
p(x,f(x,y))
p(x,h(a,b)) ν ¬ q(x)
S={p(a,y,z,f(y,z),ν,g(y,z,v))}
olarak bulunur.
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:
(1) ¬PνQ
(2) P
(3) Q
(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.
(1) PvQ
(2) ¬P ν Q
(3) Pν¬Q
(4) ¬Pν¬Q
(5) Q (1) ve (2)’nin çözümü
(6) ¬Q (3) ve (4)’ün çözümü
(7) Ø (5) ve (6)’nın çözümü
Basit bir örnekle başlayalım. S={p(x) ν q(x),¬ q(x)} yantümce kümesinin mantıksal
sonucunu bulalım:
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:
Örneğin,
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.
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)))
<Prenex Normal Formu>
→ (∀x)(¬e(x)νV(x)νs(x,f(x)))^(¬e(x)νV(x)νc(f(x))))
<Skolem Standart Formu>
→ {¬e(x)νV(x)νs(x,f(x)), ¬e(x)νV(x)νc(f(x)}
<Yantümce Kümesi>
<Yantümce Kümesi>
O → (∀ x)(p(x)→ ¬ ν (x))
→ {¬ p(x)ν ¬ ν (x)}
<Yantümce Kümesi>
→ {¬ p(x)ν ¬ c(x)}
<Yantümce Kümesi>
(3) p(a) N
(4) e(a)
(5) ¬ s(a,y) ν p(y)
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.
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.
II. Adım : Teoremin aksiyomları (A1, A2, …, An) ve sonucu (R) belirlenecek, buna göre
A1^A2^…^An^¬R formülü oluşturulacaktır.
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.
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.
A2 : “xy doğrusu uv doğrusuna paralel ise, xyv açısı uvy açısına eşittir.”
¬ R : ¬ e(a,b,d,c,d,b)
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)
t(a,b,c,d)
¬ e(a,b,d,c,d,b)}
(6) ¬ t(a,b,c,d)
(1) ve (5)’in {a/x, b/y, c/u, d/v} dönüşümü ile çözümü.
II. Adım : Teoremin aksiyomları (A1, A2, …, A9) ve sonucu (R) için
IV. Adım : Standart biçime getirilen G formülünün S yantümce kümesi elde edilecektir.
p(x) : “x Pompeylidir.”
r(x) : “x Romalıdır.”
im(x) : “x imparatordur.”
(2) p(Markus)
(4) im(Sezar)
(8) k(Markus,Sezar)
¬ R : ¬ n(Markus,Sezar)
(1) e(Markus)
(2) p(Markus)
(4) im(Sezar)
(6) (∀ x)s(x,f(x))
(8) k(Markus,Sezar)
¬ R : ¬ n(Markus,Sezar)
(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ü.
(14) ¬ s(Markus,Sezar)
(15) r(Markus)
(17) s(Markus,Sezar)
(10) ve (17)’nin çözümü.
(18) Ø
(14) ve (17)’nin çözümü.
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.
Terimler, atomlar, sayılar, değişkenler ve daha karmaşık nesneler olan yapılar dan
oluşurlar.
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.
[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.
İş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.
babasıdır(mustafa,çetin).
sever(aslı,[hayvan(köpek),hayvan(kedi)]).
gibi.
YÜKLEM
MANTIĞINDA
PROLOG' DA
A1^A2^...^An→ R R :–A1,A2,...,An
dedesidir(X,Z) :- babasıdır(X,Y),
babasıdır(Y,Z).
dedesidir(X,Z) :- babasıdır(X,Y),
annesidir(Y,Z).
Ö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).
nondeterm Dedesidir(symbol,symbol);
nondeterm Babasidir(symbol,symbol);
nondeterm Annesidir(symbol,symbol);
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:
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
goal
Dedesidir(X,hasan).
X=mustafa
1 Solution
şeklinde olacaktır.
İ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.
Ö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.
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.
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).
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);
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).
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).
Dedesidir(aliriza,X).
X=çetin
X=mehtap
şeklinde olacaktır.
Şimdi, farklı sorgulamalar için programdan alacağımız farklı yanıtlar neler olabilir, onları
inceleyelim.
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.
For j:=1 to n
faktöriyel:=faktöriyel×j
Next j
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.
faktöriyel(n)
Else RETURN(n×Faktöriyel(n-1))
End
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ı,
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,
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”, “?”]
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)”
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.
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.
domains
LISTE = integer*
predicates
nondeterm ListeYap(LISTE)
clauses
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.
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
domains
LISTE = integer*
predicates
nondeterm ListeElemanimi(integer,LISTE)
clauses
ListeElemanimi(X,[X|_]).
ListeElemanimi(X,[_|T]) :- ListeElemanimi(X,T).
goal
ListeElemanimi(2,[3,5,2,7,8,9]).
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.
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).
domains
LISTE = symbol*
Predicates
nondeterm ListeBirlestir(LISTE,LISTE,LISTE)
clauses
ListeBirlestir([],L,L).
ListeBirlestir([H|T],L,[H|
ListeBirlestir(T,L,U).
U]) :-
goal
ListeBirlestir([a,b,c,d,e,f],[sw,we,fg,hb,jg],L).
L=["a","b","c","d","e","f","sw","we","fg","hb","jg"]