Otomatın Düzenli İfadeye Dönüştürülmesi
Herhangi bir sonlu otomatı düzenli ifadeye nasıl dönüştüreceğimizi göstereceğiz.
Algoritmanın Anlatımı
Girişte bir A NSO’su var. Önce onu GNSO’ya çeviririz. İkinci aşamada her adımda bir durumu ortadan kaldırır, geçiş fonksiyonunu uygun biçimde değiştirir ve yalnızca iki durum kalana kadar — başlangıç ve kabul durumu — bunu tekrarlarız. Bu ikisi arasında, etiketi düzenli bir ifade olan bir geçiş kalır ve bu ifade algoritmanın sonucudur. Yani işlemin özü, bir durumu ortadan kaldırmak ve ardından otomatı denk kalacak biçimde düzeltmektir.
Bir Durumu Ortadan Kaldırma
Bir durumun nasıl ortadan kaldırılacağını basit bir örnekle gösterebiliriz. Otomatımızın bir kısmının şöyle göründüğünü varsayalım:
burada Ri birer düzenli ifadedir. qr durumunu kaldırırsak otomat nasıl görünür? Şöyle düşünebiliriz: qi durumundayız ve şunu soruyoruz: bu kesimde hangi sözcükleri üretebiliriz? qi durumundan doğrudan qj durumuna gidersek, bunlar R4 düzenli ifadesine uyan tüm sözcükler olur.
Ama qr durumuna gidersek R1 biçimindeki sözcükleri üretebiliriz. qr durumunda ise R2 düzenli ifadesi için döngüde kalabiliriz, yani aslında
Demek ki otomatın bu kısmından R4 biçiminde ya da
Artık qr durumunu kolayca kaldırıp yalnızca qi ve qj durumlarını bırakabiliriz; R4 yerine de az önce hesapladığımız düzenli ifadeyi yazarız:
Bu işlemi, her qi durumundan bir qj durumuna giden her geçişle yaparız; döngüler de dâhildir, yani qi = qj olan durum da.
Bir durumu kaldırdıktan sonra denk bir otomat elde ederiz — yani aynı dili tanıyan bir otomat.
Algoritmanın Tamamı
Girişte bir A = ⟨Q, Σ, δ, q0, F⟩ NSO’su var.
- A NSO’sunu Z = ⟨Q′, Σ, δ′, q0′, qf′⟩ GNSO’suna çeviririz. Bundan sonra Z otomatındaki durum sayısını k harfiyle göstereceğiz.
- k = 2 ise algoritma biter ve başlangıç ile kabul durumu arasındaki geçişin etiketi elde edilen düzenli ifadedir.
- k>2 ise başlangıç ve kabul durumundan farklı herhangi bir qr durumu seçeriz, yani qr ≠ q0′ ve qr ≠ qf′. Sonra aşağıdaki koşulları sağlayan yeni bir Z′ = ⟨Q′′, Σ, δ′′,q0′,qf′⟩ GNSO’su oluştururuz:
ve her qi ∈ Q′′ ∖ {qf′} ile her qj ∈ Q′′ ∖ {q0′} için olsun; burada R1 = δ′(qi,qr), R2 = δ′(qr,qr), R3 = δ′(qr, qj), R4 = δ′(qi, qj). Sonra 2. adımla devam et.
Örnek
Girişte şu sonlu otomat olsun:
Önce onu GNSO’ya çeviririz (gereksiz ∅-geçişlerini çizmeyeceğiz):
Şimdi algoritmanın ikinci kısmını uygulayıp bir düğümü kaldıralım. q2 düğümüyle başlayalım. q2 düğümünü kaldırıp q1 durumundan qf durumuna bir geçiş ekleriz. Bu geçişi b(a|b)∗ ile etiketleriz, çünkü q1 düğümünden q2 durumuna b biçimindeki sözcüklerle gideriz, sonra a|b için döngüde kalabiliriz ve böylece (a|b)∗ elde ederiz; en sonunda ε-geçişiyle qf durumuna geçeriz. Burada b(a|b)∗ϵ = b(a|b)∗ olduğuna dikkat et. Şu otomatı elde ederiz:
Geriye son durumu, yani q1 durumunu kaldırmak kalıyor. qs durumundan qf durumuna bir geçiş ekleriz. Bunu nasıl etiketleriz? q1 durumuna ε-geçişiyle geliriz, onu doğrudan atlayabiliriz. Sonra a için döngüde kalabiliriz, böylece a∗ düzenli ifadesini elde ederiz. En sonunda geçişle qf durumuna ulaşırız, yani ifadeyi b(a|b)∗ ile birleştiririz. Böylece geçişi a∗ b(a|b)∗ düzenli ifadesiyle etiketleriz.
Otomatın artık yalnızca iki durumu var, yani algoritma biter. Geçişin üzerindeki ifade elde edilen düzenli ifadedir.
Kaynaklar
- Örnek ve algoritmanın anlatımı M. Sipser: Introduction to the Theory of Computation kitabından alınmıştır
Bölümler: Düzenli İfadeler, Düzenli İfadenin Otomata Dönüştürülmesi, Genelleştirilmiş Deterministik Olmayan Sonlu Otomat, Otomatın Düzenli İfadeye Dönüştürülmesi