Yapay Zeka (60 Sayfa)

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 56

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) p(1,2) p(2,1) p(2,2)


T F F 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 f(1) f(2) p(1) p(2)


2 1 F T
1

q(1,1) q(1,2) q(2,1) q(2,2)


T T F 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) 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ü

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)))
<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>

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)))


<Prenex Normal Formu>

→ (∀ y)(p(a)^ e(a) ^ (¬ s(a,y) ν p(y)))


<Skolem Standart Formu>

→ {p(a), e(a), ¬s(a,y)vp(y)}

<Yantümce Kümesi>

3.2.9.13 Çözümleme İlkesi ve Sonuç Çıkarmada


Kullanılması

O → (∀ x)(p(x)→ ¬ ν (x))

→ (∀ x)(¬ p(x) ν ¬ ν (x))


<Skolem Standart Formu>

→ {¬ p(x)ν ¬ ν (x)}

<Yantümce Kümesi>

3.2.9.14 Çözümleme İlkesi ve Sonuç Çıkarmada


Kullanılması
¬G → ¬ (∃ x)(p(x) ^ c(x))

→ (∀ x)(¬ p(x) ν ¬ c(x))


<Skolem Standart Formu>

→ {¬ p(x)ν ¬ c(x)}
<Yantümce Kümesi>

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)) M


(2) ¬e(x) ν V(x) ν c(f(x)

(3) p(a) N
(4) e(a)
(5) ¬ s(a,y) ν p(y)

(6) ¬ p(x) ν ¬ ν (x) O

(7) ¬ p(x) ν ¬ c(x) ¬G

(8) ¬ ν (a) (3) ve (6) ’nın {a/x} dönüşümü ile çözümü.


(9) ν (a) ν c(f(a)) (2) ve (4) ’ün {a/x} dönüşümü ile çözümü.
(10) c(f(a)) (8) ve (9) ’un çözümü.
(11) v(a)vs(a,f(a)) (1) ve (4) ’ün {a/x} dönüşümü ile çözümü.
(12) s(a,f(a)) (8) ve (11) ’in çözümü.
(13) p(f(a)) (5) ve (12) ’nin {f(a)/y} dönüşümü ile çözümü.
(14) ¬ c(f(a)) (7) ve (13) ’ün {f(a)/x} dönüşümü ile çözümü.
(15) Ø (10) ve (14) ’ün çözümü.

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) Mehtap’ın dayısı kimdir? X=nihat
Teyzesidir(X,çetin) Çetin’in teyzesi kimdir? 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]) :- ListeElemanimi(X,T).
goal
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|
ListeBirlestir(T,L,U).
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"]

You might also like