|
|
Line 1: |
Line 1: |
| | | I would like to introduce myself to you, I am [http://165.132.39.93/xe/visitors/372912 free psychic] Jayson Simcox but I don't like when individuals use my full name. To play lacross is something I truly [http://conniecolin.com/xe/community/24580 psychic readings] enjoy doing. Ohio is exactly where her home is. Distributing manufacturing is where her primary income comes from.<br><br>Also visit my weblog ... certified psychics ([http://hknews.classicmall.com.hk/groups/some-simple-tips-for-personal-development-progress/ http://hknews.classicmall.com.hk/groups/some-simple-tips-for-personal-development-progress]) |
| {{Programming paradigms}}
| |
| | |
| '''Answer set programming''' (ASP) is a form of [[declarative programming]] oriented towards difficult (primarily [[NP-hard]]) [[search algorithm|search problems]]. It is based on the [[stable model semantics|stable model]] (answer set) semantics of [[logic programming]]. In ASP, search problems are reduced to computing stable models, and ''answer set solvers'' — programs for generating stable models—are used to perform search. The computational process employed in the design of many answer set solvers is an enhancement of the [[DPLL algorithm]] and, in principle, it always terminates (unlike [[Prolog]] query evaluation, which may lead to an [[infinite loop]]).
| |
| | |
| In a more general sense, ASP includes all applications of answer sets to [[knowledge representation]]<ref>{{cite book |first=Chitta |last=Baral |title=Knowledge Representation, Reasoning and Declarative Problem Solving |url=http://books.google.com/books?id=iTS4ZdEpGZQC |year=2003 |publisher=Cambridge University Press |isbn=978-0-521-81802-5}}</ref><ref>{{cite book |first=Michael |last=Gelfond |chapter=Answer sets |editor1-first=Frank |editor1-last=van Harmelen |editor2-first=Vladimir |editor2-last=Lifschitz |editor3-first=Bruce |editor3-last=Porter |title=Handbook of Knowledge Representation |url=http://books.google.com/books?id=xwBDylHhJhYC&pg=PA285 |year=2008 |publisher=Elsevier |isbn=978-0-08-055702-1 |pages=285–316}} [http://www.depts.ttu.edu/cs/research/krlab/pdfs/papers/gel07b.pdf as PDF]</ref> and the use of Prolog-style query evaluation for solving problems arising in these applications.
| |
| | |
| ==History==
| |
| | |
| The [[Automated planning and scheduling|planning]] method proposed by Dimopoulos, Nebel and Köhler<ref>{{cite book |first1=Y. |last1=Dimopoulos |author2link=Bernhard Nebel |first2=B. |last2=Nebel |first3=J. |last3=Köhler |chapter=Encoding planning problems in non-monotonic logic programs |pages=273–285 |editor1-first=Sam |editor1-last=Steel |editor2-first=Rachid |editor2-last=Alami |title=Recent Advances in AI Planning: 4th European Conference on Planning, ECP'97, Toulouse, France, September 24–26, 1997, Proceedings |url=http://books.google.com/books?id=QSBoQgAACAAJ |year=1997 |publisher=Springer |isbn=978-3-540-63912-1 |volume=1348 |series=Lecture notes in computer science: Lecture notes in artificial intelligence}} [ftp://ftp.informatik.uni-freiburg.de/documents/papers/ki/dimopoulos-etal-ecp97.ps.gz as Postscript]</ref> is an early example of answer set programming.{{when|date=February 2013}} Their approach is based on the relationship between plans and stable models.<ref>{{cite book |first1=V.S. |last1=Subrahmanian |first2=C. |last2=Zaniolo |chapter=Relating stable models and AI planning domains |editor-first=Leon |editor-last=Sterling |title=Logic Programming: Proceedings of the Twelfth International Conference on Logic Programming |chapterurl=http://books.google.com/books?id=vpGEyZWP1dYC&pg=PA233 |year=1995 |publisher=MIT Press |isbn=978-0-262-69177-2 |pages=233–247}} [http://www.cs.ucla.edu/%7Ezaniolo/papers/iclp95.ps as Postscript]</ref> Soininen and Niemelä<ref>{{cite techreport |first1=T. |last1=Soininen |first2=I. |last2=Niemelä |title=Formalizing configuration knowledge using rules with choices |number=TKO-B142 |institution=Laboratory of Information Processing Science, Helsinki University of Technology |year=1998 |url=http://www.tcs.hut.fi/~ini/papers/sn-faanmr98.ps.gz |format=Postscript}}</ref> applied what is now known as answer set programming to the problem of product configuration. The use of answer set solvers for search was identified as a new programming paradigm by Marek and Truszczyński in a paper that appeared in a 25-year perspective on the logic programming paradigm published in 1999 <ref>{{cite book |first1=V. |last1=Marek |first2=M. |last2=Truszczyński |chapter=Stable models and an alternative logic programming paradigm |editor-first=Krzysztof R. |editor-last=Apt |title=The Logic programming paradigm: a 25-year perspective |url=http://books.google.com/books?id=GIhQAAAAMAAJ |year=1999 |publisher=Springer |isbn=978-3-540-65463-6 |ref=harv |chapterurl=http://xxx.lanl.gov/pdf/cs/9809032 |format=PDF |pages=169–181 |ref={{harvid|Apt|1999}}}}</ref> and in [Niemelä 1999].<ref>{{cite journal |first=I. |last=Niemelä |title=Logic programs with stable model semantics as a constraint programming paradigm |journal=Annals of Mathematics and Artificial Intelligence |volume=25 |pages=241–273 |year=1999 |doi=10.1023/A:1018930122475 |url=http://www.tcs.hut.fi/~ini/papers/lp-csp-long.ps |format=Postscript}}</ref> Indeed, the new terminology of "answer set" instead of "stable model" was first proposed by Lifschitz<ref>{{cite paper |first=V. |last=Lifschitz |title=Action Languages, Answer Sets, and Planning |year=1999}} In {{harvnb|Apt|1999|pp=357–374}}</ref> in a paper appearing in the same retrospective volume as the Marek-Truszczynski paper.
| |
| | |
| ==Answer set programming language AnsProlog ==
| |
| | |
| [http://www.tcs.hut.fi/Software/smodels/lparse.ps Lparse] is the name of the program that was originally created as grounding tool (front-end) for the answer set solver [http://www.tcs.hut.fi/Software/smodels/ smodels]. The language that Lparse accepts is now commonly called AnsProlog*,<ref>{{Cite thesis |type=Ph.D. |title=Superoptimisation: Provably Optimal Code Generation using Answer Set Programming |url=http://opus.bath.ac.uk/20352/1/UnivBath_PhD_2009_T_Crick.pdf |last=Crick |first=Tom |year=2009 |publisher=University of Bath |docket=20352 }}</ref> short for ''Answer Set Programming in Logic''.<ref>{{cite web |author=Rogelio Davila |title=AnsProlog, an overview |url=http://www.rogeliodavila.com/Programacion%20Logica/PL%20Notas/AnsProlog%20Overview.ppt |format=PowerPoint}}</ref> It is now used in the same way in many other answer set solvers, including [http://assat.cs.ust.hk/ assat], [http://www.cs.uni-potsdam.de/clasp/ clasp], [http://www.cs.utexas.edu/users/tag/cmodels/ cmodels], [http://www.tcs.hut.fi/Software/gnt/ gNt], [http://www.cs.uni-potsdam.de/nomore/ nomore++] and [http://www.cs.uky.edu/ai/pbmodels/ pbmodels]. ([http://www.dbai.tuwien.ac.at/proj/dlv/ dlv] is an exception; the syntax of ASP programs written for dlv is somewhat different.)
| |
| | |
| An AnsProlog program consists of rules of the form
| |
| | |
| <source lang="prolog">
| |
| <head> :- <body> .
| |
| </source>
| |
| | |
| The symbol <code>:-</code> ("if") is dropped if <code><body></code> is empty; such rules are called ''facts''. The simplest kind of Lparse rules are [[Stable model semantics#Programs with constraints|rules with constraints]].
| |
| | |
| One other useful construct included in this language is ''choice''. For instance, the choice rule
| |
| | |
| <source lang="prolog">
| |
| {p,q,r}.
| |
| </source>
| |
| | |
| says: choose arbitrarily which of the atoms <math>p,q,r</math> to include in the stable model. The lparse program that contains this choice rule and no other rules has 8 stable models—arbitrary subsets of <math>\{p,q,r\}</math>. The definition of a stable model was generalized to programs with choice rules.<ref>{{cite book |first1=I. |last1=Niemelä |first2=P. |last2=Simons |first3=T. |last3=Soinenen |chapter=Stable model semantics of weight constraint rules |editor1-first=Michael |editor1-last=Gelfond |editor2-first=Nicole |editor2-last=Leone |editor3-first=Gerald |editor3-last=Pfeifer |title=Logic Programming and Nonmonotonic Reasoning: 5th International Conference, LPNMR '99, El Paso, Texas, USA, December 2–4, 1999 Proceedings |chapterurl=http://books.google.com/books?id=Abj-OpFeDjQC&pg=PA317 |year=2000 |publisher=Springer |isbn=978-3-540-66749-0 |pages=317–331 |series=Lecture notes in computer science: Lecture notes in artificial intelligence |volume=1730}} [http://www.tcs.hut.fi/~ini/papers/nss-lpnmr99-www.ps.gz as Postscript]</ref> Choice rules can be treated also as abbreviations for [[Stable_model_semantics#Stable_models_of_a_set_of_propositional_formulas|propositional formulas under the stable model semantics]].<ref>{{cite journal |first1=P. |last1=Ferraris |first2=V. |last2=Lifschitz |title=Weight constraints as nested expressions |journal=Theory and Practice of Logic Programming |volume=5 |issue=1-2 |pages=45–74 |date=January 2005 |doi=10.1017/S1471068403001923 |url=http://arxiv.org/pdf/cs/0312045 |format=PDF}} [http://www.cs.utexas.edu/users/vl/papers/weight.ps as Postscript]</ref> For instance, the choice rule above can be viewed as shorthand for the conjunction of three "[[excluded middle]]" formulas:
| |
| | |
| :<math>(p\lor\neg p)\land(q\lor\neg q)\land(r\lor\neg r).</math>
| |
| | |
| The language of lparse allows us also to write "constrained" choice rules, such as
| |
| | |
| <source lang="prolog">
| |
| 1{p,q,r}2.
| |
| </source>
| |
| | |
| This rule says: choose at least 1 of the atoms <math>p,q,r</math>, but not more than 2. The meaning of this rule under the stable model semantics is represented by the [[propositional formula]]
| |
| | |
| :<math>(p\lor\neg p)\land(q\lor\neg q)\land(r\lor\neg r)</math>
| |
| | |
| ::<math>\land\,(p\lor q\lor r)\land\neg(p\land q\land r).</math>
| |
| | |
| Cardinality bounds can be used in the body of a rule as well, for instance:
| |
| | |
| <source lang="prolog">
| |
| :- 2{p,q,r}.
| |
| </source>
| |
| | |
| Adding this constraint to an Lparse program eliminates the stable models that contain at least 2 of the atoms <math>p,q,r</math>. The meaning of this rule can be represented by the propositional formula
| |
| | |
| ::<math>\neg((p\land q)\lor(p\land r)\lor(q\land r)).</math>
| |
| | |
| Variables (capitalized, as in [[Prolog#Data types|Prolog]]) are used in Lparse to abbreviate collections of rules that follow the same pattern, and also to abbreviate collections of atoms within the same rule. For instance, the Lparse program
| |
| | |
| <source lang="prolog">
| |
| p(a). p(b). p(c).
| |
| q(X) :- p(X), X!=a.
| |
| </source>
| |
| | |
| has the same meaning as
| |
| | |
| <source lang="prolog">
| |
| p(a). p(b). p(c).
| |
| q(b). q(c).
| |
| </source>
| |
| | |
| The program
| |
| | |
| <source lang="prolog">
| |
| p(a). p(b). p(c).
| |
| {q(X):p(X)}2.
| |
| </source>
| |
| | |
| is shorthand for | |
| | |
| <source lang="prolog">
| |
| p(a). p(b). p(c).
| |
| {q(a),q(b),q(c)}2.
| |
| </source>
| |
| | |
| ==Generating stable models==
| |
| | |
| To find a stable model of the Lparse program stored in file <code><filename></code> we use the command
| |
| | |
| <source lang="bash">
| |
| % lparse <filename> | smodels
| |
| </source>
| |
| | |
| Option 0 instructs smodels to find ''all'' stable models of the program. For instance, if file <code>test</code> contains the rules
| |
| | |
| <source lang="prolog">
| |
| 1{p,q,r}2.
| |
| s :- not p.
| |
| </source>
| |
| | |
| then the command
| |
| | |
| <source lang="bash">
| |
| % lparse test | smodels 0
| |
| </source>
| |
| | |
| produces the output
| |
| | |
| <source lang="text">
| |
| 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
| |
| </source>
| |
| | |
| ==Examples of ASP programs==
| |
| ===Graph coloring===
| |
| | |
| An <math>n</math>-[[Graph coloring|coloring]] of a [[Graph (mathematics)|graph]] <math>G</math> is a function <math>color\ </math> from its set of vertices to <math>\{1,\dots,n\}</math> such that <math>color(x)\neq color(y)</math> for every pair of adjacent vertices <math>x,y</math>. We would like to use ASP to find an <math>n</math>-coloring of a given graph (or determine that it does not exist).
| |
| | |
| This can be accomplished using the following Lparse program:
| |
| | |
| <source lang="prolog">
| |
| c(1..n).
| |
| 1 {color(X,I) : c(I)} 1 :- v(X).
| |
| :- color(X,I), color(Y,I), e(X,Y), c(I). | |
| </source>
| |
| | |
| Line 1 defines the numbers <math>1,\dots,n</math> to be colors. According to the choice rule in Line 2, a unique color <math>i</math> should be assigned to each vertex <math>x</math>. The constraint in Line 3 prohibits assigning the same color to vertices <math>x</math> and <math>y</math> if there is an edge connecting them.
| |
| | |
| If we combine this file with a definition of <math>G</math>, such as
| |
| | |
| <source lang="prolog">
| |
| v(1..100). % 1,...,100 are vertices
| |
| e(1,55). % there is an edge from 1 to 55
| |
| . . .
| |
| </source>
| |
| | |
| and run smodels on it, with the numeric value of <math>n</math> specified on the command line, then the atoms of the form <math>color(\dots,\dots)</math> in the output of smodels will represent an <math>n</math>-coloring of <math>G</math>.
| |
| | |
| The program in this example illustrates the "generate-and-test" organization that is often found in simple ASP programs. The choice rule describes a set of "potential solutions" — a simple superset of the set of solutions to the given search problem. It is followed by a constraint, which eliminates all potential solutions that are not acceptable. However, the search process employed by smodels and other answer set solvers is not based on [[trial and error]].
| |
| | |
| ===Large clique===
| |
| | |
| A [[Clique (graph theory)|clique]] in a graph is a set of pairwise adjacent vertices. The following lparse program finds a clique of size <math>\geq n</math> in a given graph, or determines that it does not exist:
| |
| | |
| <source lang="prolog">
| |
| n {in(X) : v(X)}.
| |
| :- in(X), in(Y), v(X), v(Y), X!=Y, not e(X,Y), not e(Y,X).
| |
| </source>
| |
| | |
| This is another example of the generate-and-test organization. The choice rule in Line 1 "generates" all sets consisting of <math>\geq n</math> vertices. The constraint in Line 2 "weeds out" the sets that are not cliques.
| |
| | |
| ===Hamiltonian cycle===
| |
| | |
| A [[Hamiltonian cycle]] in a [[directed graph]] is a [[Path (graph theory)|cycle]] that passes through each vertex of the graph exactly once. The following Lparse program can be used to find a Hamiltonian cycle in a given directed graph if it exists; we assume that 0 is one of the vertices.
| |
| | |
| <source lang="prolog">
| |
| {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).
| |
| </source>
| |
| | |
| The choice rule in Line 1 "generates" all subsets of the set of edges. The three constraints "weed out" the subsets that are not Hamiltonian cycles. The last of them uses the auxiliary predicate <math>r(x)</math> ("<math>x</math> is reachable from 0") to prohibit the vertices that do not satisfy this condition. This predicate is defined recursively in Lines 4 and 5.
| |
| | |
| This program is an example of the more general "generate, define and test" organization: it includes the definition of an auxiliary predicate that helps us eliminate all "bad" potential solutions.
| |
| | |
| ==Comparison of implementations==
| |
| Early systems, such as Smodels, used backtracking to find solutions. As the theory and practice of [[Boolean SAT solver]]s evolved, a number of ASP solvers were built on top of SAT solvers, including ASSAT and Cmodels. These converted ASP formula into SAT propositions, applied the SAT solver, and then converted the solutions back to ASP form. More recent systems, such as Clasp, use a hybrid approach, using conflict-driven algorithms inspired by SAT, without full converting into a boolean-logic form. These approaches allow for significant improvements of performance, often by an order of magnitude, over earlier backtracking algorithms.
| |
| | |
| The [http://potassco.sourceforge.net/ Potassco] project acts as an umbrella for many of the systems below, including ''clasp'', grounding systems (''gringo''), incremental systems (''iclingo''), constraint solvers (''clingcon''), [[action language]] to ASP compilers (''coala''), distributed MPI implementations (''claspar''), and many others.
| |
| | |
| Most systems support variables, but only indirectly, by forcing grounding, by using a grounding system such as ''Lparse'' or ''gringo'' as a front end. The need for grounding can cause a combinatorial explosion of clauses; thus, systems that perform on-the-fly grounding might have an advantage.
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! colspan="3" | Platform
| |
| ! colspan="5" | Features
| |
| ! colspan="1" | Mechanics
| |
| |-
| |
| ! style="background:#ffdead;" | Name
| |
| ! style="background:#ffdead;" | OS
| |
| ! style="background:#ffdead;" | Licence
| |
| ! style="background:#ffdead;" | Variables
| |
| ! style="background:#ffdead;" | Function symbols
| |
| ! style="background:#ffdead;" | Explicit sets
| |
| ! style="background:#ffdead;" | Explicit lists
| |
| ! style="background:#ffdead;" | Disjunctive (choice rules) support
| |
| !
| |
| |-
| |
| |{{rh}}|[http://www.info.univ-angers.fr/pub/claire/asperix/ ASPeRiX]
| |
| |[[Linux]]
| |
| |[[GPL]]
| |
| |{{yes}}
| |
| |
| |
| |
| |
| |
| |
| |{{no}}
| |
| |on-the-fly grounding
| |
| |-
| |
| |{{rh}}|[http://assat.cs.ust.hk/ ASSAT]
| |
| |[[Solaris (operating system)|Solaris]]
| |
| |[[Freeware]]
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |SAT-solver based
| |
| |-
| |
| |{{rh}}|[http://www.cs.uni-potsdam.de/clasp/ Clasp Answer Set Solver]
| |
| |[[Linux]], [[Mac OS]], [[Microsoft Windows|Windows]]
| |
| |[[GPL]]
| |
| |{{yes|Yes, in Clingo}}
| |
| |{{yes}}
| |
| |{{no}}
| |
| |{{no}}
| |
| |Yes, in ClaspD
| |
| |incremental, SAT-solver inspired (nogood, conflict-driven)
| |
| |-
| |
| |{{rh}}|[http://www.cs.utexas.edu/users/tag/cmodels/ Cmodels]
| |
| |[[Linux]], [[Solaris (operating system)|Solaris]]
| |
| |[[GPL]]
| |
| |{{okay|Requires grounding}}
| |
| |
| |
| |
| |
| |
| |
| |{{yes}}
| |
| |incremental, SAT-solver inspired (nogood, conflict-driven)
| |
| |-
| |
| |{{rh}}|[[DLV]]
| |
| |[[Linux]], [[Mac OS]], [[Microsoft Windows|Windows]]<ref name="dlvsystem.com">{{cite web |url=http://www.dlvsystem.com |title=DLV System company page |publisher=DLVSYSTEM s.r.l. |accessdate=16 November 2011}}</ref>
| |
| |free for academic and non-commercial educational use, and for non-profit organizations<ref name="dlvsystem.com" />
| |
| |{{yes}}
| |
| |{{yes}}
| |
| |{{no}}
| |
| |{{no}}
| |
| |{{yes}}
| |
| |not Lparse compatible
| |
| |-
| |
| |{{rh}}|[http://www.mat.unical.it/dlv-complex/ DLV-Complex]
| |
| |[[Linux]], [[Mac OS]], [[Microsoft Windows|Windows]]
| |
| |[[Freeware]]
| |
| |
| |
| |{{yes}}
| |
| |{{yes}}
| |
| |{{yes}}
| |
| |{{yes}}
| |
| |built on top of [[DLV]] — not Lparse compatible
| |
| |-
| |
| |{{rh}}|[http://www.tcs.hut.fi/Software/gnt/ GnT]
| |
| |[[Linux]]
| |
| |[[GPL]]
| |
| |{{okay|Requires grounding}}
| |
| |
| |
| |
| |
| |
| |
| |{{yes}}
| |
| | built on top of smodels
| |
| |-
| |
| |{{rh}}|[http://www.cs.uni-potsdam.de/nomore/ nomore++]
| |
| |[[Linux]]
| |
| |[[GPL]]
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |combined literal+rule-based
| |
| |-
| |
| |{{rh}}|[http://www.cs.uni-potsdam.de/platypus/ Platypus]
| |
| |[[Linux]], [[Solaris (operating system)|Solaris]], [[Microsoft Windows|Windows]]
| |
| |[[GPL]]
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |distributed, multi-threaded nomore++, smodels
| |
| |-
| |
| |{{rh}}|[http://www.cs.uky.edu/ai/pbmodels/ Pbmodels]
| |
| |[[Linux]]
| |
| |?
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |[[pseudo-boolean]] solver based
| |
| |-
| |
| |{{rh}}|[http://www.tcs.hut.fi/Software/smodels/ Smodels]
| |
| |[[Linux]], [[Mac OS]], [[Microsoft Windows|Windows]]
| |
| |[[GPL]]
| |
| |{{okay|Requires grounding}}
| |
| |{{no}}
| |
| |{{no}}
| |
| |{{no}}
| |
| |{{no}}
| |
| |
| |
| |-
| |
| |{{rh}}|[http://www.nku.edu/~wardj1/Research/smodels_cc.html Smodels-cc]
| |
| |[[Linux]]
| |
| |?
| |
| |{{okay|Requires grounding}}
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |SAT-solver based; smodels w/conflict clauses
| |
| |-
| |
| |{{rh}}|[http://www.cs.utexas.edu/users/tag/sup/ Sup]
| |
| |[[Linux]]
| |
| |?
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |SAT-solver based
| |
| |}
| |
| | |
| ==See also==
| |
| *[[Default logic]]
| |
| *[[Logic programming]]
| |
| *[[Non-monotonic logic]]
| |
| *[[Prolog]]
| |
| *[[Stable model semantics]]
| |
| | |
| ==References==
| |
| <references/>
| |
| | |
| ==External links==
| |
| *[http://asparagus.cs.uni-potsdam.de/contest/ First ASP System Competition]
| |
| *[http://www.cs.kuleuven.be/~dtai/events/ASP-competition/index.shtml Second ASP Competition]
| |
| *[http://www.mat.unical.it/aspcomp2011/ Third ASP Competition]
| |
| *[http://www.mat.unical.it/aspcomp2013 Fourth ASP Competition]
| |
| *[http://www.cs.uni-potsdam.de/platypus/ Platypus]
| |
| *[http://www.kr.tuwien.ac.at/staff/tkren/deb.html A variety of answer set solvers packaged for Debian / Ubuntu]
| |
| *[http://www.cs.uni-potsdam.de/clasp/ Clasp Answer Set Solver]
| |
| | |
| {{DEFAULTSORT:Answer Set Programming}}
| |
| [[Category:Logic programming]]
| |