Matematikte Hayaletler Var
(overreacted.io)- Lean, matematiği biçimsel olarak ifade edebilecek şekilde tasarlanmış bir programlama dilidir; matematikçilerin matematiksel teoremleri kod gibi ele almasını sağlar
- Kullanıcılar teorem, kanıt, aksiyom gibi öğeleri kod biçiminde yazar; kanıt süreci, tactic adlı bir komut kümesiyle ilerler
- Kanıt gerçekten tamamlanmamış olsa bile
sorryile geçici olarak kapatılabilir, ancak bu TypeScript’tekianyile benzer bir sahte kanıttır - Yanlış bir aksiyom eklenirse (ör.
2 = 3), mantıksal çelişki ve her önermeyi kanıtlayabilme riski doğar - Lean yalnızca mantıksal olarak seçilen aksiyomlar ve kanıt sistemleri üzerinde sonuç ürettiğinden, matematiksel geçerliliği korumak büyük önem taşır
Lean: Matematiği Kodla İşlemek
- Lean, biçimsel matematiği yazmaya odaklanmış bir programlama dilidir
- Matematikçiler, Lean ile matematiği kod olarak ifade eder, teorem ve kanıtlarını yapısal hale getirerek iş birliği ve paylaşım sağlar
- İnsanoğlunun önemli bir matematik bilgisinin gelecekte kod biçiminde makine ile doğrulanabilir ve birleştirilebilir hâle geleceği bir geleceğe işaret eder
Lean’de Kanıtlamanın İlk Adımı
theorem two_eq_two : 2 = 2 := by sorrybiçiminde Lean’de basit bir teorem bildirimi yapılabilir- Kanıt eksik olduğunda
sorryeklenebilir, ancak bu sadece bir geçici çözümdür ve gerçek bir kanıt değildirsorry, Lean’in kanıt doğrulamasını geçmesine olanak sağlar, fakat mantıksal açıdan güvenilir değildir
- Tam bir kanıt için
rfl(reflexivity) gibi bir tactic kullanılarak,2 = 2gibi apaçık eşitlikler kanıtlanır - Önceden ispatlanmış içerikler,
exactgibi komutlarla diğer teoremlerde yeniden kullanılabilir; bu da modülerliği vurgular
Aksiyom ve Çelişki: Matematikte Hayalet Görünüm
axiom math_is_haunted : 2 = 3gibi bir aksiyom eklenirse Lean bunu doğru sayar- Bu aksiyom kanıt sürecinde kullanılabilir; böylece matematiksel olarak anlamsız görünen sonuçlar (ör.
2 + 2 = 6) bile kanıtlanabilir hale gelir rewritetaktiğiyle2yi3e dönüştürüprflile eşitlik kanıtlama adımı tamamlanabilir- Yanlış aksiyomlardan doğan çelişki durumunda Lean’de de her önermenin kanıtlanabildiği bir durum (mantıksal çöküş) ortaya çıkar
- Nitekim 20. yüzyıl başındaki Russell paradoksu gibi aksiyomatik sistem içi çelişkiler, matematiğin temel sorgulamasına yol açmıştı
- Lean bu şekilde aksiyom seçiminin, bir mantık sisteminin geçerliliğini korumada belirleyici rol oynadığını açıkça gösterir
Kanıt Denetleyicisi (Proof Checker) Olarak Lean
- Aksiyomlar doğru seçilip Lean mantıksal olarak tutarlıysa, teorik olarak güvenilir sonuçlar üretilir
- Basit bir eşitlikten
Fermat’ın Son Teoremigibi çok karmaşık teoremlere kadar hepsi aynı ilkeyle doğrulanır - Büyük teoremler, alt yapılar ve teoremlerin tekrar edilen kanıtlarıyla tamamen bir ağaç gibi inşa edilir
- Örnek olarak, Fermat's Last Theorem’in Lean’de biçimselleştirildiği büyük bir proje sürmektedir; sonuçta
sorryiçermeyen son derece resmi bir kanıt sisteminin tamamlanması beklenmektedir
Lean’i Öğrenmenin Zevki
- Lean ile kanıt yapmak, kodlama ile matematiğin yaratıcı birleşimidir
- Başta basit bir önerme ispatlamayla başlayan süreç, zamanla giderek daha karmaşık ve derin matematiği katı kurallarla inşa etmenin keyifli bir yolculuğu olur
- Resmi dersler ve topluluk kaynakları (ör. Natural Numbers Game, Mathematics in Lean gibi) giriş için uygundur
- Lean’i kullanarak mantığı doğrudan biçimlendirdiğinizde, keskin fikirlerin ve mantıksal argümanların estetiğini yeniden keşfedebilirsiniz
- Nedensiz gibi dursa da, belirli bir kesim için Lean’in özel bir eğlence kaynağı olduğu sonucuna varılır
1 yorum
Hacker News görüşleri
two_eq_twoteoreminin bir fonksiyon gibi göründüğünü söylemek tuhaf; argümanı olmadığı için daha çok sabite benziyor (tabii sabitin de argümansız fonksiyon olduğunu biliyorum). Aşağıdaki gibix_eq_xkullanıp bunu2_eq_2içinde fonksiyon gibi uygulamak daha ikna edici olurdu Buradax_eq_xfonksiyon gibi görünüyor ve2_eq_2içinde de gerçekten öyle kullanılıyor.xverincex = xkanıtı döndürmesi) bana biraz yabancı gelmesi ve ayrı ele alınması gereken bir konu olması. Bir sonraki yazıda değineceğim.rflgibi tactic’lerin aşırı kapsayıcı olması ve eğitim materyallerinden bile tam olarak ne anlama geldiklerini çıkarmanın zor olması. Örneğin C dilinde bit düzeyine kadar durum değişimini izleyebilirsiniz ama Lean’de bir şeyler daha belirsiz geliyor. Bir derewrite (rw)tactic sözdizimi doğal hissettirmiyor.rewrite, açıklaması zor nedenlerle çalışmıyordu (muhtemelen aradaki yapı tanımları yüzünden). Buna karşılık Metamath veset.mmveritabanı hiç tactic kullanmadan, tamamen somut çıkarımlarla kanıt yapmanızı istiyor (ax-mpgibi çıkarım kurallarıyla). Ama bu sefer de işe yarar yardımcı lemmaları ezberlemek gerektiğinden kolay olmuyor.rewritesözdiziminin doğal olmadığını söylemişsiniz; peki size doğal gelen birrewritesözdizimi nasıl olurdu, merak ettim.rflya darewriteı her seferinde sizin yazmanız gerekiyor. Belki bunu otomatik yapan bir prelude benzeri sürüm vardır.rw [x]komutlarının sıralanışı gibi görünüyor ve okumak çok zor oluyor. Editörde her satırın durumuna bakabiliyorum ama sürekli tıklamak akışı bozuyor. Python’da da girinti olmasa ve akışı görmek için blok yapısına tıklamak gerekse aynı sorun olurdu. Benim deneyimim oyunun başındaki sınırlı komutlardan kaynaklanıyor olabilir ama gerçek, tam Lean ortamında bu akış daha iyi mi diye merak ediyorum.by ...ile tactic kısaltması kullanılıyor. Lean’de de benzeri var mı bilmiyorum ama en azından arama anahtar sözcüğü ya da Lean forumunda soru başlatmak için iyi bir referans olabilir.introgörünce niceleyiciye girildiğini,constructorgörünce goal’un bölündüğünü vb. ayırt etmeye başlıyorsunuz. Sonuçta tactic’ler kanıt ağacını (term tree) üreten makro/DSL’ler gibi. Ben proof koduna bakarken bunu ağaç üzerinde işlem yapmak gibi hissediyorum; parçaları bölmek, sıraları doldurmak vb. Yine de proof kodunun ortasındaki bir assertion’ın tam ne dediğini anlamak için hâlâ tıklamak gerekebiliyor. İyi fikir taşıyan kanıtlar, bir makalenin mantık akışı gibi net okunabiliyor. Bu yüzden niyetini aktarmak isteyen biri, okunaklı isimler, açık akış, küçük lemma’lara ayırma ve önce varsayımları yazıp sonra kısa proof kodlarıyla çözme yolunu seçiyor. Buna karşılık makine açısından zahmetli ama matematikçi için bariz olan kısımlar bazen “golfing” ile çok kısa yazılıyor. Golf tarzı, kodu kısaltırken genellikle insanın sezgisel olarak bildiği kısımları varsayıyor. Özetle, Lean’de okunan yapı örtük ama daha açık hale getirmenin yolları var; tactic’lerde ustalaştıkça tıklamadan da yapıyı daha iyi görmeye başlıyorsunuz. Sadece lemma adlarına bakarak bile genel akış anlaşılabiliyor ve sıra kolayca yeniden kurulabiliyor.Lean topluluğu büyük ölçüde Zulip’te toplanıyor; Machine-Learning-for-Theorem-Proving kanalı içinde pek çok yararlı başlık bulabilirsiniz.
sorrykısımlarını kendim doldurarak ilerliyorum (çözümlerim burada).sorryiçeren) kanıtların ya da ek aksiyomların kullanılmasını otomatik olarak engelleyen bir doğrulama modu var mı diye merak ediyorum. Örneğin, “bu proof hiçbir şekildesorrykullanmıyor” ya da “sabit bir aksiyom kümesinin kanıtlama gücüne dayanıyor” gibi şeyler doğrulanabiliyor mu?#print axioms some_theorembunun örneği sayılmaz mı? Bununla, söz konusu kanıtın doğrudan ya da dolaylı olaraksorryye veya gözden geçirilmemiş aksiyomlara dayanıp dayanmadığını görebilirsiniz.print axiomsile eklenmiş aksiyom olup olmadığını kontrol edebilirsiniz. Ayrıca warning ya da error olmadan derlenip derlenmediğine de bakabilirsiniz. SafeVerify yardımcı aracı, RL sistemlerinin keşfettiği bazı hileleri de yakalıyor.