| پارادایم‌های برنامه‌نویسی |
| --- |
| * زبان عملی
* عامل گرا
* آرایه‌گرا
* مبتنی بر اتوماتا
* رایانش همزمان
	+ نسبیت گرایی
* داده‌محور
* اعلانی (تضاد: دستوری)
	+ تابعی
		- منطق تابعی
		- تابعی خالص
	+ منطقی
		- منطقی قیاسی
		- مجموعه جواب
		- منطق همزمان
		- منطق تابعی
		- منطق استقرایی
	+ محدودیتی
		- منطق محدودیتی
			* منطق محدودیت همزمان
	+ جریان داده
		- مبتنی بر جریان
		- واکنشی
	+ هستی‌شناسی
* تشخیص پذیر
* پویا/اجرانامه‌نویسی
* رویدادمحور
* سطح تابع (تضاد: سطح مقدار)
	+ سبک بدون آرگومان
		- الحاقی
* همگانی
* دستوری (تضاد: اعلانی)
	+ رویه‌ای
	+ شیءگرا (OOP)
		- کد چندریخت
* تصمیم گرا
* زبان گرا
	+ خاص دامنه
* ادیبانه
* برنامه‌نویسی زبان طبیعی
* فرا برنامه‌نویسی
	+ خودکار
		- استقرایی
	+ پژواکی
		- صفت گرا
	+ مبتنی بر کلان‌دستور (ماکرو)
	+ خودآرا
* غیر ساخت‌یافته (تضاد: ساخت‌یافته)
	+ آرایه‌ای (برداری)
* غیرقطعی
* رایانش موازی
	+ فرایند گرا
* احتمالی
* کوانتمی
* نظریه مجموعه‌ها
* مبتنی بر پشته
* ساخت‌یافته (تضاد: غیر ساخت‌یافته)
	+ بلوک ساختاری
		- ساخت‌یافته همزمان
	+ شیءگرا (OOP)
		- مبتنی بر بازیگر
		- مبتنی بر کلاس
		- همزمان
		- بر پایه پیش‌نمونه
		- با تفکیک دغدغه‌ها:
			* جنبه‌گرا
			* نقش گرا
			* موضوع گرا
	+ بازگشتی
* نمادین
* سطح مقدار (تضاد: سطح تابع)
 |
| * ن
* ب
* و
 |

**برنامه‌نویسی مجموعه جواب** (به انگلیسی: Answer set programming) با کوته‌نوشت **ASP** نوعی برنامه‌نویسی اعلانی است که به سمت مسائل جستجوی مشکل (در اصل ان‌پی سخت) گرایش دارد. ASP مبتنی بر معناشناسی مدل پایدار (مجموعه جواب) در برنامه‌نویسی منطقی است. در ASP مسائل جستجو به محاسبه مدل‌های پایدار کاهش می‌یابد، و از **حل‌کننده‌های مجموعه جواب** (برنامه‌های تولیدکننده مدل‌های پایدار) برای انجام جستجو استفاده می‌شود. فرایند محاسباتی استفاده شده در طراحی بسیاری از حل‌کننده‌های مجموعه جواب، نوعی بهبود الگوریتم DPLL هستند، و در اصل همیشه خاتمه می‌یابند (برخلاف ارزیابی پرسمان در پرولوگ، که می‌تواند منجر به حلقه بی‌پایان شود).

در مفهوم عمومی‌تر، ASP شامل همه کاربردهای مجموعه جواب در نمایش دانش است، و از ارزیابی پرسمان شبه-پرولوگ برای حل مسائلی که در این کاربردها بروز می‌کند، استفاده می‌کند.

تاریخچه
-------

یکی از مثال‌های اولیه برنامه‌نویسی مجموعه جواب، روش برنامه‌ریزی بود که در سال ۱۹۹۳ توسط دیموپولوس، نبل و کوهلر ارائه شد. دیدگاه آن‌ها مبتنی بر رابطه بین برنامه‌ها و مدل‌های پایدار بود. سوینینن و نیملا آنچه امروزه برنامه‌نویسی مجموعه جواب نامیده می‌شود را به مسئله پیکربندی محصول اعمال کرد. استفاده از حل‌کننده‌های مجموعه جواب برای جستجو توسط مارک و تروشسینسکی به عنوان یک پارادایم برنامه‌نویسی، اولین بار در مقاله ای که چشم‌انداز ۲۵ ساله دربارهٔ پارادایم برنامه‌نویسی منطقی در سال ۱۹۹۹ منتشر شد، و در [Niemelä 1999] شناسایی شد. در واقع اصطلاح‌شناسی جدید «مجموعه جواب» به جای «مدل پایدار» اولین بار توسط لیفشیتس در یک مقاله که نمایش دهنده مجلدهای پیش‌نگرانه در مقاله مارک-تروشچینسکی بود، پیشنهاد شد.

زبان برنامه‌نویسی مجموعه جواب AnsProlog
---------------------------------------

Lparse نام برنامه‌ای است که در اصل به عنوان یک ابزار زمینه‌ای (front-end) برای حل‌کننده مجموعه جواب smodels ساخته شده‌است. امروزه به زبانی که Lparse می‌پذیرد، معمولاً AnsProlog گفته می‌شود، که کوته‌نوشتی برای عبارت «برنامه‌نویسی مجموعه جواب در منطق» است. از این زبان امروزه در خیلی از حل‌کننده‌های مجموعه جواب دیگر، شامل assat, clasp, cmodels, gNt, nomore++ و pbmodels استفاده می‌شود. (اما زبان dlv یک اسثتثنا است زیرا نحو برنامه‌های ASP نوشته شده به dlv متفاوت است).

برنامه AnsProlog شامل قواعدی از حالت

```
<head> :- <body> .

```
نماد `:-` (یعنی اگر) اگر قسمت بدنه (یعنی `<body>`) خالی باشد، حذف می‌شود؛ به این نوع از قواعد، «واقعیت» یا fact گفته می‌شود. ساده‌ترین نوع قواعد Lparse, قواعد محدودیت‌دار هستند.

یک ساختار مفید دیگر که در این زبان وجود دارد، مفهوم «گزینه یا choice» است. برای مثال، قاعده گزینه

```
{p,q,r}.

```
می‌گوید: به صورت دلخواه انتخاب کنید که کدامیک از اتم‌های {\displaystyle p,q,r} در مدل پایدار شامل بشود. برنامه Lparse ای که شامل این قاعده انتخاب است و هیچ قاعده دیگری ندارد، به تعداد ۸ عدد مدل پایدار دارد-که زیرمجموعه‌های دلخواه {\displaystyle \{p,q,r\}} هستند. تعریف یک مدل پایدار را می‌توان به برنامه‌های دارای قواعد انتخاب تعمیم داد. قواعد گزینه می‌تواند به صورت اختصاری از کوتاه شده‌ای از فرمول‌های گزاره‌ای تحت معناشناسی مدل پایدار رفتار کنند. برای مثال، قاعده گزینه بالا را می‌توان به صورت نوع مختصری برای عطف سه فرمول «اصل طرد ثالث» در نظر گرفت:

{\displaystyle (p\lor \neg p)\land (q\lor \neg q)\land (r\lor \neg r).}
زبان Lparse به ما امکان نوشتن قواعد گزینه «محدودشده» را نیز می‌دهد، مثل

```
1{p,q,r}2.

```
این قاعده می‌گوید: حداقل یکی از اتم‌های {\displaystyle p,q,r} ، اما نه بیشتر از ۲ تا اتم را انتخاب کنید. معنای این قاعده تحت معناشناسی مدل پایدار توسط فرمول گزاره‌ای زیر نمایش می‌یابد:

{\displaystyle (p\lor \neg p)\land (q\lor \neg q)\land (r\lor \neg r)}
{\displaystyle \land \,(p\lor q\lor r)\land \neg (p\land q\land r).}
محدوده‌های کاردینالیتی (تعدادی)، در بدنه یک قاعده هم قابل استفاده اند، برای مثال

```
:- 2{p,q,r}.

```
اگر این محدودیت را به برنامه Lparse اضافه کنیم، مدل‌های پایداری که حداقل دو اتم {\displaystyle p,q,r} را حذف می‌کند. معنی این قاعده را می‌توان توسط توسط فرمول گزاره‌ای زیر نمایش داد:

{\displaystyle \neg ((p\land q)\lor (p\land r)\lor (q\land r)).}
در Lparse از متغیرها (که مثل پرولوگ بزرگ هستند) برای مختصرنویسی مجموعه قاعده‌هایی استفاده می‌شود که از الگوی مشابهی پیروی می‌کنند، همچنین برای مختصرنویسی مجموعه اتم‌ها در داخل یک قاعده مشابه نیز استفاده می‌شود. برای مثال، برنامه Lparse زیر

```
p(a). p(b). p(c).
q(X) :- p(X), X!=a.

```

معنای مشابهی با

```
p(a). p(b). p(c).
q(b). q(c).

```

دارد. برنامه زیر

```
p(a). p(b). p(c).
{q(X):-p(X)}2.

```

یک مختصرنویسی برای

```
p(a). p(b). p(c).
{q(a),q(b),q(c)}2.

```

است، یک «محدوده یا range» حالت زیر را دارد:

```
(start..end)

```

که در آن start و end عبارات حسابی ثابت مقدار هستند. یک محدوده یک میانبر نمادین است که در اصل برای تعریف دامنه‌های عددی، به روش سازگار، از آن استفاده می‌شود. برای مثال، واقعیت زیر

```
a(1..3).

```

یک میانبر برای

```
a(1). a(2). a(3).

```

است. با معناشناسی مشابه، محدوده‌ها را در بدنه قاعده نیز می‌توان استفاده نمود.

یک «لیترال شرطی» فرم زیر را دارد:

```
p(X):q(X)

```

اگر گسترش q به صورت {q(a1),q(a2), … ,q(aN)} باشد، شرط بالا به صورت معنایی معادل نوشتن {p(a1),p(a2), … ,p(aN)} در محل شرط است. برای مثال

```
q(1..2).
a :- 1 {p(X):q(X)}.

```

یک میانبر برای

```
q(1). q(2).
a :- 1 {p(1), p(2)}.

```

است.

تولید مدل‌های پایدار
--------------------

برای یافتن یک مدل پایدار برنامه Lparse که در فایل `${filename}` ذخیره شده‌است، ما از فرمان زیر استفاده می‌کنیم

```
% lparse ${filename} | smodels

```

گزینه 0 به smodels دستور می‌دهد تا «همه» مدل‌های پایدار برنامه را پیدا کند. برای مثال، اگر فایل `test` شامل این قواعد باشد

```
1{p,q,r}2.
s :- not p.

```

آنوقت فرمان این خروجی را می‌سازد:

```
% lparse test | smodels 0
Answer: 1
Stable Model: q p
Answer: 2
Stable Model: p
Answer: 3
Stable Model: r p
Answer: 4
Stable Model: q s
Answer: 5
Stable Model: r s
Answer: 6
Stable Model: r q s

```

مثال‌هایی از برنامه‌های ASP
---------------------------

### رنگ‌آمیزی گراف

رنگ‌آمیزی n تایی یک گراف {\displaystyle G=\left\langle V,E\right\rangle } یک تابع {\displaystyle \mathrm {color} :V\to \{1,\dots ,n\}} such that {\displaystyle \mathrm {color} (x)\neq \mathrm {color} (y)} برای هر جفت از راس‌های مجاور {\displaystyle (x,y)\in E} است. ما می‌خواهیم از ASP استفاده کنیم تا یک رنگ‌آمیزی nتایی از یک گراف داده شده را پیدا کنیم (یا تعیین کنیم که چنین رنگ‌آمیزی وجود ندارد).

این موضوع از طریق برنامه Lparse زیر قابل انجام است:

```
c(1..n).
1 {color(X,I) : c(I)} 1 :- v(X).
:- color(X,I), color(Y,I), e(X,Y), c(I).

```

خط ۱ تعریف کننده اعداد {\displaystyle 1,\dots ,n} به عنوان رنگ‌ها است. بر اساس قاعده انتخاب موجود در خط ۲، یک رنگ یکتا i را باید به هر راس x انتساب داد. محدودیت موجود در خط ۳ از انتساب رنگ مشابه به راس‌های x و y، موقعی که یک یال آن‌ها را به هم متصل کند، جلوگیری می‌کند.

اگر ما این فایل را با یک تعریف از G مثل تعریف زیر ترکیب کنیم:

```
v(1..100). % 1,...100 are vertices
e(1,55). % there is an edge from 1 to 55
.. .

```

و smodels را روی آن اجرا کنیم، که مقدار عددی n در خط فرمان تعیین می‌شود، آنوقت اتم‌های دارای فرم {\displaystyle \mathrm {color} (\dots ,\dots )} موجود در خروجی smodels، نمایش‌دهنده رنگ‌آمیزی nتایی از G است.

برنامه موجود در این مثال نمایش‌دهنده سازمان «تولید-و-آزمون» است که معمولاً در برنامه‌های ASP ساده یافت می‌شود. قاعده گزینه یک مجموعه از «جواب‌های بالقوه» را تعریف می‌کند- که یک فرامجموعه ساده از مجموعه جواب‌ها برای مسئله جستجوی معین است. در ادامه، یک محدودیت آمده‌است، که همه جواب‌های بالقوه که قابل قبول نیستند را حذف می‌کند. با این حال، فرایند جستجوی استفاده شده در smodels و دیگر حل‌کننده‌های مجموعه جواب براساس سعی و خطا نیستند.

### کلیک‌های بزرگ

یک کلیک در یک گراف یک مجموعه از راس‌های مجاور جفت‌شده هستند. برنامه Lparse زیر یک کلیک با سایز {\displaystyle \geq n} را در یک گراف داده شده می‌یابد، یا اعلام می‌کند که هیچ کلیکی وجود ندارد:

```
n {in(X) : v(X)}.
:- in(X), in(Y), v(X), v(Y), X!=Y, not e(X,Y), not e(Y,X).

```

این یک مثال دیگر برای سازمان «تولید و آزمون» است. قاعده گزینه در خط ۱ «تولیدکننده» همه مجموعه‌های شامل {\displaystyle \geq n} راس است. محدودیت خط ۲، همه مجموعه‌هایی که کلیک نیستند را «هرس می‌کند».

### دور همیلتونی

یک دور همیلتونی در یک گراف جهت‌دار یک دور است که از هر راس گراف دقیقاً یکبار عبور می‌کند. برنامه Lparse زیر را می‌توان برای یافتن یک دور همیلتونی در یک گراف جهت‌دار معین استفاده کرد (اگر موجود باشد)؛ فرض می‌کنیم که 0 یکی از راس‌ها باشد.

```
{in(X,Y)} :- e(X,Y).

:- 2 {in(X,Y) : e(X,Y)}, v(X).
:- 2 {in(X,Y) : e(X,Y)}, v(Y).

r(X) :- in(0,X), v(X).
r(Y) :- r(X), in(X,Y), e(X,Y).

:- not r(X), v(X).

```

قاعده گزینه در خط ۱ همه زیرمجموعه‌های مجموعه یال‌ها را «تولید می‌کند». سه محدودیت، زیرمجموعه‌هایی که دور همیلتونی نیستند را «هرس می‌کنند». آخرین آن‌ها از گزارهٔ کمکی {\displaystyle r(x)} (x قابل دستیابی از 0 است) استفاده می‌کند تا راس‌هایی که این شرط را برآورده نمی‌کنند را ممنوع‌سازی کند. این گزاره در خطوط ۶ و ۷ به صورت بازگشتی تعریف شده‌اند.

این برنامه یک مثال از سازمان کلی‌تر «تولید، تعریف، و آزمون» است: شامل تعریف یک گزاره کمکی است که به ما کمک می‌کند تا همه راه‌حل‌های بالقوه «بد» را حذف کند.

### تجزیه‌کننده وابستگی

در پردازش زبان‌های طبیعی، «تجزیه‌کننده مبتنی بر وابستگی» را می‌توان توسط یک برنامه ASP فرمول‌دهی کرد. کد زیر جمله لاتین "Puella pulchra in villa linguam latinam discit" (یعنی «دختر زیبا در ویلا زبان لاتین می‌آموزد») را تجزیه می‌کند. درخت نحوی توسط گزاره‌های «arc» بیان می‌شوند، که نمایش‌دهنده وابستگی‌های بین کلمات موجود در جمله است. ساختار محاسبه شده یک درخت ریشه‌دار با مرتبه خطی است.

```
% \*\*\*\*\*\*\*\*\*\* input sentence \*\*\*\*\*\*\*\*\*\*
word(1, puella). word(2, pulchra). word(3, in). word(4, villa). word(5, linguam). word(6, latinam). word(7, discit).
% \*\*\*\*\*\*\*\*\*\* lexicon \*\*\*\*\*\*\*\*\*\*
1{ node(X, attr(pulcher, a, fem, nom, sg));
   node(X, attr(pulcher, a, fem, abl, sg)) }1 :- word(X, pulchra).
node(X, attr(latinus, a, fem, acc, sg)) :- word(X, latinam).
1{ node(X, attr(puella, n, fem, nom, sg));
   node(X, attr(puella, n, fem, abl, sg)) }1 :- word(X, puella).
1{ node(X, attr(villa, n, fem, nom, sg));
   node(X, attr(villa, n, fem, abl, sg)) }1 :- word(X, villa).
node(X, attr(linguam, n, fem, acc, sg)) :- word(X, linguam).
node(X, attr(discere, v, pres, 3, sg)) :- word(X, discit).
node(X, attr(in, p)) :- word(X, in).
% \*\*\*\*\*\*\*\*\*\* syntactic rules \*\*\*\*\*\*\*\*\*\*
0{ arc(X, Y, subj) }1 :- node(X, attr(\_, v, \_, 3, sg)), node(Y, attr(\_, n, \_, nom, sg)).
0{ arc(X, Y, dobj) }1 :- node(X, attr(\_, v, \_, 3, sg)), node(Y, attr(\_, n, \_, acc, sg)).
0{ arc(X, Y, attr) }1 :- node(X, attr(\_, n, Gender, Case, Number)), node(Y, attr(\_, a, Gender, Case, Number)).
0{ arc(X, Y, prep) }1 :- node(X, attr(\_, p)), node(Y, attr(\_, n, \_, abl, \_)), X < Y.
0{ arc(X, Y, adv) }1 :- node(X, attr(\_, v, \_, \_, \_)), node(Y, attr(\_, p)), not leaf(Y).
% \*\*\*\*\*\*\*\*\*\* guaranteeing the treeness of the graph \*\*\*\*\*\*\*\*\*\*
1{ root(X):node(X, \_) }1.
:- arc(X, Z, \_), arc(Y, Z, \_), X != Y.
:- arc(X, Y, L1), arc(X, Y, L2), L1 != L2.
path(X, Y) :- arc(X, Y, \_).
path(X, Z) :- arc(X, Y, \_), path(Y, Z).
:- path(X, X).
:- root(X), node(Y, \_), X != Y, not path(X, Y).
leaf(X) :- node(X, \_), not arc(X, \_, \_).

```

استانداردسازی زبان و مسابقه ASP
-------------------------------

کارگروه استانداردسازی ASP یک مشخصات زبانی استاندارد به نام ASP-Core-2 تولید کردند، که بر اساس آن سامانه‌های ASP تازه همگرا می‌شدند. ASP-Core-2 زبان مرجع برای مسابقه برنامه‌نویسی مجموعه جواب است، که در آن حل‌کننده‌های ASP به صورت دوره‌ای، دربرابر تعدادی از مسائل مرجع، محک‌زنی می‌شدند.

مقایسه پیاده‌سازی‌ها
--------------------

سامانه‌ای قدیمی، مثل Smodels برای یافتن جواب‌ها از پس‌گرد استفاده می‌کردند. وقتیکه نظریه و کاربرد حل‌کننده‌های SAT بولی تکامل یافتند، تعدادی از حل‌کننده‌های ASP روی حل‌کننده‌های SAT ساخته شدند، که شامل ASSAT و Cmodels بودند. این حل‌کننده‌ها فرمول ASP را به گزاره‌های SAT تبدیل می‌کردند، سپس حل‌کننده SAT اعمال می‌شد، و سپس جواب‌ها را به حالت ASP باز تبدیل می‌کردند. سامانه‌های جدیدتر، مثل Clasp، از یک دیدگاه ترکیبی استفاده می‌کند، که از الگوریتم‌های مغایرت‌گرای الهام‌گرفته از SAT استفاده می‌کرد، و در آن نیازی به تبدیل کامل به یک حالت بولی-منطقی نبود. این دیدگاه‌ها به ما امکان بهبود کارایی قابل توجهی را می‌دهد، که معمولاً با یک مرتبه بزرگی بهتر از الگوریتم‌های پس‌گرد قدیمی بود.

پروژه پوتسکو (Potassco) به صورت چتری برای بسیاری از سامانه‌های زیر عمل می‌کند، که شامل *clasp*، سامانه‌های زیرین (*gringo*)، سامانه‌های افزایشی (*iclingo*)، حل‌کننده‌های محدودیتی (*clingcon*)، زبان عملی برای کامپایلرهای ASP یا (*coala*)، پیاده‌سازی‌های MPI توزیع‌شده (*claspar*) و خیلی موارد دیگر است.

بیشتر این سامانه‌ها از متغیرها پشتیبانی می‌کنند، اما فقط به صورت غیرمستقیم، با تحمیل زمینه، با استفاده از یک سامانه زمینی مثل *Lparse* or *gringo* به عنوان یک front-end. نیاز به زمینه می‌تواند منجر به یک انفجار ترکیبیاتی از بندها شود؛ از این رو سامانه‌هایی که از زمینه‌های on-the-fly استفاده می‌کنند، می‌توانند یک مزیت داشته باشند.

پیاده‌سازی‌های پرسمان‌گرا از برنامه‌نویسی مجموعه جواب، مثل سامانه Galliwasp و s(ASP) و s(CASP) از در اصل زمینه جلوگیری می‌کنند، این کار از طریق ترکیبی از رزلوشن و کواینداکشن انجام می‌شود.


| Platform | Features | Mechanics |
| --- | --- | --- |
| Name | OS | Licence | Variables | Function symbols | Explicit sets | Explicit lists | Disjunctive (choice rules) support |  |
| ASPeRiX بایگانی‌شده در ۸ نوامبر ۲۰۱۶ توسط Wayback Machine | Linux | GPL | آری |  |  |  | نه | on-the-fly grounding |
| ASSAT | Solaris | Freeware |  |  |  |  |  | SAT-solver based |
| Clasp Answer Set Solver | Linux, macOS, Windows | MIT License | Yes, in Clingo | آری | نه | نه | آری | incremental, SAT-solver inspired (nogood, conflict-driven) |
| Cmodels | Linux, Solaris | GPL | Requires grounding |  |  |  | آری | incremental, SAT-solver inspired (nogood, conflict-driven) |
| diff-SAT | Linux, macOS, Windows (Java Virtual Machine) | MIT License | Requires grounding |  |  |  | آری | SAT-solver inspired (nogood, conflict-driven). Supports solving probabilistic problems and answer set sampling |
| DLV | Linux, macOS, Windows | free for academic and non-commercial educational use, and for non-profit organizations | آری | آری | نه | نه | آری | not Lparse compatible |
| DLV-Complex | Linux, macOS, Windows | GPL |  | آری | آری | آری | آری | built on top of DLV — not Lparse compatible |
| GnT | Linux | GPL | Requires grounding |  |  |  | آری | built on top of smodels |
| Jekejeke بایگانی‌شده در ۳ ژوئن ۲۰۲۱ توسط Wayback Machine | Linux, macOS, Windows (Java Virtual Machine) | Proprietary | آری | آری |  |  | آری | DPLL Variant via Safe Forward Chaining |
| nomore++ | Linux | GPL |  |  |  |  |  | combined literal+rule-based |
| Platypus | Linux, Solaris, Windows | GPL |  |  |  |  |  | distributed, multi-threaded nomore++, smodels |
| Pbmodels | Linux | ? |  |  |  |  |  | pseudo-boolean solver based |
| Smodels | Linux, macOS, Windows | GPL | Requires grounding | نه | نه | نه | نه |  |
| Smodels-cc | Linux | ? | Requires grounding |  |  |  |  | SAT-solver based; smodels w/conflict clauses |
| Sup | Linux | ? |  |  |  |  |  | SAT-solver based |

پانویس
------

1. ↑  Baral, Chitta (2003). *Knowledge Representation, Reasoning and Declarative Problem Solving*. Cambridge University Press. ISBN 978-0-521-81802-5.
2. ↑  Gelfond, Michael (2008). "Answer sets". In van Harmelen, Frank; Lifschitz, Vladimir; Porter, Bruce (eds.). *Handbook of Knowledge Representation*. Elsevier. pp. 285–316. ISBN 978-0-08-055702-1. as PDF بایگانی‌شده در ۲۰۱۶-۰۳-۰۳ توسط Wayback Machine
3. ↑  Dimopoulos, Y.; Nebel, B.; Köhler, J. (1997). "Encoding planning problems in non-monotonic logic programs". In Steel, Sam; Alami, Rachid (eds.). *Recent Advances in AI Planning: 4th European Conference on Planning, ECP'97, Toulouse, France, September 24–26, 1997, Proceedings*. Lecture Notes in Computer Science: Lecture Notes in Artificial Intelligence. Vol. 1348. Springer. pp. 273–285. ISBN 978-3-540-63912-1. as Postscript
4. ↑  Subrahmanian, V.S.; Zaniolo, C. (1995). "Relating stable models and AI planning domains". In Sterling, Leon (ed.). *Logic Programming: Proceedings of the Twelfth International Conference on Logic Programming*. MIT Press. pp. 233–247. ISBN 978-0-262-69177-2. as Postscript
5. ↑  Soininen, T.; Niemelä, I. (1998), *Formalizing configuration knowledge using rules with choices* (Postscript), Laboratory of Information Processing Science, Helsinki University of Technology
6. ↑  Marek, V.; Truszczyński, M. (1999). "Stable models and an alternative logic programming paradigm". In Apt, Krzysztof R. (ed.). *The Logic programming paradigm: a 25-year perspective* (PDF). Springer. pp. 169–181. arXiv:cs/9809032. ISBN 978-3-540-65463-6.
7. ↑  Niemelä, I. (1999). "Logic programs with stable model semantics as a constraint programming paradigm" (Postscript,gzipped). *Annals of Mathematics and Artificial Intelligence*. **25** (3/4): 241–273. doi:10.1023/A:1018930122475.
8. ↑  Lifschitz, V. (1999). "Action Languages, Answer Sets, and Planning". `{{cite journal}}`: Cite journal requires `|journal=` (help) In (Apt 1999، صص. 357–374)
9. ↑  Crick, Tom (2009). *Superoptimisation: Provably Optimal Code Generation using Answer Set Programming* (PDF) (Ph.D.). University of Bath. Docket 20352. Archived from the original (PDF) on 2016-03-04. Retrieved 2011-05-27.
10. ↑  Rogelio Davila. "AnsProlog, an overview" (PowerPoint).
11. ↑  Niemelä, I.; Simons, P.; Soinenen, T. (2000). "Stable model semantics of weight constraint rules". In Gelfond, Michael; Leone, Nicole; Pfeifer, Gerald (eds.). *Logic Programming and Nonmonotonic Reasoning: 5th International Conference, LPNMR '99, El Paso, Texas, USA, December 2–4, 1999 Proceedings*. Lecture Notes in Computer Science: Lecture Notes in Artificial Intelligence. Vol. 1730. Springer. pp. 317–331. ISBN 978-3-540-66749-0. as Postscript
12. ↑  Ferraris, P.; Lifschitz, V. (January 2005). "Weight constraints as nested expressions". *Theory and Practice of Logic Programming*. **5** (1–2): 45–74. arXiv:cs/0312045. doi:10.1017/S1471068403001923. as Postscript
13. ↑  "Dependency parsing". Archived from the original on 2015-04-15. Retrieved 2015-04-15.
14. ↑  "ASP-Core-2 Input Language Specification" (PDF). Retrieved 14 May 2018.
15. ↑  Marple, Kyle.; Gupta, Gopal. (2012). "Galliwasp: A Goal-Directed Answer Set Solver". In Albert, Elvira (ed.). *Logic-Based Program Synthesis and Transformation, 22nd International Symposium, LOPSTR 2012, Leuven, Belgium, September 18-20, 2012, Revised Selected Papers*. Springer. pp. 122–136.
16. ↑  Marple, K.; Salazar, E.; Gupta, G. (2017). "Computing Stable Models of Normal Logic Programs Without Grounding". *CoRR*. abs/1709.00501.
17. ↑  Arias, J.; Carro, M.; Salazar, E.; Marple, K.; Gupta, G. (2018). "Constraint Answer Set Programming without Grounding". *Theory and Practice of Logic Programming*. **18** (3–4): 337–354.
18. 1 2  "DLV System company page". DLVSYSTEM s.r.l. Retrieved 16 November 2011.

منابع
-----

مشارکت‌کنندگان ویکی‌پدیا. «Answer set programming». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۳ ژوئن ۲۰۲۱.