Birleştirme (bilgisayar bilimi) - Unification (computer science)

Gelen mantık ve bilgisayar bilimleri , birleşme algoritmik bir süreçtir denklemleri çözme sembolik arasındaki ifadeler .

Bir denklem setinde ( birleştirme problemi de denir) hangi ifadelerin ( terimler olarak da adlandırılır ) olmasına izin verildiğine ve hangi ifadelerin eşit olarak kabul edildiğine bağlı olarak, birkaç birleştirme çerçevesi ayırt edilir. Bir ifadede yüksek dereceli değişkenlere, yani işlevleri temsil eden değişkenlere izin verilirse, sürece yüksek dereceli birleştirme , aksi takdirde birinci derece birleştirme denir . Her denklemin her iki tarafını tam anlamıyla eşit yapmak için bir çözüm gerekiyorsa, sürece sözdizimsel veya serbest birleştirme denir , aksi takdirde anlamsal veya denklemsel birleştirme veya E-birleştirme denir.veya birleştirme modulo teorisi .

Bir birleştirme probleminin çözümü , ikame olarak belirtilir , yani problemin ifadelerinin her bir değişkenine sembolik bir değer atanan bir eşleme. Bir birleştirme algoritması, belirli bir problem için eksiksiz ve minimum ikame kümesi, yani tüm çözümlerini kapsayan ve fazla üye içermeyen bir küme hesaplamalıdır . Çerçeveye bağlı olarak, tam ve minimal bir ikame kümesi en fazla bir, en fazla sonlu sayıda veya muhtemelen sonsuz sayıda üyeye sahip olabilir veya hiç var olmayabilir. Bazı çerçevelerde herhangi bir çözümün var olup olmadığına karar vermek genellikle imkansızdır. Birinci mertebeden sözdizimsel birleşim için, Martelli ve Montanari, çözülemezliği bildiren veya en genel birleştirici olarak adlandırılanı içeren eksiksiz ve minimum bir tekil ikame kümesini hesaplayan bir algoritma verdiler .

Örneğin, x , y , z değişkenleri olarak kullanıldığında, { cons ( x , cons ( x , nil )) = cons (2, y ) } singleton denklem seti , { x ikamesine sahip sözdizimsel birinci dereceden bir birleştirme problemidir. ↦ 2, yeksileri (2, nil ) } tek çözüm olarak. Sözdizimsel birinci dereceden birleştirme probleminin { y = eksiler (2, y ) } sonlu terimler kümesi üzerinde çözümü yoktur ; ancak sonsuz ağaç kümesi üzerinde { yeksileri (2, eksileri (2, eksileri (2,...))) } tek çözümü vardır . Semantik birinci dereceden birleşme sorunu { birx = xbir } formun her ikamesine sahiptir { xbir ⋅ ... ⋅ bir } a içinde bir çözelti olarak yarıgrubu yani eğer (⋅) olarak kabul edilir birleştirici ; Aynı problem, (⋅)'nin de değişmeli olarak kabul edildiği bir değişmeli grupta bakıldığında, çözüm olarak herhangi bir ikamesi vardır. { a = y ( x ) } singleton kümesi , y bir fonksiyon değişkeni olduğundan , sözdizimsel ikinci dereceden bir birleştirme problemidir . Çözümlerden biri { xa , y ↦ ( kimlik fonksiyonu ) }; diğeri ise { y ↦ ( her değeri a ile eşleyen sabit fonksiyon ), x(herhangi bir değer) }'dir.

Bir birleştirme algoritması ilk olarak Jacques Herbrand tarafından keşfedildi , ilk resmi araştırma ise birinci dereceden sözdizimsel birleştirmeyi birinci dereceden mantık için çözümleme prosedürünün temel bir yapı taşı olarak kullanan John Alan Robinson'a atfedilebilir . bir kombinatoryal patlama kaynağını ortadan kaldırdığı için otomatik akıl yürütme teknolojisi: terimlerin somutlaştırılmasını aramak. Günümüzde otomatik akıl yürütme, birleştirmenin ana uygulama alanı olmaya devam etmektedir. Sözdizimsel birinci dereceden birleştirme, mantık programlama ve programlama dili tipi sistem uygulamasında, özellikle Hindley-Milner tabanlı tür çıkarım algoritmalarında kullanılır. Semantik birleştirme, SMT çözücülerde , terim yeniden yazma algoritmalarında ve kriptografik protokol analizinde kullanılır. Yüksek mertebeden birleştirme, örneğin Isabelle ve Twelf gibi ispat yardımcılarında kullanılır ve yüksek mertebeden örüntüler ifade edici olduğundan , lambdaProlog gibi bazı programlama dili uygulamalarında yüksek mertebeden birleştirmenin kısıtlı biçimleri ( yüksek mertebeden örüntü birleştirme ) kullanılır. , yine de ilgili birleştirme prosedürü, birinci dereceden birleştirmeye daha yakın teorik özellikleri korur.

Ortak resmi tanımlar

Önkoşullar

Resmi olarak, bir birleştirme yaklaşımı,

  • Sonsuz seti ait değişkenler . Daha yüksek dereceli birleştirme için, lambda terimine bağlı değişkenler kümesinden ayrık olanı seçmek uygundur .
  • Bir dizi ait açısından öyle ki . Birinci dereceden birleştirme ve yüksek dereceden birleştirme için, genellikle birinci dereceden terimler (değişken ve fonksiyon sembollerinden oluşturulan terimler ) ve lambda terimleri (bazı yüksek dereceli değişkenleri içeren terimler ) kümesidir .
  • Bir eşleme değişkendir : her terime içinde meydana gelen serbest değişkenler kümesini atar .
  • Bir eşdeğerlik ilişkisi ile ilgili şartlar eşit olarak kabul edilir, işaret etmektedir. Daha yüksek dereceli birleştirme için, genellikle if ve are alfa eşdeğeri . Birinci dereceden E-birleştirme için, belirli fonksiyon sembolleri hakkında arka plan bilgisini yansıtır; örneğin, değişmeli olarak kabul edilirse , bazı (muhtemelen tüm) olayların argümanlarının değiştirilmesinden kaynaklanırsa . Hiç arka plan bilgisi yoksa, o zaman sadece kelimenin tam anlamıyla veya sözdizimsel olarak aynı terimler eşit kabul edilir; bu durumda, ≡, serbest teori (çünkü bu serbest bir nesnedir ), boş teori (çünkü denklem cümleleri kümesi veya arka plan bilgisi boştur), yorumlanmamış fonksiyonlar teorisi (çünkü birleştirme yorumlanmamış terimler ) veya yapıcılar teorisi (çünkü tüm işlev sembolleri, üzerinde çalışmak yerine yalnızca veri terimleri oluşturur).

Birinci dereceden terim

Verilen bir dizi bir dizi değişken sembollerin, sabit semboller ve setleri arasında , n her bir doğal sayı -ary fonksiyon sembolleri olarak da adlandırılan operatör semboller, (ayrıştırılmamış birinci dereceden) terimler grubu olduğu ardışık tanımlandığı ile en az grubu olduğu aşağıdaki özellikler:

  • her değişken sembolü bir terimdir: ,
  • her sabit sembol bir terimdir: ,
  • her n terimden ve her n -ary işlev sembolünden daha büyük bir terim oluşturulabilir.

Örneğin, if bir değişken sembolüdür, sabit bir semboldür ve bir ikili fonksiyon sembolüdür , sırasıyla birinci, ikinci ve üçüncü terim oluşturma kuralına göre sırasıyla , ve (dolayısıyla) . İkinci terim genellikle , kolaylık sağlamak için ek notasyonu ve daha yaygın operatör sembolü + kullanılarak olarak yazılır .

Daha yüksek dereceli terim

ikame

Bir ikame , değişkenlerden terimlere bir eşlemedir ; gösterim , her değişkeni , for terimiyle ve diğer tüm değişkenleri de kendisine eşleyen bir ikameyi ifade eder . Uygulanması bir dönem için bu ikame yazılır sonek gösterimde olarak ; Bu (aynı anda) her bir değişkenin, her geçtiği yerde değiştirmek anlamına gelir vadede göre . Bir terime bir ikame uygulanmasının sonucuna o terimin bir örneği denir . Birinci dereceden bir örnek olarak, terime { xh ( a , y ), zb } ikamesinin uygulanması

verim  

Genelleme, uzmanlaşma

Bir terim Eğer bir dönem için bir örnek eşdeğer olan ise, olduğu, bir ikame için , daha sonra adı daha genel fazla ve denir daha özel fazla ya da sınıflandırılır ile . Örneğin , o zamandan beri ⊕ değişmeli ise daha geneldir .

Eğer ≡ terimlerin değişmez (sözdizimsel) özdeşliğiyse, bir terim diğerinden hem daha genel hem de daha özel olabilir, ancak her iki terim de sözdizimsel yapılarında değil de yalnızca değişken adlarında farklılık gösteriyorsa; bu tür terimlere değişkenler veya birbirlerinin yeniden adlandırmaları denir . Örneğin , bir varyantıdır , çünkü

ve

.

Bununla birlikte, ' nin bir varyantı değildir , çünkü hiçbir ikame ikinci terimi birincisine dönüştüremez. Bu nedenle ikinci terim, öncekinden daha özeldir.

Keyfi için , bir terim yapısal olarak farklı bir terimden hem daha genel hem de daha özel olabilir. Örneğin, ffi halinde olan İdempotent zaman eğer varsa, daha sonra terimi daha genel rağmen, ve bunun, tam tersi ve farklı bir yapıya sahiptirler.

Bir ikame , her terim için olduğundan daha özel ise , bir ikameden daha özeldir veya ikame tarafından kapsanır . Bunun daha genel olduğunu da söylüyoruz . Örneğin , 'den daha özeldir , ancak ' den daha özel olmadığı için değildir .

Birleştirme sorunu, çözüm kümesi

Bir birleştirme problemi , potansiyel denklemlerin { l 1r 1 , ..., l nr n } sonlu kümesidir , burada l i , r iT . Bir ikame σ a, çözelti bu sorun, eğer L i σ ≡ r i σ için . Böyle bir ikame aynı zamanda birleştirme probleminin birleştiricisi olarak da adlandırılır . Örneğin, ⊕ ise birleştirici , birleşme sorun { xbirbirx } çözümler {sahip Xbir }, { xbirbir }, { xbirbirbir } vs. { xaa } probleminin çözümü yoktur.

Belirli bir birleştirme problemi için, eğer her bir çözüm ikamesi bir ikame σ ∈ S ile toplanıyorsa , bir S birleştiriciler kümesi tam olarak adlandırılır ; Üyelerinden hiçbiri bir diğerini içermiyorsa, S kümesine minimal denir .

Birinci dereceden terimlerin sözdizimsel birleşimi

Bir σ ikamesi ile t 1 ve t 2 terimlerini sözdizimsel olarak birleştiren şematik üçgen diyagramı

Birinci dereceden terimlerin sözdizimsel birleşimi , en yaygın kullanılan birleştirme çerçevesidir. Bu dayanmaktadır T grubu olan birinci sıra açısından (bazı belirli bir resim üzerinde V değişkenler, Cı- sabitler ve F N arasında N -ary fonksiyonu semboller) ve ilgili ≡ olmak sözdizimsel eşitlik . Bu çerçevede, çözülebilir her bir birleştirme problemi { l 1r 1 , ..., l nr n } , eksiksiz ve açıkça minimal, tekil bir çözüm kümesine sahiptir { σ } . Üyesi σ , problemin en genel birleştiricisi ( mgu ) olarak adlandırılır . Her potansiyel denklemin sol ve sağ tarafındaki terimler, mgu uygulandığında sözdizimsel olarak eşit hale gelir, yani l 1 σ = r 1 σ ∧ ... ∧ l n σ = r n σ . Problemin herhangi bir birleştiricisi mgu σ tarafından kapsanır . Mgu, varyantlara kadar benzersizdir: S 1 ve S 2 , aynı sözdizimsel birleştirme probleminin hem tam hem de minimum çözüm kümeleriyse, o zaman bazı ikameler için S 1 = { σ 1 } ve S 2 = { σ 2 } σ 1 ve σ 2 , ve 1 bir varyantı 2 , her bir değişken için x sorun meydana gelen.

Örneğin, { xz , yf ( x ) } birleştirme problemi { xz , yf ( z ) } bir birleştiriciye sahiptir , çünkü

x { xz , yf ( z ) } = z = z { xz , yf ( z ) } , ve
y { xz , yf ( z ) } = f ( z ) = f ( x ) { xz , yf ( z ) } .

Bu aynı zamanda en genel birleştiricidir. Aynı problem için diğer birleştiriciler örneğin { xf ( x 1 ), yf ( f ( x 1 )), zf ( x 1 ) }, { xf ( f ( x 1 )), yf ( f ( f ( x 1 ))), zf ( f ( x 1 )) } ve benzeri; sonsuz sayıda benzer birleştirici vardır.

Başka bir örnek olarak, g ( x , x ) ≐ f ( y ) probleminin , ≡ değişmez özdeşlik olması bakımından hiçbir çözümü yoktur, çünkü sol ve sağ tarafa uygulanan herhangi bir ikame , sırasıyla en dıştaki g ve f'yi tutacaktır ve farklı en dıştaki işlev sembollerine sahip terimler sözdizimsel olarak farklıdır.

Bir birleştirme algoritması

Robinson'ın 1965 birleştirme algoritması

Semboller, değişkenler fonksiyon sembollerinden önce gelecek şekilde sıralanır. Terimler, yazılı uzunluk artırılarak sıralanır; eşit uzunluktaki terimler sözlükbilimsel olarak sıralanır . Bir dizi T terim için, anlaşmazlık yolu p , T'nin iki üye teriminin farklı olduğu sözlükbilimsel olarak en az yoldur . Anlaşmazlık kümesi p ile başlayan alt terimler kümesidir , biçimsel olarak: { t | s  : }.

algoritma:

Birleştirilecek bir dizi T terimi verildiğinde, başlangıçta özdeşlik ikamesi olsun

do sonsuza eğer bir olduğunu tekil seti daha sonra dönmek fi

izin D arasında anlaşmazlık kümesi let s , t iki sözlük sırasında en az terimler olmalarına D

eğer s değişken değildir ya s içinde oluşur t sonra dönmek "NONUNIFIABLE" fi yapılır

Robinson (1965) tarafından verilen ilk algoritma oldukça verimsizdi; bkz. kutu. Aşağıdaki daha hızlı algoritma Martelli, Montanari'den (1982) kaynaklanmıştır. Bu makale ayrıca verimli bir sözdizimsel birleştirme algoritması bulmaya yönelik önceki girişimleri listeler ve doğrusal zaman algoritmalarının Martelli, Montanari (1976) ve Paterson, Wegman (1978) tarafından bağımsız olarak keşfedildiğini belirtir.

Sonlu bir potansiyel denklemler kümesi verildiğinde , algoritma onu { x 1u 1 , ..., x mu m } biçimindeki eşdeğer bir denklemler kümesine dönüştürmek için kurallar uygular ; burada x 1 , ..., x m, farklı değişkenler ve u 1 , ..., u m hiçbirini ihtiva eden terimler x i . Bu formun bir seti ikame olarak okunabilir. Çözüm yoksa algoritma ⊥ ile sonlanır; diğer yazarlar bu durumda "Ω", "{}" veya " fail " kullanır. Değişken tüm oluşumlarını ikame işlemi x sorun, G terimi ile t ifade edilir G { xt }. Basitlik için, sabit semboller, sıfır argümana sahip fonksiyon sembolleri olarak kabul edilir.

    silmek
    ayrıştırmak
eğer veya     çatışma
    takas
eğer ve     bertaraf etmek
Eğer     Kontrol

Kontrol gerçekleşir

Değişken birleştirme çalışmaları x terimi içeren x katı subterm olarak Xf (..., x , ...) için çözüm olarak sonsuz bir dönem yol açacak x , çünkü x kendisinin bir subterm olarak ortaya çıkabilecek . Yukarıda tanımlandığı gibi (sonlu) birinci mertebeden terimler kümesinde , xf (..., x , ...) denkleminin çözümü yoktur; bu nedenle eleme kuralı yalnızca xdeğişkense ( t ) uygulanabilir. Oluşan kontrol denilen bu ek denetim algoritmayı yavaşlattığından, örneğin çoğu Prolog sisteminde atlanır. Teorik bir bakış açısından, kontrol miktarlarını atlamak sonsuz ağaçlar üzerinde denklemleri çözmek anlamına gelir, aşağıya bakınız .

Fesih kanıtı

Algoritmanın sonlandırıldığının kanıtı için bir üçlü düşünün; burada n var denklem setinde birden fazla meydana gelen değişkenlerin sayısıdır, n lhs potansiyel denklemlerin sol tarafındaki fonksiyon sembollerinin ve sabitlerin sayısıdır ve n eqn denklem sayısıdır. Zaman kural ortadan tatbik edilir , n var itibaren azalır, X elimine edilir G ve sadece muhafaza { xt }. Başka bir kural uygulamak, n var'ı bir daha asla artıramaz . Kural ayrıştırma , çakışma veya takas uygulandığında, en azından sol tarafın en dıştaki f kaybolduğu için n lhs azalır . Kalan silme veya denetleme kurallarından herhangi birinin uygulanması , n lhs'yi artıramaz , ancak n eqn'yi azaltır . Bu nedenle, herhangi bir kural uygulaması , sözlük düzenine göre üçlüyü azaltır , bu yalnızca sınırlı sayıda mümkündür.

Conor McBride "birleşme sömüren yapıyı ifade ederek" Bir de gözlemlemektedir bağımlı yazılan gibi dilin nükte , Robinson 'ın algoritması yapılabilir değişkenlerin sayısı özyinelemeli ayrı sonlandırma kanıtı gereksiz hale durumda.

Birinci dereceden terimlerin sözdizimsel birleşim örnekleri

Prolog sözdizimsel kuralında, büyük harfle başlayan bir sembol, bir değişken adıdır; küçük harfle başlayan bir sembol, bir fonksiyon sembolüdür; virgül mantıksal ve operatör olarak kullanılır . Matematiksel gösterim için x,y,z değişkenler, f,g fonksiyon sembolleri ve a,b sabitler olarak kullanılır.

giriş gösterimi matematiksel gösterim birleştirici ikame Açıklama
a = a { bir = bir } {} Başarılı. ( totoloji )
a = b { bir = b } a ve b eşleşmiyor
X = X { x = x } {} Başarılı. ( totoloji )
a = X { bir = x } { xbir } x , a sabiti ile birleştirilir
X = Y { x = y } { xy } x ve y takma addır
f(a,X) = f(a,b) { f ( bir , x ) = f ( bir , b ) } { xb } fonksiyon ve sabit semboller eşleşir, x sabit b ile birleştirilir
f(a) = g(a) { f ( bir ) = g ( bir ) } f ve g eşleşmiyor
f(X) = f(Y) { f ( x ) = f ( y ) } { xy } x ve y takma addır
f(X) = g(Y) { f ( x ) = g ( y ) } f ve g eşleşmiyor
f(X) = f(Y,Z) { f ( x ) = f ( y , z ) } Başarısız. F fonksiyonu semboller farklı Arity sahip
f(g(X)) = f(Y) { f ( g ( x )) = f ( y ) } { yg ( x ) } Bütünleştirir y terimi ile
f(g(X),X) = f(Y,a) { f ( g ( x ), x ) = f ( y , a ) } { xbir , yg ( bir ) } Bütünleştirir x sabitine sahip a ve y terimi ile
X = f(X) { x = f ( x )} ⊥ olmalı Birinci dereceden mantıkta ve birçok modern Prolog lehçesinde ⊥ döndürür (oluş denetimi tarafından zorlanır ).

Geleneksel Prolog ve Prolog II'de başarılıdır, x'i sonsuz terimle birleştirir x=f(f(f(f(...)))).

X = Y, Y = a { x = y , y = bir } { xbir , ybir } Hem x hem de y , a sabitiyle birleştirilir
a = Y, X = Y { a = y , x = y } { xbir , ybir } Yukarıdaki gibi (kümedeki denklemlerin sırası önemli değil)
X = a, b = X { x = bir , b = x } Başarısız. a ve b eşleşmez, bu nedenle x her ikisiyle de birleştirilemez
En az yaygın örnekleri için katlanarak daha büyük bir ağaç içeren iki terim. Onun dag gösterimi (en sağdaki, portakal parçası) doğrusal boyutta hala.

n boyutundaki bir sözdizimsel birinci dereceden birleştirme probleminin en genel birleştiricisi 2 n boyutunda olabilir . Örneğin, problem en genel birleştiriciye sahiptir , bkz. resim. Bu tür patlamaların neden olduğu üstel zaman karmaşıklığından kaçınmak için, gelişmiş birleştirme algoritmaları ağaçlar yerine yönlendirilmiş asiklik grafikler (daglar) üzerinde çalışır .

Uygulama: mantıksal programlamada birleştirme

Birleştirme kavramı , en iyi Prolog dili aracılığıyla bilinen, mantık programlamasının arkasındaki ana fikirlerden biridir . Değişkenlerin içeriğini bağlama mekanizmasını temsil eder ve bir tür tek seferlik atama olarak görülebilir. Prolog'da bu işlem eşitlik sembolü ile gösterilir , ancak değişkenler başlatılırken de yapılır (aşağıya bakın). Diğer dillerde eşitlik sembolünün kullanımıyla ve aynı zamanda , , , dahil olmak üzere birçok işlemle birlikte kullanılır . Tür çıkarım algoritmaları tipik olarak birleştirmeye dayanır. ==+-*/

Prolog'da:

  1. Örneklendirilmemiş bir değişken - yani üzerinde daha önce hiçbir birleştirme yapılmamış - bir atom, bir terim veya başka bir örneklenmemiş değişken ile birleştirilebilir, böylece etkin bir şekilde onun takma adı olur. Birçok modern Prolog lehçesinde ve birinci dereceden mantıkta , bir değişken onu içeren bir terimle birleştirilemez; bu sözde gerçekleşir kontrolüdür .
  2. İki atom ancak özdeş olduklarında birleştirilebilir.
  3. Benzer şekilde, eğer terimlerin üst fonksiyon sembolleri ve ariteleri aynıysa ve parametreler aynı anda birleştirilebiliyorsa, bir terim başka bir terimle birleştirilebilir. Bunun özyinelemeli bir davranış olduğunu unutmayın.

Uygulama: tür çıkarımı

Birleştirme, tür çıkarımı sırasında, örneğin işlevsel programlama dili Haskell'de kullanılır . Bir yandan programcının her fonksiyon için tip bilgisi vermesi gerekmez, diğer yandan yazım hatalarını tespit etmek için kullanılır. Haskell ifadesi True : ['x', 'y', 'z']doğru yazılmamış. Liste yapı işlevi (:)tiptedir a -> [a] -> [a], birinci parametre için Truepolimorfik tipi değişken aile birleşik olmak zorundadır True, çeşidini Bool. İkinci argüman, ['x', 'y', 'z'], türündedir, [Char]ancak aynı anda ve aikisi birden olamaz . BoolChar

Prolog'da olduğu gibi, tür çıkarımı için bir algoritma verilebilir:

  1. Herhangi bir tür değişkeni, herhangi bir tür ifadesi ile birleşir ve bu ifadeye örneklenir. Belirli bir teori, bu kuralı bir meydana gelme kontrolü ile kısıtlayabilir.
  2. İki tür sabiti, yalnızca aynı tür olduklarında birleşir.
  3. İki tip yapı, yalnızca aynı tür kurucunun uygulamalarıysa ve tüm bileşen türleri özyinelemeli olarak birleşirse birleşir.

Bildirim niteliğinde olması nedeniyle, bir dizi birleştirmedeki sıra (genellikle) önemsizdir.

Birinci mertebeden mantık terminolojisinde bir atomun temel bir önerme olduğuna ve Prolog terimine benzer şekilde birleşik olduğuna dikkat edin.

Sıralı birleştirme

Sipariş olarak ayrılmış mantığı biri atamak için izin verir sıralama veya türünü her terimin, ve bir tür ilan etmek lar 1 bir subsort başka tür ler 2 , yaygın olarak yazılır s 1 s 2 . Örneğin, biyolojik canlılar hakkında akıl yürütürken, bir tür köpeğini bir tür hayvanın alttürü olarak ilan etmek yararlıdır. Bazı tür bir terim her yerde ler gereklidir, herhangi subsort bir dönem s yerine temin edilebilir. Örneğin, anne : hayvan hayvan işlev bildirimive sabit bir lassie : köpek bildirimi varsayarsak, anne ( lassie ) terimi tamamen geçerlidir ve hayvan türüne sahiptir. Bir köpeğin annesinin de köpek olduğu bilgisini sağlamak için başka bir anne : köpek köpek beyanıverilebilir; buna, programlama dillerindeki aşırı yüklemeye benzer şekilde, işlev aşırı yüklemesi denir.

Walther , sıralanmış mantıkta terimler için bir birleştirme algoritması verdi, beyan edilen herhangi iki tür s 1 , s 2 için bunların kesişimlerinin s 1s 2 de bildirilmesini gerektirir: eğer x 1 ve x 2 , s 1 türünde bir değişkense ve s 2 , sırasıyla x 1x 2 denklemi { x 1 = x , x 2 = x } çözümüne sahiptir , burada x : s 1s 2 . Bu algoritmayı yan tümce tabanlı otomatik teorem ispatlayıcısına dahil ettikten sonra, bir kıyaslama problemini onu sıralı mantığa çevirerek çözebilir ve böylece birçok tekli yüklemin türe dönüştüğü gibi onu bir büyüklük sırasına indirebilir.

Smolka, parametrik polimorfizme izin vermek için genelleştirilmiş sıralı mantık . Onun çerçevesinde, alt sıralama bildirimleri karmaşık tür ifadelerine yayılır. Bir programlama örneği olarak, bir parametrik sıralama listesi ( X ) bildirilebilir ( X , bir C++ şablonunda olduğu gibi bir tür parametresidir ) ve bir alt sıralama bildiriminden intfloat ilişki listesi ( int ) ⊆ list ( float ) otomatik olarak çıkarsama, yani her tamsayı listesinin aynı zamanda bir kayan nokta listesi olduğu anlamına gelir.

Schmidt-Schauß, terim bildirimlerine izin vermek için genelleştirilmiş sıralı mantık. Örnek olarak, alt sıralama bildirimlerinin bileint ve tekint olduğunu varsayarsak , ∀ i  : int gibi bir terim bildirimi . ( i + i ) : normal aşırı yükleme ile ifade edilemeyen bir tamsayı toplama özelliğinin bildirilmesine bile izin verir.

Sonsuz terimlerin birleşimi

Sonsuz ağaçların arka planı:

  • B. Courcelle (1983). "Sonsuz Ağaçların Temel Özellikleri" (PDF) . Teori. Bilgisayar. Sci . 25 (2): 95–169. doi : 10.1016/0304-3975(83)90059-2 . Arşivlenmiş orijinal (PDF) 2014-04-21 tarihinde . 2013-06-28 alındı .
  • Michael J. Maher (Tem 1988). "Sonlu, Rasyonel ve Sonsuz Ağaçların Cebirlerinin Tam Aksiyomatizasyonları". Proc. IEEE 3. Yıllık Semptom. Bilgisayar Biliminde Mantık Üzerine, Edinburgh . s. 348–357.
  • Joxan Jaffar; Peter J. Stuckey (1986). "Sonsuz Ağaç Mantığı Programlamanın Semantiği" . Teorik Bilgisayar Bilimi . 46 : 141–158. doi : 10.1016/0304-3975(86)90027-7 .

Birleştirme algoritması, Prolog II:

  • A. Colmerauer (1982). KL Clark; S.-A. Tarnlund (ed.). Prolog ve Sonsuz Ağaçlar . Akademik Basın.
  • Alain Colmerauer (1984). "Sonlu ve Sonsuz Ağaçlarda Denklemler ve Eşitsizlikler". ICOT'ta (ed.). Proc. Int. Konf. Beşinci Nesil Bilgisayar Sistemlerinde . s. 85–99.

Uygulamalar:

e-birleşme

E-birleştirme , belirli bir denklem kümesine, bazı denklemsel arka plan bilgisi E dikkate alınarak çözüm bulma problemidir . İkincisi bir dizi evrensel eşitlik olarak verilir . Bazı belirli E kümeleri için , denklem çözme algoritmaları (aka E-birleştirme algoritmaları ) geliştirilmiştir; diğerleri için böyle bir algoritmanın olamayacağı kanıtlanmıştır.

Örneğin, a ve b farklı sabitlerse, denklemin , operatör hakkında hiçbir şeyin bilinmediği, salt sözdizimsel birleştirmeye göre bir çözümü yoktur . Bununla birlikte, 'nin değişmeli olduğu biliniyorsa , o zaman { xb , ya } ikamesi yukarıdaki denklemi çözer, çünkü

{ xb , ybir }
= ile ikame uygulama
= değişmeliliği ile
= { xb , ybir } (converse) ikame uygulamasıyla

Arka plan bilgisi E , evrensel eşitlikle " tüm u , v için " değişkenliğini ifade edebilir .

Özel arka plan bilgisi kümeleri E

Kullanılan adlandırma kuralları
u , v , w : = A ilişkiselliği
u , v : = C değişmeliliği
u , v , w : = D l Sol distributivity over
u , v , w : = D r üzerinde doğru dağıtım
u : = sen ben iktidarsızlığı
u : = sen N l Sol nötr eleman n'ye göre
u : = sen     N r     Sağ nötr eleman n'ye göre

Herhangi bir girdi problemi için sona eren bir birleştirme algoritması geliştirildiyse, bir teori için birleştirmenin kararlaştırılabilir olduğu söylenir . Söylenir birleştirmenin yarı Karar verilebilen bir birleşme algoritma herhangi biri için bunun için o sona erer icat edilmişse, bir teori çözülebilir giriş problemi ancak bir çözülemeyen giriş sorununun çözüm sonsuza aramaya devam edebilir.

Birleştirme, aşağıdaki teoriler için kararlaştırılabilir :

Birleştirme, aşağıdaki teoriler için yarı karar verilebilir :

Tek taraflı paramodülasyon

Bir varsa yakınsak terimi yeniden sistemi R için E , tek taraflı paramodulation algoritması verilen denklem tüm çözümler numaralandırmak için kullanılabilir.

Tek taraflı paramodülasyon kuralları
G ∪ { f ( s 1 , ..., s , n ) ≐ f ( t 1 , ..., t , n )} ; S G ∪ { s 1t 1 , ..., s nt n } ; S     ayrıştırmak
G ∪ { xt } ; S G { xt } ; S { xt } ∪ { xt } Değişken eğer X oluşmaz t     bertaraf etmek
G ∪ { f ( s 1 , ..., s , n ) ≐ t } ; S G ∪ { s 1 ≐ u 1 , ..., s , n ≐ u , n , Rt } ; S     eğer f ( u 1 , ..., u n ) → r bir kuraldır R     mutasyona uğramak
G ∪ { f ( s 1 , ..., s , n ) ≐ y } ; S G ∪ { s 1y 1 , ..., s ny n , yf ( y 1 ,..., y n ) } ; S eğer y 1 , ..., y n yeni değişkenler     taklit etmek

İle başlayarak G birleşme çözülmesi gereken problem olan ve S kimlik ikame olan kurallar gerçek boş grubu görüntülenene kadar nondeterministically uygulanır G mevcut durumda, S birleştirici bir substitusyondur. Düzenine bağlı olarak paramodulation kuralları gerçek denklem seçimine uygulanır, G ve seçimine R ' s kurallar mutasyona farklı hesaplamaların yollar da mümkündür. Sadece bazıları bir çözüme yol açarken, diğerleri başka bir kuralın uygulanamadığı bir G ≠ {} ile biter (örn. G = { f (...) ≐ g (...) }).

Örnek terim yeniden yazma sistemi R
1 uygulama ( nil , z ) z
2     Uygulama ( X . Y , Z ) x . uygulama ( y , z )

Örnek olarak, cons ve nil öğelerinden oluşturulan listelerin ekleme operatörünü tanımlayan bir yeniden yazma sistemi R terimi kullanılır ; burada eksiler ( x , y ) infix notasyonunda x olarak yazılır . kısalık için y ; örneğin, uygulama ( a . b . sıfırdır , c . d . nil →) bir . Uygulama ( b . sıfırdır , c . d . nil →) bir . b . Uygulama ( sıfır , c . d . nil →) bir . b . c . d . nil , a listelerinin sıralanmasını gösterir . b . sıfır ve c . d . nil , yazma kuralı 2,2 ve 1. equational teori kullanılarak e karşılık gelen R bir uyum kapak arasında R , her iki şartlarda ikili ilişkiler olarak görülmektedir. Örneğin, uygulama ( a . b . nil , c . d . nil ) ≡ a . b . c . d . niluygulaması ( a . b . c . d . nil , nil ). Paramodülasyon algoritması , R örneği ile beslendiğinde bu E'ye göre denklemlerin çözümlerini sıralar .

Birleştirme problemi için başarılı bir örnek hesaplama yolu { app ( x , app ( y , x )) ≐ a . bir . nil } aşağıda gösterilmiştir. Değişken adı çakışmalarını önlemek için, yeniden yazma kuralları, kural mutasyonuyla kullanılmadan önce her seferinde tutarlı bir şekilde yeniden adlandırılır ; v 2 , v 3 , ... bu amaç için bilgisayar tarafından oluşturulan değişken adlarıdır. Her satırda, G'den seçilen denklem kırmızıyla vurgulanır. Her mutasyon kuralı uygulanır, seçilen yeniden yazma kuralı ( 1 ya da 2 ) parantez içinde gösterilmektedir. Son satırdan, birleştirici ikame S = { ynil , xa . nil } elde edilebilir. Aslında, app ( x , app ( y , x )) { ynil , xa . nil } = Uygulama ( a . sıfır , uygulama ( sıfır , bir . nil )) ≡ Uygulama ( a . nil , bir . nil ) ≡ bir . app ( nil , a . nil ) ≡ a . bir . nil verilen sorunu çözer. "mutate(1), mutasyona(2), mutasyona(2), mutasyona(1)" seçilerek elde edilebilen ikinci bir başarılı hesaplama yolu, S = { ya ikamesine yol açar . bir . nil , xnil }; burada gösterilmemiştir. Başka hiçbir yol başarıya götürmez.

Örnek birleştirici hesaplama
Kullanılan kural G S
{ uygulama ( x , uygulama ( y , x )) ≐ bir . bir . sıfır } {}
mutasyona uğrat(2) { xv 2 . v 3 , uygulama ( y , x ) ≐ v 4 , v 2 . uygulama ( v 3 , v 4 ) ≐ a . bir . sıfır } {}
ayrıştırmak { xv 2 . v 3 , uygulama ( y , x ) ≐ h 4 , hac 2bir , uygulama ( V 3 , hac 4 ) ≐ bir . sıfır } {}
bertaraf etmek { Uygulama ( y , v 2 . H 3 ) ≐ h 4 , hac 2bir , uygulama ( V 3 , hac 4 ) ≐ bir . sıfır } { xv 2 . v 3 }
bertaraf etmek { uygulama ( y , a . v 3 ) ≐ v 4 , uygulama ( v 3 , v 4 ) ≐ bir . sıfır } { xbir . v 3 }
mutasyona uğrat(1) { ynil , a . h 3hacim 5 , hacim 5h 4 , uygulama ( V 3 , hac 4 ) ≐ bir . sıfır } { xbir . v 3 }
bertaraf etmek { ynil , a . v 3v 4 , uygulama ( v 3 , v 4 ) ≐ a . sıfır } { xbir . v 3 }
bertaraf etmek { bir . v 3v 4 , uygulama ( v 3 , v 4 ) ≐ a . sıfır } { ynil , xbir . v 3 }
mutasyona uğrat(1) { bir . h 3h 4 , hac 3sıfır , hacim 4hac 6 , v 6bir . sıfır } { ynil , xbir . v 3 }
bertaraf etmek { bir . v 3v 4 , v 3nil , v 4bir . sıfır } { ynil , xbir . v 3 }
bertaraf etmek { bir . sıfırv 4 , v 4bir . sıfır } { ynil , xbir . sıfır }
bertaraf etmek { bir . sıfıra . sıfır } { ynil , xbir . sıfır }
ayrıştırmak { birbir , nilnil } { ynil , xbir . sıfır }
ayrıştırmak { sıfırsıfır } { ynil , xbir . sıfır }
ayrıştırmak     ⇒     {} { ynil , xbir . sıfır }

daraltma

Adım daralması Üçgen diyagramı st pozisyonunda p terimi içinde lar yeniden yazma kuralı kullanılarak, ikame S (alt sıra) birleştirici ile, lR (üst sıra)

Eğer R, a, yakınsak terimi yeniden sistemi için E , önceki bölüme bir yaklaşım alternatif "birbirini takip eden uygulama oluşur daralan adımları "; bu sonunda belirli bir denklemin tüm çözümlerini sıralayacaktır. Bir daraltma adımı (bkz. resim) şunlardan oluşur:

  • mevcut terimin değişken olmayan bir alt terimini seçme,
  • R'den bir kuralın sol tarafıyla sözdizimsel olarak birleştirir ve
  • somutlaştırılmış kuralın sağ tarafını somutlaştırılmış terimle değiştirmek.

Resmi olarak eğer lr bir olan yeniden adlandırılmış kopyası bir yeniden yazma kuralının R bir terim ile ortak noktası hiç değişkeni olan lar ve subterm s | p , bir değişken değildir ile unifiable olan l ile mgu σ , o s edilebilir daralmış terime t = [ ] p terimi, yani de subterm ile, p ikame ile . Bu durum, s için daraltılabilir t genel olarak ifade edilir st . Sezgisel olarak, adımlar daralan bir dizi t 1t 2 ↝ ... ↝ T N yeniden yazma bir dizi adım olarak düşünülebilir t 1t 2 → ... → t , n , ancak ilk terimiyle t 1 olmak kullanılan kuralların her birini uygulanabilir kılmak için gerektiğinde daha fazla somutlaştırılır.

Yukarıdaki , aşağıdaki daralma sekansı ( "↓" burada örnekleme gösteren) için örnek paramodulation hesaplama karşılık:

uygulama ( x , uygulama ( y , x ))
xv 2 . v 3
uygulama ( v 2 . v 3 , uygulama ( y , v 2 . v 3 )) v 2 . uygulama ( v 3 , uygulama ( y , v 2 . v 3 ) ))
ysıfır
v 2 . uygulama ( v 3 , uygulama ( sıfır , v 2 . v 3 ) )) v 2 . uygulama ( v 3 , v 2 . v 3 )
v 3sıfır
v 2 . uygulama ( sıfır , v 2 . sıfır ) v 2 . v 2 . sıfır

Son terim, v 2 . v 2 . nil , orijinal sağ taraftaki terim a ile sözdizimsel olarak birleştirilebilir . bir . sıfır .

Daralması lemması bir terim bir örneği her sağlar s dönem için yeniden olabilir t yakınsak bir dönem yeniden sistemi ile, daha sonra s ve t daraltılmış bir dönem için yeniden edilebilir ler ' ve T ' , sırasıyla, bu şekilde t ' bir örneğidir s ' .

Resmi olarak: ne zaman t , bir miktar σ ikamesi için geçerlidir, o zaman s , t terimleri vardır , öyle ki s s ' ve t t ve s τ = t bazı ikameler için τ.

Üst düzey birleştirme

Birçok uygulama, birinci dereceden terimler yerine yazılan lambda terimlerinin birleştirilmesini dikkate almayı gerektirir. Bu tür bir birleşmeye genellikle üst düzey birleştirme denir . Yüksek mertebeden birleştirmenin iyi çalışılmış bir dalı, αβη dönüşümleri tarafından belirlenen eşitliği modülo olarak basitçe yazılan lambda terimlerini birleştirme problemidir. Bu tür birleştirme problemlerinin çoğu genel birleştiriciye sahip değildir. Yüksek mertebeden birleştirme kararsız olsa da , Gérard Huet , birleştiriciler uzayının sistematik olarak aranmasına izin veren yarı karar verilebilir (ön) bir birleştirme algoritması verdi (Martelli-Montanari'nin birleştirme algoritmasını daha yüksek mertebeden değişkenler içeren terimler için kurallarla genelleştirerek) bu pratikte yeterince iyi çalışıyor gibi görünüyor. Huet ve Gilles Dowek bu konuyu araştıran makaleler yazdılar.

Dale Miller , şimdi daha yüksek mertebeden örüntü birleştirme olarak adlandırılan şeyi tanımladı . Üst düzey birleştirmenin bu alt kümesi karar verilebilir ve çözülebilir birleştirme sorunlarının çoğu genel birleştiriciye sahiptir. Üst düzey mantık programlama dilleri λProlog ve Twelf gibi daha yüksek düzeyde birleştirme içeren birçok bilgisayar sistemi , genellikle tam üst düzey birleştirmeyi değil, yalnızca model parçasını uygular.

Hesaplamalı dilbilimde, en etkili üç nokta teorilerinden biri, elipslerin, değerleri daha sonra Yüksek Dereceli Birleştirme (HOU) kullanılarak belirlenen serbest değişkenlerle temsil edilmesidir. Örneğin, "Jon Mary'yi seviyor ve Peter da seviyor" ifadesinin semantik gösterimi like( j , m ) ∧ R( p ) şeklindedir ve R'nin değeri (üç noktanın semantik gösterimi) like( j , m ) = R( j ) . Bu tür denklemleri çözme işlemine Yüksek Dereceli Birleştirme denir.

Örneğin , tek değişkenin f olduğu { f ( a , b , a ) ≐ d ( b , a , c ) } birleştirme problemi , { f ↦ λ xyz . d ( y , x , c ) }, { f ↦ λ xyz . d ( y , z , c ) }, { f ↦ λ xyz . d ( y , a , c ) }, { f ↦ λ xyz . d ( b , x , c ) }, { f ↦ λ xyz . d ( b , z , c ) } ve { f ↦ λ xyz . d ( b , a , c )}.

Wayne Snyder , hem yüksek dereceli birleştirmenin hem de E-birleştirmenin bir genellemesini verdi, yani lambda terimlerini bir denklem teorisi olarak birleştirmek için bir algoritma.

Ayrıca bakınız

Notlar

Referanslar

daha fazla okuma