Ne yazık ki, burada çok fazla şey oluyor. Yani, işleri karıştırmak kolaydır. "Tam tamlık" ve "tam soyutlama" da "tam" kullanımı, tamamen farklı dolgunluk fikirlerini ifade eder. Ancak, aralarında bazı belirsiz bağlantılar da vardır. Yani, bu karmaşık bir cevap olacak.
Tam bütünlük : "Ses ve tam", geleneksel mantığın anlambilimine sahip olmasını istediğiniz bir özelliktir. Sağlamlık, mantıkta kanıtlayabileceğiniz her şeyin semantik modelde doğru olduğu anlamına gelir. Tamlık, anlamsal modelde doğru olan her şeyin mantıkta kanıtlanabilir olduğu anlamına gelir. Belirli bir anlamsal model için mantığın sağlam ve eksiksiz olduğunu söylüyoruz . Yapıcı mantığa geldiğimizdeMartin-Lof tipi teori veya doğrusal mantık gibi, sadece formüllerin kanıtlanabilir olup olmadığını değil, aynı zamanda kanıtlarının ne olduğunu da önemsiyoruz. Kanıtlanabilir bir formülün birçok kanıtı olabilir ve yapıcı bir mantık onları birbirinden uzak tutmak ister. Dolayısıyla, yapıcı bir mantık için bir anlambilim, yalnızca bir formülün doğru olup olmadığını belirtmekle kalmaz, aynı zamanda gerçeği için "kanıt" ("kanıt") gibi soyut bir anlam anlamını da içerir. Abramsky ve meslektaşları mantığın ispatlarının modeldeki tüm anlamsal ispatları ifade edebileceği anlamına gelen "tam bütünlük" terimini kullandılar. Yani, "tam" burada kanıtları ifade eder. "Tam" bir mantık, ihtiyaç duyduğu her şeyi kanıtlayabilir. "Tamamen tamamlanmış" bir mantık, sahip olması gereken tüm ispatlara sahiptir. Yani "tam bütünlük", "yapıcı bütünlük" veya "kanıt bütünlüğü" anlamına gelir. Bunun tam soyutlama ile ilgisi yoktur.
Tam soyutlama : "Yeterli ve tamamen soyut" bir programlama dilinin anlamsal modeli için istediğiniz bir özelliktir . (İlk farka dikkat edin: şimdi semantik modelin özellikleri ile ilgileniyoruz, dilin özellikleri değil!) Yeterlilik, anlamsal modelde her iki terimin aynı anlamı olduğunda, programlama dilinde gözlemsel olarak eşdeğer oldukları anlamına gelir (bazı yürütme kavramlarına göre). Tam soyutlama, iki terim gözlemsel olarak eşdeğerse, anlamsal modelde aynı anlama sahip oldukları anlamına gelir. Bu fikirler sağlamlık ve bütünlük ile ilgili olabilir, ancak bir şekilde çelişkili bir şekilde. Bir programlama dilinin semantik modelini gözlemsel denklik hakkında konuşmak için bir "mantık" veya "kanıt yöntemi" olarak düşünürsek, yeterlilik bu kanıt yönteminin sağlam olduğu anlamına gelir; tam soyutlama, bu ispat yönteminin tamamlandığı anlamına gelir. "Tam bütünlük" nosyonu yoktur.kanıt yöntemi. (Ancak, böyle bir şey teorik olarak mümkündür ve bu günlerden biri bunu yapabilir.)
Sizin durumunuzda, anlamsal modeller yerine çevirilerle ilgileniyorsunuz . Yeterlilik ve tam soyutlamanın özellikleri çevirilerle başa çıkmak için aşağıdaki gibi genişletilebilir. Hedef dili "semantik modeliniz", yani bir şekilde tam olarak anladığınız bir biçimcilik olarak düşünüyorsunuz. Eğer öyleyse, bunun için bir denklik fikriniz var. Ardından, iki kaynak programın çevirileri hedef dilde eşdeğer olduğunda, kaynak dilde gözlemsel olarak eşdeğerlerse çevirinin yeterli olduğunu söyleriz . Her iki kaynak programın kaynak dilde gözlemsel olarak eşdeğer olduğunda, çevirilerinin hedef dilde eşdeğer olması tamamen soyuttur .
Gerçekte, gerçekten tam olarak "anladığımız" herhangi bir hedef dil bilmiyorum. Tek bildiğimiz, hedef dil için gözlemsel eşdeğerlikle ilgili başka bir kavram. Bu durumda, çevirilerin hedef dildeki gözlemsel denkliği, kaynak dilde gözlemsel eşdeğerlik içeriyorsa çeviri yeterlidir.
Kaynak dilde terimlerin gözlemsel denkliği, hedef dildeki çevirilerin gözlemsel eşdeğerliğini çeviri tamamen soyuttur.
Bazı yazarlar bu iki özelliğin birleşimini ifade etmek için "tamamen soyut çeviri" alırlar:
τ( M) ≅τ( N) ⟹ M≅N-
M≅N-⟹ τ( M) ≅τ( N)
M≅N-⟺τ( M) ≅τ( N)
Egger ve diğerleri benzer şekilde tam bütünlük fikrini çevirilere genişletiyor gibi görünmektedir. Kurulumlarında formüller türlerdir ve kanıtlar terimlerdir. Çevirileri, terimlerin yanı sıra türleri de çevirir. Onlar kendi çeviri olarak adlandırabileceğimiz Tamamlanmayan bir tür tercümesi ise tipi orijinal terimleri çevirerek elde edilir sadece bu terimleri vardır .
birbir
∀ N: τ( A ) .∃ M: Bir .τ( M) = N
Şimdi tam bütünlük ve tam soyutlama arasındaki belirsiz bağlantı için . Anlamsal bir modelin veya çevirinin tamamen soyut olduğunu kanıtlamak çoğu zaman tanımlanabilirlik içerir. Çünkü dillerimiz genellikle daha üst düzeydir. Yani, semantik model veya hedef dilde çok fazla "bağlam" varsa, terimlerimizi veya semantik anlamlarımızı istenmeyen şekillerde düzeltebilir ve denkliklerini bozabilir. "İstenmeyen yollar", programlama dilinin kendisinin onları dürtemediği yollar anlamına gelir. Bu nedenle, tam bir soyutlama elde etmek için, anlamsal modelde veya hedef dilde mevcut olan "bağlamların" bir şekilde kaynak dildekilerden geldiğinden emin olmalıyız. Bunun tam eksiksizlik özelliği ile ilgili olduğunu unutmayın.
Neden böyle mülkler istiyoruz? It has bir şeyderleyiciler ile yapmak! Kaynak dilin hedef dile yerleştiğini iddia etmek için bu özellikleri istiyoruz. Belirli bir hedef dilden memnun kalırsak (temiz, anlaşılabilir, bir şekilde temel veya Tanrı'nın verdiği gibi), o zaman kaynak dil içine gömülürse, kaynak dilde yeni bir şey olmadığını iddia edebiliriz. Bildiğimiz ve sevdiğimiz hedef dilin sadece bir parçası. Sadece sözdizimsel şekerdir. Bu nedenle, belirli hedef dillerin mükemmel olduğunu belirlemek için insanlar tarafından tamamen soyut çeviriler verilmektedir. Ayrıca bazen başa çıkmak için büyük veya karmaşık bir dili olan insanlar tarafından verilir. Dolayısıyla, bunun için bir anlambilim tanımlamak yerine, onu bir ana dile çevirir ve daha sonra ana dile anlambilim kazandırırlar. Örneğin, Haskell raporu bunu yapar. Ancak bu çevirilerin tam olarak çıkarılması nadiren kanıtlanmıştır çünkü kaynak diller büyük ve karmaşıktır. İnsanlar çevirinin iyi olduğuna inanıyor.
Bir kez daha bunun derleyicilerle ilgisi yok. Derleyiciler nadiren yeterli veya tamamen soyuttur. Ve olmalarına da gerek yok! Bir derleyicinin tek yapması gereken, tüm programların yürütme davranışını korumaktır. Bir derleyicinin hedef dili genellikle çok büyüktür, bu da denkliği bozabilecek çok sayıda içeriğe sahip olduğu anlamına gelir. Bu nedenle, kaynak dildeki eşdeğer programlar derlendiğinde neredeyse hiçbir zaman bağlamsal olarak eşdeğer değildir.