<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Logic/Declarative</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/13/0</link>
 <description></description>
 <language>en</language>
<item>
 <title>Beyond pure Prolog: Power and danger</title>
 <link>http://lambda-the-ultimate.org/node/4434</link>
 <description>&lt;p &gt;One of the sections of Oleg Kiselyov&#039;s &lt;i &gt;Prolog and Logic Programming&lt;/i&gt; page, on &lt;a href=&quot;http://okmij.org/ftp/Prolog/index.html#impure&quot;&gt;Beyond pure Prolog: power and danger&lt;/a&gt;, points out (i) term introspection (in the guise of the &lt;code &gt;var/1&lt;/code&gt; predicate) can be derived from three of Prolog&#039;s imperative features, two of which are quite mild-looking, and (ii) this introspection potentially makes Prolog code hard to understand.&lt;/p&gt;
&lt;p &gt;Oleg pointed this note in response to &lt;a href=&quot;http://lambda-the-ultimate.org/node/112#comment-68897&quot;&gt;my defence of cut&lt;/a&gt;; it is short, sweet, and well-argued.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Mon, 23 Jan 2012 05:54:29 -0500</pubDate>
</item>
<item>
 <title>The Experimental Effectiveness of Mathematical Proof</title>
 <link>http://lambda-the-ultimate.org/node/4392</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://perso.ens-lyon.fr/alexandre.miquel/publis/effectiveness.pdf&quot;&gt;The Experimental Effectiveness of Mathematical Proof&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
The aim of this paper is twofold. First, it is an attempt to give an answer to the famous essay of Eugene Wigner about the unreasonable effectiveness of mathematics in the natural sciences [25]. We will argue that mathematics are not only reasonably effective, but that they are also objectively effective in a sense that can be given a precise meaning. For that—and this is the second aim of this paper—we shall reconsider some aspects of Popper’s epistemology [23] in the light of recent advances of proof theory [8, 20], in order to clarify the interaction between pure mathematical reasoning (in the sense of a formal system) and the use of empirical hypotheses (in the sense of the natural sciences).&lt;/p&gt;
&lt;p &gt;The technical contribution of this paper is the proof-theoretic analysis of the problem (already evoked in [23]) of the experimental modus tollens, that deals with the combination of a formal proof of the implication U ⇒ V with an experimental falsification of V to get an experimental falsification of U in the case where the formulæ U and V express empirical theories in a sense close to Popper’s. We propose a practical solution to this problem based on Krivine’s theory of classical realizability [20], and describe a simple procedure to extract from a formal proof of U ⇒ V (formalized in classical second-order arithmetic) and a falsifying instance of V a computer program that performs a finite sequence of tests on the empirical theory U until it finds (in finite time) a falsifying instance of U.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I thought I had already posted this, but apparently not.&lt;/p&gt;
&lt;p &gt;Consider this paper the main gauntlet thrown down to those who insist that mathematical logic, the Curry-Howard Isomorphism, etc. might be fine for &quot;algorithmic code&quot; (as if there were any other kind) but is somehow inapplicable the moment a system interacts with the &quot;real&quot; or &quot;outside&quot; world (as if software weren&#039;t real).&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Update:&lt;/b&gt; the author is Alexandre Miquel, and the citation is &quot;Chapitre du livre Anachronismes logiques, à paraître dans la collection Logique, Langage, Sciences, Philosophie, aux Publications de la Sorbonne. Éd.: Myriam Quatrini et Samuel Tronçon, 2010.&quot;&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Sun, 30 Oct 2011 12:05:45 -0400</pubDate>
</item>
<item>
 <title>Concurrent Pattern Calculus</title>
 <link>http://lambda-the-ultimate.org/node/4189</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.dsi.uniroma1.it/~gorla/papers/cpc-long.pdf&quot;&gt;Concurrent Pattern Calculus&lt;/a&gt; by Thomas Given-Wilson, Daniele Gorla, and Barry Jay:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Concurrent pattern calculus drives interaction between processes by comparing data structures, just as sequential pattern calculus drives computation. By generalising from pattern matching to pattern unification, interaction becomes symmetrical, with information flowing in both directions. This provides a natural language for describing any form of exchange or trade. Many popular process calculi can be encoded in concurrent pattern calculi.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Barry Jay&#039;s &lt;a href=&quot;http://lambda-the-ultimate.org/node/1678&quot;&gt;Pattern Calculus&lt;/a&gt; has been discussed a &lt;a href=&quot;http://lambda-the-ultimate.org/node/3695&quot;&gt;few times here before&lt;/a&gt;. I&#039;ve always been impressed with the pattern calculus&#039; expressive power for computing over arbitrary structure. The pattern calculus supports new forms of polymorphism, which he termed &quot;path polymorphism&quot; and &quot;pattern polymorphism&quot;, which are difficult to provide in other calculi. The closest I can think of would be a compiler-provided generalized fold over any user-defined structure.&lt;/p&gt;
&lt;p &gt;This work extends the pattern calculus to the concurrent setting by adding constructs for parallel composition, name restriction and replication, and argues convincingly for its greater expressiveness as compared to other concurrent calculi. He addresses some of the obvious concerns for symmetric information flow of the unification operation.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Mon, 24 Jan 2011 22:19:55 -0500</pubDate>
</item>
<item>
 <title>Milawa: A Self-Verifying Theorem Prover for an ACL2-Like Logic</title>
 <link>http://lambda-the-ultimate.org/node/3964</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://userweb.cs.utexas.edu/users/jared/milawa/Web/&quot;&gt;Milawa: A Self-Verifying Theorem Prover for an ACL2-Like Logic&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Milawa is a &quot;self-verifying&quot; theorem prover for an ACL2-like logic.&lt;/p&gt;
&lt;p &gt;We begin with a simple proof checker, call it A, which is short enough to verify by the &quot;social process&quot; of mathematics.&lt;/p&gt;
&lt;p &gt;We then develop a series of increasingly powerful proof checkers, call them B, C, D, and so on. We show that each of these is sound: they accept only the same formulas as A. We use A to verify B, and B to verify C, and so on. Then, since we trust A, and A says B is sound, we can trust B, and so on for C, D, and the rest.&lt;/p&gt;
&lt;p &gt;Our final proof checker is really a theorem prover; it can carry out a goal-directed proof search using assumptions, calculation, rewrite rules, and so on. We use this theorem prover to discover the proofs of soundness for B, C, and so on, and to emit these proofs in a format that A can check. Hence, &quot;self verifying.&quot;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This might help inform discussions of the relationship between the de Bruijn criterion (the &quot;social process&quot; of mathematics) and formal verification. I think it also serves as an interesting signpost on the road forward: it&#039;s one thing to say that starting with a de Bruijn core and evolving a more powerful prover is possible in principle; it&#039;s another thing for it to actually have been done. The author&#039;s thesis &lt;a href=&quot;http://userweb.cs.utexas.edu/users/jared/milawa/Documentation/defense.pdf&quot;&gt;defense&lt;/a&gt; slides provide a nice, quick overview.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Sat, 29 May 2010 13:49:47 -0400</pubDate>
</item>
<item>
 <title>A Lambda Calculus for Real Analysis</title>
 <link>http://lambda-the-ultimate.org/node/3831</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://paultaylor.eu/ASD/lamcra/&quot;&gt;A Lambda Calculus for Real Analysis&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Abstract Stone Duality is a revolutionary paradigm for general topology that describes computable continuous functions directly, without using set theory, infinitary lattice theory or a prior theory of discrete computation. Every expression in the calculus denotes both a continuous function and a program, and the reasoning looks remarkably like a sanitised form of that in classical topology. This is an introduction to ASD for the general mathematician, with application to elementary real analysis.&lt;/p&gt;
&lt;p &gt;This language is applied to the Intermediate Value Theorem: the solution of equations for continuous functions on the real line. As is well known from both numerical and constructive considerations, the equation cannot be solved if the function &quot;hovers&quot; near 0, whilst tangential solutions will never be found.&lt;/p&gt;
&lt;p &gt;In ASD, both of these failures and the general method of finding solutions of the equation when they exist are explained by the new concept of overtness. The zeroes are captured, not as a set, but by higher-type modal operators. Unlike the Brouwer degree, these are defined and (Scott) continuous across singularities of a parametric equation.&lt;/p&gt;
&lt;p &gt;Expressing topology in terms of continuous functions rather than sets of points leads to treatments of open and closed concepts that are very closely lattice- (or de Morgan-) dual, without the double negations that are found in intuitionistic approaches. In this, the dual of compactness is overtness. Whereas meets and joins in locale theory are asymmetrically finite and infinite, they have overt and compact indices in ASD.&lt;/p&gt;
&lt;p &gt;Overtness replaces metrical properties such as total boundedness, and cardinality conditions such as having a countable dense subset. It is also related to locatedness in constructive analysis and recursive enumerability in recursion theory.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Paul Taylor is deadly serious about the intersection of logic, mathematics, and computation. I came across this after beating my head against &lt;a href=&quot;http://www.amazon.com/Probability-Theory-Logic-Science-Vol/dp/0521592712/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1266357272&amp;amp;sr=8-1&quot;&gt;Probability Theory: The Logic of Science&lt;/a&gt; and &lt;a href=&quot;http://axiomaticeconomics.com/&quot;&gt;Axiomatic Theory of Economics&lt;/a&gt; over the weekend, realizing that my math just wasn&#039;t up to the tasks, and doing a Google search for &quot;constructive real analysis.&quot; &quot;Real analysis&quot; because it was obvious that that was what both of the aforementioned texts were relying on; &quot;constructive&quot; because I&#039;d really like to develop proofs in Coq/extract working code from them. This paper was on the second page of results. Paul&#039;s name was familiar (and not just because I share it with him); he translated Jean-Yves Girard&#039;s regrettably out-of-print &lt;a href=&quot;http://paultaylor.eu/stable/Proofs+Types&quot;&gt;Proofs and Types&lt;/a&gt; to English and maintains a very popular set of tools for typesetting &lt;a href=&quot;http://paultaylor.eu/diagrams/&quot;&gt;commutative diagrams&lt;/a&gt; using LaTeX.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/22">Category Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Tue, 16 Feb 2010 17:00:42 -0500</pubDate>
</item>
<item>
 <title>Certified Programming With Dependent Types Goes Beta</title>
 <link>http://lambda-the-ultimate.org/node/3763</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/cpdt/&quot;&gt;Certified Programming With Dependent Types&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;From the introduction:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We would all like to have programs check that our programs are correct.  Due in no small part to some bold but unfulfilled promises in the history of computer science, today most people who write software, practitioners and academics alike, assume that the costs of formal program verification outweigh the benefits.  The purpose of this book is to convince you that the technology of program verification is mature enough today that it makes sense to use it in a support role in many kinds of research projects in computer science.  Beyond the convincing, I also want to provide a handbook on practical engineering of certified programs with the Coq proof assistant.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is the best Coq tutorial that I know of, partially for being comprehensive, and partially for taking a very different tack than most with Adam&#039;s emphasis on proof automation using Coq&#039;s Ltac tactic language. It provides an invaluable education toward understanding what&#039;s going on either in &lt;a href=&quot;http://ltamer.sourceforge.net/&quot;&gt;LambdaTamer&lt;/a&gt; or &lt;a href=&quot;http://ynot.cs.harvard.edu/&quot;&gt;Ynot&lt;/a&gt;, both of which are important projects in their own rights.&lt;/p&gt;
&lt;p &gt;Please note that Adam is explicitly requesting feedback on this work.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/9">Misc Books</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 11:56:49 -0500</pubDate>
</item>
<item>
 <title>ActorScript(TM): Industrial strength integration of local and nonlocal concurrency for Client-cloud Computing</title>
 <link>http://lambda-the-ultimate.org/node/3717</link>
 <description>&lt;a href=&quot;http://arxiv.org/abs/0907.3330&quot;&gt;ActorScript(TM): Industrial strength integration of local and nonlocal concurrency for Client-cloud Computing&lt;/a&gt;
by Carl Hewitt, 2009.
&lt;blockquote &gt;
ActorScript is based on a mathematical model of computation that treats “Actors” as the universal primitives of concurrent digital computation [Hewitt, Bishop, and Steiger 1973; Hewitt 1977]. Actors been used both as a framework for a theoretical understanding of concurrency, and as the theoretical basis for several practical implementations of concurrent systems.&lt;/blockquote&gt;
I hope I do not need to introduce Carl Hewitt or his Actor model. This paper is a modern attempt to expose that model via a practical PL.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <pubDate>Mon, 14 Dec 2009 08:47:46 -0500</pubDate>
</item>
<item>
 <title>SequenceL - declarative computation on nonscalars</title>
 <link>http://lambda-the-ultimate.org/node/3635</link>
 <description>&lt;p &gt;I recently came across the language &lt;i &gt;&lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.90.7370&quot;&gt;SequenceL&lt;/a&gt;&lt;/i&gt;, which it seems &lt;a href=&quot;http://www.nasaspaceflight.com/2005/12/cev-abort-system-gains-a-brain/&quot;&gt;NASA is using&lt;/a&gt; in some of its human spaceflight programs. SequenceL is described as a high-level language for declarative computation on nonscalars. One of the key features of the language appears to be the avoidance of the need to explicitly specify recursive or iterative operations. For example, given the function definition &lt;/p&gt;
&lt;pre &gt;
Search(scalar Target, tuple [Subscript, Word]) = 
    Subscript when Word = Target 
&lt;/pre&gt;&lt;p &gt;which applies to tuples, the programmer can apply the function directly to lists of tuples without any need to specify how that application will be performed, e.g.&lt;/p&gt;
&lt;pre &gt;
search(fox,[[1,dog],[2,cat],[3,fox],[4,parrot]]) → 3 
search(rabbit,[[1,dog],[2,cat],[3,fox],[4,parrot]]) → [] 
&lt;/pre&gt;&lt;p &gt;The language designers (Daniel Cooke and J. Nelson Rushton) claim that this kind of thing leads to more concise and readable code, and a more direct representation of a specification.&lt;/p&gt;
&lt;p &gt;Unfortunately, the &lt;a href=&quot;http://languages.cs.ttu.edu/sequencel/&quot;&gt;SequenceL&lt;/a&gt; website appears to be inaccessible at the moment. However, &lt;a href=&quot;http://www.cs.ttu.edu/~dcooke/&quot;&gt;Daniel Cooke&#039;s site&lt;/a&gt; includes links to a number of papers and talks that describe SequenceL. In particular, the paper &lt;i &gt;&lt;a href=&quot;http://www.cs.ttu.edu/~dcooke/sequencel11-27-2006.pdf&quot;&gt;Normalize, Transpose, and Distribute:  An Automatic Approach for Handling Nonscalars&lt;/a&gt;&lt;/i&gt; provides a detailed description of the &quot;Consume-Simplify-Produce/Normalize-Transpose&quot; approach that is embodied by SequenceL. There&#039;s also an overview of SequenceL available through &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.90.7370&quot;&gt;CiteSeer&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Sun, 11 Oct 2009 17:34:30 -0400</pubDate>
</item>
<item>
 <title>Verified Programming in Guru</title>
 <link>http://lambda-the-ultimate.org/node/3543</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://guru-lang.googlecode.com/svn/branches/1.0a/doc/book.pdf&quot;&gt;Verified Programming in Guru&lt;/a&gt; is a tutorial introduction to &lt;a href=&quot;http://code.google.com/p/guru-lang/&quot;&gt;Guru&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;GURU is a pure functional programming language, which is similar in some ways to Caml and Haskell. But GURU also contains a language for writing formal proofs demonstrating the properties of programs. So there are really two languages: the language of programs, and the language of proofs.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In comparison to Coq:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;GURU is inspired largely by the COQ theorem prover, used for formalized mathematics and theoretical computer science, as well as program verification. Like COQ, GURU has syntax for both proofs and programs, and supports dependent types. GURU does not have as complex forms of polymorphism and dependent types as COQ does. But GURU supports some features that are difficult or impossible for COQ to support, which are useful for practical program verification. In COQ, the compiler must be able to confirm that all programs are uniformly terminating: they must terminate on all possible inputs. We know from basic recursion theory or theoretical computer science that this means there are some programs which really do terminate on all inputs that the compiler will not be able to confirm do so. Furthermore, some programs, like web servers or operating systems, are not intended to terminate. So that is a significant limitation. Other features GURU has that COQ lacks include support for functional modeling of non-functional constructs like destructive updates of data structures and arrays; and better support for proving properties of dependently typed functions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The tutorial is worth a read to anybody new to this style of programming as it is one of the most gentle introductions to dependent types and automated program verification that I&#039;ve seen.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Tue, 04 Aug 2009 22:59:11 -0400</pubDate>
</item>
<item>
 <title>Creator of Qi Calls It Quits</title>
 <link>http://lambda-the-ultimate.org/node/3537</link>
 <description>&lt;p &gt;In a &lt;a href=&quot;http://groups.google.com/group/Qilang/browse_thread/thread/592773c562017d87&quot;&gt;Qilang mailing list email&lt;/a&gt; Marker Tarver, creator of Qi, says&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;In a month I will be packing to go to India; this time for an extended&lt;br &gt;
period.    But its also a goodbye to Qi and computing.  At some point&lt;br &gt;
you have to acknowledge that Qi doesn&#039;t pay its way.   It was fun&lt;br &gt;
though and I&#039;m not sad about it.&lt;/p&gt;
&lt;p &gt;Qi has been a journey that began nearly 20 years ago when I was a very&lt;br &gt;
different person and worked for a university.  But the book on Qi II&lt;br &gt;
marks a natural watershed. I need to move on.  By September I will be&lt;br &gt;
gone. &lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Sun, 02 Aug 2009 08:25:31 -0400</pubDate>
</item>
<item>
 <title>D is for Domain and Declarative</title>
 <link>http://lambda-the-ultimate.org/node/3249</link>
 <description>&lt;p &gt;
The &lt;a href=&quot;http://www.resource-aware.org/twiki/bin/view/WG211/DSLAcceptedPapers&quot;&gt;list of accepted papers&lt;/a&gt; is out for the &lt;a href=&quot;http://www.resource-aware.org/twiki/bin/view/WG211/DSLWC&quot;&gt;IFIP Working Conference on Domain Specific Languages&lt;/a&gt;.  Happily for me, the program reveals much interest in languages for reasoning, decision making, and search.  Even among people who are not &lt;a href=&quot;http://www.cs.rutgers.edu/~ccshan/rational/dsl-paper.pdf&quot;&gt;my&lt;/a&gt; &lt;a href=&quot;http://www.cs.rutgers.edu/~ccshan/j/dsz.pdf&quot;&gt;coauthors&lt;/a&gt;. :)
&lt;p &gt;
Declarative programming tends to attract skepticism because it has the reputation of poor and hard-to-control performance.  The approach of DSL embedding appears to ameliorate this problem, and the success of SAT solvers appears to chip away at this reputation.
&lt;p &gt;
Meanwhile, the call for papers is out for &lt;a href=&quot;http://www.dcc.fc.up.pt/ppdp09/cfp.html&quot;&gt;Principles and Practice of Declarative Programming 2009&lt;/a&gt;, which has a venerable program committee.  The submission deadline is May 7.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Tue, 24 Mar 2009 16:50:14 -0400</pubDate>
</item>
<item>
 <title>Qi II</title>
 <link>http://lambda-the-ultimate.org/node/3110</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.lambdassociates.org/&quot;&gt;Qi II&lt;/a&gt; has been released.  Qi is a functional programming language built on top of Common Lisp.  It has an optional static type system based on sequent calculus and a general focus on logic based programming.  For version II, see the &lt;a href=&quot;http://www.lambdassociates.org/whatsnew.htm&quot;&gt;what&#039;s new&lt;/a&gt; page.  Rule closures in particular look very interesting.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Unlike Qi I, Qi II allows you to embed sequent rules within  functions, evaluating them to closures. These rule closures are type checked and are permeable to having their variables lexically bound from outside the scope of the rule itself. These devices enable the student of computational logic to effortlessly code complex logical systems of all descriptions. Thus the rule&lt;/p&gt;
&lt;p &gt;let PTerm/X (replace-by X Term P)&lt;br &gt;
PTerm/X, (all X P) &amp;gt;&amp;gt; Q;&lt;br &gt;
____________________&lt;br &gt;
(all X P) &amp;gt;&amp;gt; Q;&lt;/p&gt;
&lt;p &gt;allows universally quantified assumptions to be instantiated to new premises. This rule can be embedded into a Qi II function called all-left which does precisely this job. The rule is turned into a closure by the rule function which is then applied to the problem (list of sequents).&lt;/p&gt;
&lt;p &gt;(define all-left&lt;br &gt;
{term --&amp;gt; [sequent] --&amp;gt; [sequent]}&lt;br &gt;
Term S -&amp;gt; ((rule let PTerm/X (replace-by X Term P)&lt;br &gt;
PTerm/X, (all X P) &amp;gt;&amp;gt; Q;&lt;br &gt;
____________________&lt;br &gt;
(all X P) &amp;gt;&amp;gt; Q;) S))&lt;/p&gt;
&lt;p &gt;FPQi devotes a hundred pages to the exploration of this powerful construction.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Also with this release is a new book: &lt;a href=&quot;http://www.lambdassociates.org/preview.htm&quot;&gt;Funcitonal Programming in Qi&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;Earlier versions of Qi have been mentioned on LtU &lt;a href=&quot;http://lambda-the-ultimate.org/node/657&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://lambda-the-ultimate.org/node/707&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Sat, 29 Nov 2008 18:20:31 -0500</pubDate>
</item>
<item>
 <title>AgentSpeak(L): programming with beliefs, desires and intentions</title>
 <link>http://lambda-the-ultimate.org/node/3003</link>
 <description>&lt;p &gt;Anand S. Rao (1996).  &lt;a href=&quot;http://www.upv.es/sma/teoria/teoria_ag/agentspeakl/agentspeakl-rao.pdf&quot;&gt;AgentSpeak(L): BDI Agents speak out in a logical computable language&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;Rao&#039;s AgentSpeak(L) is a Prolog-like resolution-based language, but which is extended to support agent-based programming in several ways, most importantly:&lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;It extends the language, so that clauses can talk about not just satisfaction of predicates, but also of an agent desiring to bring about a predicate, and desiring to find out whether a predicate is true; and to distinguish between normal goals and special goals relevant to the BDI model (Belief-Desire-Intention model);
&lt;li &gt;It amends the resolution engine to support what Rao calls &lt;i &gt;reactive concurrency&lt;/i&gt;, where agents form plans via a process resembling SLD-resolution, but plans are formed or abandoned on the basis of agent-internal reactions called triggering events.
&lt;/ol&gt;
&lt;p &gt;Rao and Georgeff&#039;s work on BDI agents and procedural reasoning together constitutes one of the most important contributions to the theory of agents in AI, a topic which hasn&#039;t been discussed much here on LtU, but was raised in the  &lt;a href=&quot;http://lambda-the-ultimate.org/classic/message114.html&quot;&gt;Agent Oriented Programming&lt;/a&gt; story.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Fri, 19 Sep 2008 06:43:30 -0400</pubDate>
</item>
<item>
 <title>Linear Logical Algorithms</title>
 <link>http://lambda-the-ultimate.org/node/2818</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.cmu.edu/~rjsimmon/papers/icalp08linlogalg.pdf&quot;&gt;Linear Logical Algorithms&lt;/a&gt;, Robert J. Simmons and Frank Pfenning, 2008. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Bottom-up logic programming can be used to declaratively specify many algorithms in a succinct and natural way, and McAllester and Ganzinger have shown that it is possible to define a cost semantics that enables reasoning about the running time of algorithms written as inference rules. Previous work with the programming language Lollimon demonstrates the expressive power of logic programming with linear logic in describing algorithms that have imperative elements or that must repeatedly make mutually exclusive choices. In this paper, we identify a bottom-up logic programming language based on linear logic that is amenable to efficient execution and describe a novel cost semantics that can be used for complexity analysis of algorithms expressed in linear logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In my last post, I linked to a paper by Ganzinger and McAllester about specifying algorithms as logic programs, and a) admired how concise and natural the programs were, and b) was sad that the logic programs used some &quot;non-logical&quot; operations, such as deletion. &lt;/p&gt;
&lt;p &gt;So, what does it mean for an operation to be &quot;non-logical&quot;, and why is it a bad thing? Roughly speaking, you can think of the analogy: non-logical operations are to logic programs what impure operations are to functional programs -- they are features which break some parts of the equational theory of the language.  Now, the Curry-Howard correspondence for functional programs says that types are propositions, and programs are proofs. It turns out that a different version of this correspondence holds for logic programs: in logic programming, a set of propositions is a program, and the execution of a program corresponds  to a process of &lt;em &gt;proof search&lt;/em&gt; -- you get a success when execution finds a proof of the goal. &lt;/p&gt;
&lt;p &gt;When you have nonlogical operations in your logic programming language, you&#039;ve introduced operators that don&#039;t correspond to valid rules of inference, so even if your logic program succeeds, the success might not correspond to a real proof. Deletion of facts from a database is a good example of a nonlogical operation. Regular intuitionistic and classical logic is &lt;em &gt;monotonic&lt;/em&gt;: deduction from premises can only learn new facts, it can never disprove things you already knew to be true. Since deletion removes facts from the set of things you know, it can&#039;t have a logical interpretation in classical/intuitionistic logic.&lt;/p&gt;
&lt;p &gt;However, it turns out that not all logics are monotonic, and in this paper Simmons and Pfenning show that if you take the language of propositions to be a fragment of &lt;em &gt;linear logic&lt;/em&gt;, then all of the operations that Ganzinger and McAllester use actually do have a nice logical interpretation. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Tue, 20 May 2008 11:03:54 -0400</pubDate>
</item>
<item>
 <title>Logical Algorithms</title>
 <link>http://lambda-the-ultimate.org/node/2813</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://citeseer.ist.psu.edu/ganzinger02logical.html&quot;&gt;Logical Algorithms&lt;/a&gt;, Harald Ganzinger and David McAllester. ICALP 2002. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
It is widely accepted that many algorithms can be concisely and clearly expressed as logical inference rules. However, logic programming has been inappropriate for the study of the running time of algorithms because there has not been a clear and precise model of the run time of a logic program. We present a logic programming model of computation appropriate for the study of the run time of a wide variety of algorithms.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;So, there are two main styles in logic programming. The first is Prolog-style goal-directed, or backwards, search. The idea is that you have a set of rules, and a goal, and you nondeterministically choose rules that might have proven that goal, trying to find a sequence of deductions that could have proven this goal.  It&#039;s called backwards search since you are trying to reason backwards from the goal towards a full proof. &lt;/p&gt;
&lt;p &gt;The other style is, naturally, called forwards search (confusingly, this is also called the inverse method in theorem proving). The idea is that you have a goal, and some rules, and a starting set of facts. You then apply the rules to the facts you have, enlarging your database of facts and enabling more deductions. You keep doing this until either you discover the goal you were trying to prove in the database of facts, or the database saturates (ie, no more deductions are provable) and the goal is unprovable. The idea is that your database is an implicit data structure, which you update as part of the search. This makes forwards search a particularly natural method when you&#039;re trying to compute closures -- graph algorithms, dataflow analyses, that kind of thing. &lt;/p&gt;
&lt;p &gt;While we&#039;ve discussed &lt;a href=&quot;http://lambda-the-ultimate.org/node/2383&quot;&gt;applications&lt;/a&gt; of forward logic programming before, I thought it might be good to link to a discussion of the methodology of how to specify algorithms as forward logic programs and analyze their complexity. &lt;/p&gt;
&lt;p &gt;The language in this paper permits deletion of facts from the database, which is unfortunately a non-logical operation -- in clasical and intuitionistic logic, deduction can only increase the number of facts you know. But with a change of logic, it can be made logical. That&#039;ll be the next paper I post a link to. :)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Thu, 15 May 2008 12:52:48 -0400</pubDate>
</item>
</channel>
</rss>

