Cahit Arf Matematik Günleri XIII 2. Aşama Sınavı 21 Şubat 2015 Süre: 8 saat X bir küme, S, K X birer eleman ve : X X X bir ikili işlem olsun. Eğer her a, b, c X için (K a) b = a ve ((S a) b) c = (a c) (b c) eşitlikleri sağlanıyorsa (X, K, S, ) yapısına bir Schönfinkel cebiri diyeceğiz. Yazım kolaylığı için a b yerine basitçe ab yazacağız ve işlem önceliğini sola vereceğiz. Yani abc ifadesi (ab)c anlamına gelecek. Bu konvansiyonlar altında K ve S nin sağlamasını istediğimiz eşitlikleri Kab = a ve Sabc = ac(bc) şeklinde ifade edebiliriz. Bütün sınav boyunca bir Schönfinkel cebiri içinde çalışacağız ve bu cebirin elemanlarına bilgisayar programı ya da kısaca program diyeceğiz. Her soruyu, çözmemiş bile olsanız, sonraki sorularda kullanabilirsiniz. 1. Şu koşulları her a, b, c, d X için sağlayan programların varlığını kanıtlayın: (a) Ia = a, (b) Babc = a(bc), (c) Babcd = a(bcd), (d) Cabc = acb, (e) Qab = ba, (f) Vabc = cab. Çözümler: I = SKK alaım. Bu durumda herhangi bir a için Ia = SKKa = Ka(Ka) = a elde ederiz. Benzer şekilde I = SKS de alabilirdik. Eğer B = S(KS)K, B = BBB, C = S(BBS)(KK), Q = CI ve V = BCQ alırsak diğer eşitlikler de sağlanır. Rutin olan kontrolleri okura bırakıyoruz. 2. doğru = K ve yanlış = KI tanımlarını yapalım. Okuma kolaylığı için abc yerine eğer a ise b değilse c yazacağız. Her b, c X için geçerli olan şu eşitlikleri kanıtlayın: eğer doğru ise b değilse c = b eğer yanlış ise b değilse c = c 1
Çözüm: Direkt tanımlardan ve elde ediyoruz. eğer doğru ise b değilse c = doğru bc = Kbc = b eğer yanlış ise b değilse c = yanlış bc = KIbc = Ic = c 3. Bundan sonra Vab yerine [a, b] yazacağız. Şu eşitlikleri sağlayan P 1 ve P 2 programlarının varlığını kanıtlayın: [a, b]p 1 = a ve [a, b]p 2 = b. Çözüm: Kolayca görüldüğü üzere P 1 = doğru ve P 2 = yanlış alırsak istediğimiz eşitlikler sağlanıyor. 4. Şu eşitlikleri sağlayan bir programın varlığını kanıtlayın: değil doğru = yanlış, değil yanlış = doğru Çözüm: Elimizdeki [yanlış, doğru] doğru = yanlış ve [yanlış, doğru] yanlış = doğru eşitlikleri değil = [yanlış, doğru] tanımının işe yarayacağını söylüyor. 5. Tümevarımla her n doğal sayısı için şu tanımı yapalım: 0 = I, n + 1 = [ yanlış, n ]. 6. Her n doğal sayısı için şu koşulları sağlayan programların varlığını kanıtlayın: (a) ardıl n = n + 1, (b) öncül n + 1 = n, (c) sıfır? 0 = doğru, (d) sıfır? n + 1 = yanlış. Çözümler: Eğer ardıl = V yanlış, öncül = QP 2 ve sıfır? = Q doğru alırsak istediğimiz eşitlikler sağlanıyor. İçinde n geçen öyle bir F programı yazın ki eğer n < 2 ise F = 1, eğer n = 2 ise F = 0 ve eğer n > 2 ise F = n + 3 eşitlikleri sağlansın. Çözüm: Kolayca görüldüğü üzere şu program işe yarıyor: eğer sıfır? n ise 1 değilse ( eğer sıfır? (öncül n ) ise 1 değilse ( eğer sıfır? (öncül (öncül n )) ise 0 değilse ( ardıl (ardıl (ardıl n ))))) 2
7. Şu koşulları her a, b, f X için sağlayan programların varlığını kanıtlayın: (a) Ωa = aa, (b) Aab = b(aab), (c) sabit f = f(sabit f). Çözümler: Eğer Ω = SII, A = B(SI)Ω ve sabit = AA alırsak istediğimiz eşitlikler sağlanıyor. 8. Her x ve her f programı için F f x = eğer sıfır? x ise doğru değilse değil (f (öncül x)) eşitliğini sağlayan bir F programının varlığını kanıtlayın. Çözüm: Önce F nin sağlaması gereken eşitliği eğer ise değilse olmadan ve ekstra parantezlerle yazalım: F f x = ((sıfır? x) doğru )(değil (f (öncül x))). İlk önce F x = ((sıfır? x) doğru ) ve G f x = (değil (f (öncül x))) koşullarını sağlayan birer F ve G programı olduğunu göstereceğiz. F ile başlayalım. Her ne kadar F x ifadesi x in bir fonksiyonu gibi görünse de aslında sıfır? ve doğru programlarına da bağlı. Bunu açıkça ifade edersek aradığımız F 0 sıfır? doğru x = (sıfır? x) doğru eşitliğini sağlayan bir F 0 programı. Ama bu koşulu sağlayan bir program zaten biliyoruz: C. Yani alabiliriz. Benzer şekilde F = F 0 sıfır? doğru = C sıfır? doğru G 0 değil öncül f x = değil (f (öncül x)) eşitliğini sağlayan bir G 0 bulursak G = G 0 değil öncül tanımını yapabiliriz. Şimdi G 0 dan ne beklediğimizi yazalım: G 0 abcd = a(c(bd)). Yani G 0, önce b ve c nin yerini değiştiriyor, sonra da işlem önceliğini sağa veriyor. Bunlardan ilkini yapan bir program zaten biliyoruz: C abcd = acbd. İkincisi ise kolayca görüldüğü üzere B(BB)B tafaından yapılıyor: B(BB)B abcd = a(b(cd)). 3
Şimdi bu ikisini birleştirecek bir programa ihtiyacımız var. Gene kolayca görüldüğü üzere B B Bfgabcd = f(gabcd). Yani alabliriz. Son olarak G 0 = B B B(B(BB)B)C U 0 F G f x = (F x)(g f x) eşitliğini sağlayan bir U 0 bulup U = U 0 F G olarak tanımladıktan sonra F = U diyebiliriz. Detayları okura bırakıyoruz. 9. Verilen bir sayının çift mi yoksa tek mi olduğunu anlayan bir program yazın. Yani her m doğal sayısı için çift? 2m = doğru ve çift? 2m + 1 = yanlış koşullarını sağlayan bir program yazın. Çözüm: Önceki sorudaki F programını kullanark şu tanımı yapalım: çift? = sabit F. Bu tanımın işe yaradığını n üzerine tümevarımla kanıtlayacağız. Eğer n = 0 ise çift? 0 = sabit F 0 = F(sabit F) 0 = eğer sıfır? 0 ise doğru değilse... = eğer doğru ise doğru değilse... = doğru eşitlikleri sağlanıyor. Şimdi istediğimiz eşitliğin n için sağlandığını varsayıp n + 1 için sağlandığını kanıtlayacağız: çift? n + 1 = sabit F n + 1 = F(sabit F) n + 1 = eğer sıfır? n + 1 ise doğru değilse değil ((sabit F) (öncül n )) = eğer yanlış ise doğru değilse değil ((sabit F) (öncül n + 1 )) = değil ((sabit F) (öncül n + 1 )) = değil ((sabit F) n ) = değil (çift? n ) İki olasılık var. Eğer n çiftse, tümevarım varsayımından çift? n = doğru ve dolayısıyla yukarıdaki eşitlikten çift? n + 1 = yanlış. Eğer n tek ise aynı şekilde çift? n + 1 = yanlış olacağını görmek de kolay. 10. Toplama yapan bir program yazın. Yani her m, n doğal sayısı için toplam m n = m + n 4
eşitliğini sağlayan bir program yazın. Çözüm: Bu problem önceki probleme çok benziyor. Tek fark yukarıdaki F fonksiyonuna burada neyin denk geleceğini kestirmenin biraz daha zor olması çünkü toplama iki değişkenli bir fonksiyon. Bu yüzden iki değişkeni bir den alıp toplam m n ifadesini tanımlamak yerine şimdilik ikinci değişkeni unutup toplam m ifadesini tanımlayacağız. Burada tanımladığımızın bir doğal sayı (daha doğrusu bir doğal sayı kodu) yerine bir doğal sayı alıp gene bir doğal sayı üreten bir fonksiyonun kodu olduğuna okurun dikkatini çekelim. Eğer m = 0 ise toplam m ifadesi birim fonksiyonu vermeli. Yani toplam 0 = I. Diğer yandan bir sayıyı m + 1 ile toplamak onu önce m ile toplamak sonra da 1 eklemek demek. Yani sağlanmalı çünkü Sonuç olarak eğer F f m = toplam m + 1 = B ardıl toplam m toplam m + 1 n = ardıl (toplam m n ) eğer sıfır? m ise I değilse B ardıl f (öncül m ) tanımını yaparsak toplam = sabit F programı istediğimiz eşitliği sağlar. Detayları okura bırakıyoruz. 11. Matematikten sevdiğiniz bir fonksiyon seçin ve seçtiğiniz fonksiyonu hesaplayan bir program yazın. Mesela çarpma yapan, faktöriyel veya OKEK hesaplayan, Fibonacci dizisnin istenen bir terimini bulan, bir doğal sayının asal olup olmadığını anlayan ya da iki sayıdan büyüğünü seçen bir program yazabilirsiniz. Aslında yeterince vakit verildiğinde geleneksel bir bilgisayarın hesaplayabildiği herhangi bir fonksiyon için bir program yazabilirsiniz. 5