Mantıksal programlama - Logic programming
Programlama paradigmaları |
---|
|
Mantıksal programlama , büyük ölçüde biçimsel mantığa dayanan bir programlama paradigmasıdır . Bir mantık programlama dilinde yazılmış herhangi bir program , bazı problem alanları hakkında gerçekleri ve kuralları ifade eden, mantıksal biçimde bir dizi cümledir. Başlıca mantık programlama dili aileleri arasında Prolog , yanıt kümesi programlama (ASP) ve Datalog bulunur . Bu dillerin tümünde kurallar yan tümceler şeklinde yazılır :
- H :- B1, …, Bn.
ve mantıksal çıkarımlar olarak bildirimsel olarak okunur:
- H if B1 and … and Bn.
Hkuralın başı olarak adlandırılır ve , ..., gövde olarak adlandırılır . Gerçekler, gövdesi olmayan ve basitleştirilmiş biçimde yazılmış kurallardır: B1Bn
- H.
H, , ...' nin tümünün atom formülleri olduğu en basit durumda , bu tümcelere belirli tümceler veya Boynuz tümceleri denir . Bununla birlikte, bu basit durumun birçok uzantısı vardır, en önemlisi, bir cümlenin gövdesindeki koşulların aynı zamanda atom formüllerinin olumsuzlaması olabileceği durumdur. Bu uzantıyı içeren mantık programlama dilleri, monoton olmayan bir mantığın bilgi temsil yeteneklerine sahiptir . B1Bn
ASP ve Datalog'da, mantık programları yalnızca bildirimsel bir okumaya sahiptir ve bunların yürütülmesi, davranışı programcı tarafından kontrol edilmesi amaçlanmayan bir ispat prosedürü veya model oluşturucu aracılığıyla gerçekleştirilir. Bununla birlikte, Prolog dil ailesinde, mantık programlarının hedef azaltma prosedürleri olarak prosedürel bir yorumu da vardır :
- çözmek H, çözmek ve ... ve çözmek .B1Bn
Aşağıdaki fıkrayı örnek olarak düşünün:
- fallible(X) :- human(X).
Programlama dili Planner'ı göstermek için Terry Winograd tarafından kullanılan bir örneğe dayanmaktadır . Bir mantık programı bir madde olarak, test etmek için bir yöntem olarak hem de kullanılabilir olup olmadığını test ile olan ve bir prosedür olarak bulmak için olan bir bularak olan . Gerçeklerin bile prosedürel bir yorumu vardır. Örneğin, fıkra: XfallibleXhumanXfallibleXhuman
- human(socrates).
olduğunu göstermek için bir prosedür olarak hem de kullanılabilir socratesolduğunu humanve bir bulmak için bir prosedür olarak Xolduğunu human"atama" yoluyla socratesetmek X.
Mantık programlarının bildirimsel okuması, bir programcı tarafından doğruluklarını doğrulamak için kullanılabilir. Ayrıca, mantık tabanlı program dönüştürme teknikleri, mantık programlarını daha verimli mantıksal olarak eşdeğer programlara dönüştürmek için de kullanılabilir. Prolog mantık programlama dilleri ailesinde, programcı, programların verimliliğini artırmak için yürütme mekanizmasının bilinen problem çözme davranışını da kullanabilir.
Tarih
Bilgisayar programlarını temsil etmek ve yürütmek için matematiksel mantığın kullanılması da 1930'larda Alonzo Church tarafından geliştirilen lambda hesabının bir özelliğidir . Bununla birlikte, bilgisayar programlarını temsil etmek için tümceli mantığı kullanan ilk öneri Cordell Green tarafından yapılmıştır . Bu, LISP'de programın yürütülmesini simüle ederek ilişkiyi hesaplamak için bir girdi-çıktı ilişkisinin bir temsili ile birlikte LISP'nin bir alt kümesinin aksiyomlaştırılmasını kullandı . Foster ve Elcock'un Absys'i ise , işlemlerin gerçekleştirilme sırasına hiçbir kısıtlama getirmeyen iddialı bir programlama dilinde denklemlerin ve lambda hesabının bir kombinasyonunu kullandı.
Mevcut haliyle mantık programlamanın izi 1960'ların sonlarında ve 1970'lerin başlarında, yapay zekada bilginin prosedürel temsiline karşı bildirimsel temsilleri hakkındaki tartışmalara kadar izlenebilir . Bildirim temsiller savunanlar özellikle de çalışıyorlardı Stanford ile bağlantılı, John McCarthy , Bertram Raphael ve Cordell Green ve içinde Edinburgh ile, John Alan Robinson (bir akademik ziyaretçi Syracuse Üniversitesi ), Pat Hayes ve Robert Kowalski . Usul temsillerinin savunucuları ağırlıklı olarak Marvin Minsky ve Seymour Papert liderliğindeki MIT merkezliydi .
MIT'de geliştirilen Planner , mantığın ispat yöntemlerine dayanmasına rağmen , bu prosedürelci paradigma içinde ortaya çıkan ilk dildi. Planlayıcı, hedeflerden (yani hedef azaltma veya geriye doğru zincirleme ) ve iddialardan (yani ileri zincirleme ) prosedürel planların kalıba dayalı çağrılmasını içeriyordu . Planner'ın en etkili uygulaması, Gerry Sussman , Eugene Charniak ve Terry Winograd tarafından uygulanan Micro-Planner adlı Planner alt kümesiydi . O zamanlar bir dönüm noktası olan Winograd'ın doğal dil anlama programı SHRDLU'yu uygulamak için kullanıldı . O zamanlar çok sınırlı bellek sistemleriyle başa çıkmak için Planner, bir seferde yalnızca bir olası hesaplama yolunun depolanması gerektiği için bir geri izleme kontrol yapısı kullandı. Planner, QA-4, Popler, Conniver, QLISP ve eşzamanlı dil Ether programlama dillerini ortaya çıkardı.
Edinburgh'daki Hayes ve Kowalski, bilgi temsiline mantık temelli bildirimsel yaklaşımı Planner'ın prosedürel yaklaşımıyla uzlaştırmaya çalıştı. Hayes (1973), teorem ispatlayıcısının davranışını değiştirerek farklı prosedürlerin elde edilebileceği Golux adlı bir denklem dili geliştirdi. Öte yandan Kowalski, SL çözünürlüğünün bir çeşidi olan SLD çözünürlüğünü geliştirdi ve sonuçları hedef azaltma prosedürleri olarak nasıl ele aldığını gösterdi. Kowalski , Prolog programlama dilinin tasarım ve uygulamasında bu fikirleri geliştiren Marsilya'daki Colmerauer ile işbirliği yaptı .
Mantık Programlama Derneği 1986 yılında Mantık Programlama teşvik etmek kuruldu.
Prolog programlama dilleri yol açtı ALF , Fril , Gödel , Merkür , Oz , Ciao , Görsel Prolog , XSB ve λProlog yanı sıra çeşitli eşzamanlı mantık programlama dilleri , kısıtlama mantık programlama dilleri ve Datalog .
kavramlar
Mantık ve kontrol
Mantıksal programlama kontrollü kesinti olarak görülebilir. Mantıksal programlamada önemli bir kavram, programların mantık bileşenlerine ve kontrol bileşenlerine ayrılmasıdır. Saf mantık programlama dillerinde, üretilen çözümleri tek başına mantık bileşeni belirler. Kontrol bileşeni, bir mantık programını yürütmenin alternatif yollarını sağlamak için değiştirilebilir. Bu kavram slogan tarafından yakalanır
- Algoritma = Mantık + Kontrol
burada "Mantık" bir mantık programını ve "Kontrol" farklı teorem kanıtlama stratejilerini temsil eder.
Problem çözme
Bir mantık programının ve bir üst düzey atomik hedefin hiçbir değişken içermediği basitleştirilmiş, önermeli durumda, geriye dönük akıl yürütme , hedefi çözmek için arama alanını oluşturan bir ve-veya ağacı belirler . En üst düzey hedef ağacın köküdür. Ağaçtaki herhangi bir düğüm ve başı düğümle eşleşen herhangi bir yan tümce verildiğinde, tümcenin gövdesindeki alt hedeflere karşılık gelen bir dizi alt düğüm vardır. Bu alt düğümler bir "ve" ile gruplandırılır. Düğümü çözmenin alternatif yollarına karşılık gelen alternatif çocuk kümeleri, bir "veya" ile birlikte gruplandırılır.
Bu alanı aramak için herhangi bir arama stratejisi kullanılabilir. Prolog, bir seferde yalnızca bir alternatif ve bir alt hedefin dikkate alındığı sıralı, son giren ilk çıkar, geri izleme stratejisi kullanır. Paralel arama, akıllı geri izleme veya en uygun çözümü bulmak için önce en iyi arama gibi diğer arama stratejileri de mümkündür.
Alt hedeflerin değişkenleri paylaştığı daha genel durumda, en yüksek düzeyde somutlaştırılmış veya yalnızca bir prosedürün uygulanabilmesi için yeterince somutlaştırılmış alt hedefi seçmek gibi diğer stratejiler kullanılabilir. Bu tür stratejiler, örneğin eşzamanlı mantık programlamasında kullanılır .
Başarısızlık olarak olumsuzlama
Çoğu pratik uygulama için ve yapay zekada monoton olmayan akıl yürütme gerektiren uygulamalar için, Horn cümlesi mantık programlarının negatif koşullarla normal mantık programlarına genişletilmesi gerekir. Normal bir mantık programındaki bir yan tümce şu şekildedir:
- H :- A1, …, An, not B1, …, not Bn.
ve mantıksal bir çıkarım olarak bildirimsel olarak okunur:
- H if A1 and … and An and not B1 and … and not Bn.
nerede Htüm ve ve atomik formüller vardır. Negatif değişmezlerdeki olumsuzlama , genellikle " başarısızlık olarak olumsuzlama " olarak adlandırılır , çünkü çoğu uygulamada, olumsuz bir koşulun , pozitif koşulun tutmadığını göstererek geçerli olduğu gösterilir . Örneğin: AiBi not Bi not Bi Bi
canfly(X) :- bird(X), not abnormal(X).
abnormal(X) :- wounded(X).
bird(john).
bird(mary).
wounded(john).
Uçabilen bir şey bulma hedefi göz önüne alındığında:
:- canfly(X).
birinci alt hedefi çözen iki aday çözüm vardır bird(X), yani X = johnve X = mary. not abnormal(john)Birinci aday çözümün ikinci alt hedefi wounded(john)başarılı olduğu ve dolayısıyla abnormal(john)başarılı olduğu için başarısız olur. Ancak, not abnormal(mary)ikinci aday çözümün ikinci alt hedefi başarılı olur, çünkü wounded(mary)başarısız olur ve bu nedenle abnormal(mary)başarısız olur. Bu nedenle, X = maryhedefin tek çözümüdür.
Micro-Planner'ın "thnot" adlı bir yapısı vardı ve bir ifadeye uygulandığında (ve yalnızca) ifadenin değerlendirilmesi başarısız olursa true değerini döndürür. Modern Prolog uygulamalarında tipik olarak eşdeğer bir operatör bulunur . Genellikle veya olarak yazılır , program tarafından kanıtlanacak bir hedef (önerme) nerede . Bu operatör, birinci dereceden mantıktaki olumsuzlamadan farklıdır: değişken atoma bağlandığında başarısız olduğu gibi bir olumsuzlama , ancak bağlı olmadığı zaman da dahil olmak üzere diğer tüm durumlarda başarılı olur . Bu Prolog en muhakeme yapar monoton olmayan : iken, hep başarısız bağlama, başarılı olabilir için , olmadığına bağlı olarak başlangıçta bağlandı (standart Prolog hedefleri yürütür o notu soldan sağa sırayla).
not(Goal)
\+ Goal
Goal
\+ X == 1
X
1
X
X = 1, \+ X == 1
\+ X == 1, X = 1
X
1
X
Olumsuzlamanın başarısızlık olarak mantıksal durumu, Keith Clark [1978], belirli doğal koşullar altında, programın tamamlanmasıyla ilgili olarak klasik olumsuzlamanın doğru (ve bazen tam) bir uygulaması olduğunu gösterene kadar çözülmedi . Tamamlama, kabaca sol tarafta aynı yüklemi olan tüm program maddelerinin kümesine ilişkindir.
- H :- Body1.
- …
- H :- Bodyk.
yüklemin tanımı olarak
- H iff (Body1 or … or Bodyk)
burada "if", "eğer ve ancak" anlamına gelir. Tamamlamanın yazılması ayrıca eşitlik yükleminin açık bir şekilde kullanılmasını ve eşitlik için bir dizi uygun aksiyomun dahil edilmesini gerektirir. Ancak, başarısızlık olarak olumsuzlamanın uygulanması, eşitlik aksiyomları olmaksızın tanımların yalnızca if-yarılarına ihtiyaç duyar.
Örneğin, yukarıdaki programın tamamlanması:
- canfly(X) iff bird(X), not abnormal(X).
- abnormal(X) iff wounded(X).
- bird(X) iff X = john or X = mary.
- X = X.
- not john = mary.
- not mary = john.
Tamamlama kavramı, McCarthy'nin varsayılan muhakeme için sınırlandırma semantiği ve kapalı dünya varsayımı ile yakından ilişkilidir .
Tamamlama semantiğine bir alternatif olarak, başarısızlık olarak olumsuzlama , yanıt kümesi programlamasının kararlı model semantiğinde olduğu gibi epistemik olarak da yorumlanabilir . Bu yorumda not(B i ) tam anlamıyla B i'nin bilinmediği veya inanılmadığı anlamına gelir . Epistemik yorumun avantajı, "tersi gösterilemez", "karşıt"ın klasik olumsuzlama olduğu ve "olamaz" gibi ifadeleri resmileştirmek için "genişletilmiş mantık programlamasında" olduğu gibi klasik olumsuzlama ile çok basit bir şekilde birleştirilebilmesidir. gösterilebilir", olumsuzlamanın başarısızlık olarak epistemik yorumudur.
Bilgi temsili
Horn cümleciklerine prosedürel bir yorum verilebileceği ve bunun tersi, hedef azaltma prosedürlerinin Horn cümleleri + geriye dönük akıl yürütme olarak anlaşılabileceği gerçeği, mantık programlarının bilginin bildirimsel ve prosedürel temsillerini birleştirdiği anlamına gelir . Olumsuzlamanın başarısızlık olarak dahil edilmesi, mantık programlamanın bir tür monoton olmayan mantık olduğu anlamına gelir .
Klasik mantığa kıyasla basitliğine rağmen, Horn cümleleri ve başarısızlık olarak olumsuzlamanın bu kombinasyonu şaşırtıcı bir şekilde etkileyici olduğunu kanıtladı. Her iki ile resmiyet Örneğin, bu neden sonuç sağduyu yasaları için doğal bir temsilini sağlar durum matematik ve olay hesabının . Ayrıca, yasamanın yarı-resmi diline oldukça doğal bir şekilde karşılık geldiği de gösterilmiştir. Özellikle, Prakken ve Sartor, İngiliz Vatandaşlık Yasası'nın bir mantık programı olarak temsil edilmesini "mevzuatın hesaplamalı temsillerinin geliştirilmesi için son derece etkili, mantık programlamanın otomatik çıkarımlar oluşturmak için doğrudan konuşlandırılabilen sezgisel olarak çekici temsilleri nasıl sağladığını gösteren" olarak nitelendiriyor. .
Varyantlar ve uzantılar
Prolog
Prolog programlama dili 1972 yılında Alain Colmerauer tarafından geliştirilmiştir . Marsilya'daki Colmerauer ve Edinburgh'daki Robert Kowalski arasındaki işbirliğinden ortaya çıktı . Colmerauer, anlambilimi temsil etmek için mantığı kullanarak ve soru yanıtlamak için çözünürlüğü kullanarak doğal dili anlama üzerinde çalışıyordu . 1971 yazında, Colmerauer ve Kowalski, mantığın tümceli biçiminin biçimsel dilbilgilerini temsil etmek için kullanılabileceğini ve çözümleme teoremi kanıtlayıcılarının ayrıştırma için kullanılabileceğini keşfettiler . Hiper-çözünürlük gibi bazı teorem kanıtlayıcıların aşağıdan yukarıya ayrıştırıcılar gibi davrandığını ve SL-çözünürlük (1971) gibi diğerlerinin yukarıdan aşağıya ayrıştırıcılar gibi davrandığını gözlemlediler .
Takip eden 1972 yazında, yine Colmerauer ile birlikte çalışan Kowalski, çıkarımların prosedürel yorumunu geliştirdi. Bu ikili bildirimsel / prosedürel yorum daha sonra Prolog notasyonunda resmileştirildi.
- H :- B1, …, Bn.
hem bildirimsel hem de prosedürel olarak okunabilir (ve kullanılabilir). Aynı zamanda, bu tür tümcelerin , , , ...' nin tümünün atomik yüklem mantık formülleri olduğu ve SL-çözünürlüğünün LUSH veya SLD-çözünürlüğü ile sınırlandırılabileceği (ve genelleştirilebileceği) belirli maddeler veya Horn cümleleri ile sınırlandırılabileceği açık hale geldi . Kowalski'nin prosedürel yorumu ve LUSH, 1974'te yayınlanan 1973 tarihli bir notta açıklanmıştır. HB1Bn
Colmerauer, Philippe Roussel ile birlikte, maddelerin bu ikili yorumunu, 1972 yazında ve sonbaharında uygulanan Prolog'un temeli olarak kullandı. Yine 1972'de yazılan ve Marsilya'da uygulanan ilk Prolog programı, bir Fransız soru-cevap sistemiydi. . Prolog'un pratik bir programlama dili olarak kullanımı, 1977'de Edinburgh'da David Warren tarafından bir derleyicinin geliştirilmesiyle büyük bir ivme kazandı. Deneyler, Edinburgh Prolog'un Lisp gibi diğer sembolik programlama dillerinin işlem hızıyla rekabet edebileceğini gösterdi . Edinburgh Prolog fiili standart haline geldi ve ISO standardı Prolog'un tanımını güçlü bir şekilde etkiledi .
Abdüktif mantık programlama
Abdüktif mantık programlama , kaçırılabilir yüklemler olarak bildirilen bazı yüklemlerin "açık" veya tanımsız olmasına izin veren normal Mantık Programlamanın bir uzantısıdır. Bir kaçırma mantık programındaki bir tümce şu şekildedir:
- H :- B1, …, Bn, A1, …, An.
nerede Hkaçırılabilir olmayan bir atom formülü , yüklemleri kaçırılabilir olmayan değişmezlerin tümü ve yüklemleri kaçırılabilir olan atom formülleridir. Kaçırılabilir yüklemler, şu şekilde olabilen bütünlük kısıtlamaları ile sınırlandırılabilir: BiAi
- false :- L1, …, Ln.
burada keyfi değişmezler (tanımlanmış veya kaçırılabilir ve atomik veya olumsuzlanmış). Örneğin: Li
canfly(X) :- bird(X), normal(X).
false :- normal(X), wounded(X).
bird(john).
bird(mary).
wounded(john).
yüklemin normalkaçırılabilir olduğu yer.
Problem çözme, çözülecek problemlerin çözümleri olarak kaçırılabilir yüklemler cinsinden ifade edilen hipotezler türetilerek elde edilir. Bu problemler ya açıklanması gereken gözlemler (klasik abdüktif akıl yürütmede olduğu gibi ) ya da çözülmesi gereken hedefler (normal mantık programlamasında olduğu gibi) olabilir. Örneğin, hipotez normal(mary)gözlemi açıklar canfly(mary). Üstelik aynı hipotez X = mary, uçabilen bir şey bulma hedefinin tek çözümünü de içeriyor:
:- canfly(X).
Abdüktif mantık programlama, hata teşhisi, planlama, doğal dil işleme ve makine öğrenimi için kullanılmıştır. Ayrıca, Olumsuzlamayı bir kaçırma akıl yürütme biçimi olarak Başarısızlık olarak yorumlamak için kullanılmıştır.
metalolojik programlama
Matematiksel mantığın nesne dili ile üst dil arasında ayrım yapma konusunda uzun bir geleneğe sahip olması nedeniyle , mantık programlama üst düzey programlamaya da izin verir . En basit metalolojik program, sözde " vanilya " meta-yorumlayıcıdır:
solve(true).
solve((A,B)):- solve(A),solve(B).
solve(A):- clause(A,B),solve(B).
true boş bir bağlacı temsil ettiğinde ve (A,B) maddesi, A :- B biçiminde nesne düzeyinde bir madde olduğu anlamına gelir.
Metalojik programlama, doğal dilde olduğu gibi nesne düzeyinde ve metaseviye temsillerinin birleştirilmesine izin verir. Çıkarım kuralları olarak belirtilen herhangi bir mantığı uygulamak için de kullanılabilir . Metalogic, diğer programları, veritabanlarını, bilgi tabanlarını veya aksiyomatik teorileri veri olarak manipüle eden metaprogramları uygulamak için mantık programlamasında kullanılır.
Kısıt mantık programlama
Kısıtlama mantığı programlaması , Horn yan tümcesi mantık programlamasını kısıtlama çözme ile birleştirir . Kısıtlama yüklemleri olarak bildirilen bazı yüklemlerin, yan tümcelerin gövdesinde değişmez olarak yer almasına izin vererek Horn yan tümcelerini genişletir. Bir kısıtlama mantığı programı, formun bir dizi tümcesidir:
- H :- C1, …, Cn ◊ B1, …, Bn.
nerede Hve hepsi atomik formüllerdir ve kısıtlamalardır. Bildirimsel olarak, bu tür maddeler sıradan mantıksal çıkarımlar olarak okunur: BiCi
- H if C1 and … and Cn and B1 and … and Bn.
Bununla birlikte, cümle başlarındaki yüklemler, kısıtlama mantığı programı tarafından tanımlanırken, kısıtlamalardaki yüklemler, alana özgü bazı model-teorik yapı veya teori tarafından önceden tanımlanır.
Prosedürel olarak, yüklemleri program tarafından tanımlanan alt hedefler, sıradan mantık programlamasında olduğu gibi hedef indirgeme ile çözülür, ancak kısıtlamalar, kısıtlama yüklemlerinin semantiğini uygulayan alana özgü bir kısıtlama çözücü tarafından karşılanabilirlik açısından kontrol edilir. İlk problem, onu tatmin edici bir kısıtlar birleşimine indirgeyerek çözülür.
Aşağıdaki kısıtlama mantığı programı john's, bir öğretmen olarak tarihin oyuncak bir geçici veritabanını temsil eder :
teaches(john, hardware, T) :- 1990 ≤ T, T < 1999.
teaches(john, software, T) :- 1999 ≤ T, T < 2005.
teaches(john, logic, T) :- 2005 ≤ T, T ≤ 2012.
rank(john, instructor, T) :- 1990 ≤ T, T < 2010.
rank(john, professor, T) :- 2010 ≤ T, T < 2014.
Burada ≤ve <her zamanki amaçlanan semantikleriyle birlikte kısıtlama yüklemleridir. Aşağıdaki hedef fıkra haberdar olmak için veritabanını sorgular johnhem öğretildiği logicve oldu professor:
- :- teaches(john, logic, T), rank(john, professor, T).
Çözüm şudur 2010 ≤ T, T ≤ 2012.
Kısıt mantığı programlama, inşaat mühendisliği , makine mühendisliği , dijital devre doğrulama, otomatik zaman çizelgeleme , hava trafik kontrolü ve finans gibi alanlardaki sorunları çözmek için kullanılmıştır . Abdüktif mantık programlama ile yakından ilgilidir .
Eşzamanlı mantık programlama
Eşzamanlı mantık programlama, mantık programlama kavramlarını eşzamanlı programlama ile bütünleştirir . Japon Beşinci Nesil Projesi'nin (FGCS) sistem programlama dilini seçmesi, 1980'lerde gelişimine büyük bir ivme kazandırdı .
Eşzamanlı bir mantık programı, formun bir dizi korumalı Horn cümlesidir :
- H :- G1, …, Gn | B1, …, Bn.
Bağlaç , tümcenin koruyucusu olarak adlandırılır ve taahhüt operatörüdür. Açıklayıcı olarak, korunan Horn cümleleri sıradan mantıksal çıkarımlar olarak okunur: G1, ... , Gn |
- H if G1 and … and Gn and B1 and … and Bn.
Bununla birlikte, prosedürel olarak, H belirli bir hedefle eşleşen birkaç madde olduğunda , tüm maddeler paralel olarak yürütülür ve korumalarının geçerli olup olmadığını kontrol eder . Birden fazla fıkranın muhafızları tutarsa, fıkralardan biri için kararlı bir seçim yapılır ve seçilen fıkranın alt hedefleri ile yürütme devam eder . Bu alt hedefler paralel olarak da yürütülebilir. Bu nedenle, eşzamanlı mantık programlaması, "belirsizliği bilmemek" yerine "belirsizliği önemseme" biçimini uygular. G1, ... , Gn B1, ..., Bn
Örneğin, aşağıdaki eşzamanlı mantık programı, shuffle(Left, Right, Merge) iki listeyi karıştırmak Leftve Rightbunları iki listenin sırasını Mergekoruyan tek bir listede birleştirmek için kullanılabilen bir yüklemi tanımlar Leftve Right:
shuffle([], [], []).
shuffle(Left, Right, Merge) :-
Left = [First | Rest] |
Merge = [First | ShortMerge],
shuffle(Rest, Right, ShortMerge).
shuffle(Left, Right, Merge) :-
Right = [First | Rest] |
Merge = [First | ShortMerge],
shuffle(Left, Rest, ShortMerge).
Burada, []boş listeyi [Head | Tail]temsil eder ve Prolog'da olduğu gibi ilk öğeyi ve Headardından list gelen bir listeyi temsil eder Tail. ( | İkinci ve üçüncü maddelerdeki ilk oluşumunun liste oluşturucusu, ikinci oluşumunun | ise taahhüt operatörü olduğuna dikkat edin.) Program, örneğin, listeleri karıştırmak için [ace, queen, king]ve [1, 4, 2]amaç cümlesini çağırarak kullanılabilir:
shuffle([ace, queen, king], [1, 4, 2], Merge).
Program, örneğin deterministik olmayan tek bir çözüm üretecektir Merge = [ace, queen, 1, king, 4, 2].
Tartışmalı bir şekilde, eşzamanlı mantık programlama mesaj iletmeye dayanmaktadır, bu nedenle Aktörler gibi diğer eşzamanlı mesaj iletme sistemleriyle aynı belirsizliğe tabidir (bkz . Eşzamanlı hesaplamada Belirsizlik ). Carl Hewitt, eşzamanlı mantıksal programlamanın, hesaplama adımlarının mantıksal olarak çıkarılamayacağı anlamında mantığa dayalı olmadığını savundu. Bununla birlikte, eşzamanlı mantıksal programlamada, sonlandıran bir hesaplamanın herhangi bir sonucu, programın mantıksal bir sonucudur ve kısmi bir hesaplamanın herhangi bir kısmi sonucu, programın ve artık hedefin (süreç ağı) mantıksal bir sonucudur. Dolayısıyla hesaplamaların belirsizliği, programın tüm mantıksal sonuçlarının çıkarılamayacağı anlamına gelir.
Eşzamanlı kısıtlama mantığı programlama
Eşzamanlı kısıtlama mantık programlama birleştirir eşzamanlı mantık programlama ve kısıtlama mantık programlama kontrol eşzamanlılık için kısıtlamaları kullanarak. Bir fıkra, fıkranın uygulanabilirliğini engelleyebilecek bir dizi kısıtlama olan bir koruma içerebilir. Birkaç tümcenin korumaları karşılandığında, eşzamanlı kısıtlama mantığı programlaması, yalnızca birini kullanmak için kararlı bir seçim yapar.
Endüktif mantık programlama
Endüktif mantık programlama, pozitif ve negatif örneklerin arka plan bilgisi bağlamında genelleştirilmesiyle ilgilidir: mantık programlarının makine öğrenimi . Mantıksal programlamayı, öğrenmeyi ve olasılığı birleştiren bu alandaki son çalışmalar, istatistiksel ilişkisel öğrenme ve olasılıklı tümevarımsal mantık programlamanın yeni alanına yol açmıştır .
Daha yüksek dereceli mantık programlama
Birçok araştırmacı, yüklem değişkenleri gibi yüksek mertebeden mantıktan türetilen yüksek mertebeden programlama özellikleri ile mantık programlamayı genişletmiştir . Bu tür diller, HiLog ve λProlog Prolog uzantılarını içerir .
Doğrusal mantık programlama
Mantık programlamayı doğrusal mantık içinde temellendirmek, klasik mantığa dayalı olanlardan çok daha anlamlı olan mantık programlama dillerinin tasarımıyla sonuçlandı. Horn yan tümce programları, yalnızca bağımsız değişkenlerdeki yüklemlerdeki değişiklikle durum değişikliğini temsil edebilir. Doğrusal mantık programlamasında, durum değişikliğini desteklemek için ortam doğrusal mantığı kullanılabilir. Doğrusal mantığa dayalı mantık programlama dillerinin bazı erken tasarımları arasında LO [Andreoli & Pareschi, 1991], Lolli, ACL ve Forum [Miller, 1996] bulunmaktadır. Forum, tüm doğrusal mantığın hedefe yönelik bir yorumunu sağlar.
Nesne yönelimli mantık programlama
F-mantık , mantıksal programlamayı nesneler ve çerçeve sözdizimi ile genişletir.
Logtalk , Prolog programlama dilini nesneler, protokoller ve diğer OOP kavramları için destekle genişletir. Arka uç derleyicileri olarak çoğu standart uyumlu Prolog sistemini destekler.
İşlem mantığı programlama
İşlem mantığı , durumu değiştiren güncellemelerin mantıksal bir teorisi ile mantıksal programlamanın bir uzantısıdır. Hem model-teorik anlambilimi hem de prosedürel anlambilimi vardır. Flora-2 sisteminde İşlem mantığının bir alt kümesinin uygulaması mevcuttur . Diğer prototipler de mevcuttur .
Ayrıca bakınız
- Otomatik teorem ispatı
- Kısıt mantık programlama
- kontrol teorisi
- Veri kaydı
- Cuma
- Fonksiyonel programlama
- Bulanık mantık
- Endüktif mantık programlama
- Bilgisayar biliminde mantık ( Formal yöntemleri içerir )
- Mantık programlama dilleri
- Programlanabilir Mantık Denetleyici
- R++
- muhakeme sistemi
- Kural tabanlı makine öğrenimi
- Sağlanabilirlik
- Doğrusal mantık
alıntılar
Kaynaklar
Genel tanıtımlar
- Baral, Ç.; Gelfond, M. (1994). "Mantıksal programlama ve bilgi gösterimi" (PDF) . Mantık Programlama Dergisi . 19-20: 73-148. doi : 10.1016/0743-1066(94)90025-6 .
- Kowalski, RA (1988). "Mantıksal programlamanın ilk yılları" (PDF) . ACM'nin İletişimi . 31 : 38-43. doi : 10.1145/35043.35046 . S2CID 12259230 . [1]
- Lloyd, JW (1987). Mantık Programlamanın Temelleri . (2. baskı) . Springer-Verlag.
Diğer kaynaklar
- John McCarthy. "Sağduyulu programlar". Düşünce Süreçlerinin Mekanizasyonu Sempozyumu . Ulusal Fizik Laboratuvarı. Teddington, İngiltere. 1958.
- Miller, Dale; Nadathur, Gopalan; Pfenning, Frank; Scedrov, Andre (1991). "Mantıksal programlama için bir temel olarak tek tip ispatlar" . Saf ve Uygulamalı Mantık Annals . 51 (1–2): 125–157. doi : 10.1016/0168-0072(91)90068-W .
- Ehud Shapiro (Editör). Eşzamanlı Prolog . MİT Basın. 1987.
- James Slagle. "Tümdengelimli Soru-Cevaplama Programı ile Deneyler" . CACM. Aralık 1965.
- Gabbay, Dov M. ; Hogger, Christopher John; Robinson, JA, ed. (1993-1998). Yapay Zeka ve Mantık Programlamada Mantık El Kitabı .Vols. 1-5, Oxford University Press.
daha fazla okuma
- Carl Hewitt. " Planlayıcıda Bilginin Prosedürel Gömülmesi ". IJCAI 1971.
- Carl Hewitt. " Mantık Programlamanın Tekrarlanan Ölümü ve Neden Yeniden Doğacağı ". AAAI Bahar Sempozyumu: Ne Yanlış ve Neden: Yapay Zeka Araştırma ve Uygulamalarından Dersler 2006: 2–9.
- Evgeny Dantsin, Thomas Eiter, Georg Gottlob, Andrei Voronkov: Mantıksal programlamanın karmaşıklığı ve ifade gücü . ACM Hesaplama. hayatta kal. 33(3): 374–425 (2001)
- Ulf Nilsson ve Jan Maluszynski, Mantık, Programlama ve Prolog