<?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>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>
<item>
 <title>History of Logic Programming: What went wrong, What was done about it, and What it might mean for the future</title>
 <link>http://lambda-the-ultimate.org/node/2803</link>
 <description>&lt;p &gt;Carl Hewitt is speaking tomorrow at Stanford&#039;s CSLI CogLunch on &lt;a href=&quot;http://history_of_logic_programming_seminar.carlhewitt.info/&quot;&gt;the history of logic programming&lt;/a&gt;.&lt;p &gt;
A paper is &lt;a href=&quot;http://logicprogramminghistory.wikicensored.info/&quot;&gt;here&lt;/a&gt;, so LtU readers can offer their perspectives on the argument. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/7">History</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Wed, 07 May 2008 19:03:08 -0400</pubDate>
</item>
<item>
 <title>Pure, Declarative, and Constructive Arithmetic Relations</title>
 <link>http://lambda-the-ultimate.org/node/2697</link>
 <description>&lt;small&gt;&lt;a href=&quot;http://okmij.org/ftp/Prolog/Arithm/arithm.pdf&quot;&gt;Pure, Declarative, and Constructive Arithmetic Relations&lt;/a&gt;. Oleg Kiselyov, William E. Byrd, Daniel P. Friedman, and Chung-chieh Shan. FLOPS 2008. &lt;a href=&quot;http://okmij.org/ftp/Prolog/Arithm/&quot;&gt;(source code)&lt;/a&gt;&lt;/small&gt;&lt;p&gt;
&lt;blockquote&gt;
We present decidable logic programs for addition, multiplication, division with remainder, exponentiation, and logarithm with remainder over the unbounded domain of natural numbers. Our predicates represent relations without mode restrictions or annotations. They are fully decidable under the common, DFS-like, SLD resolution strategy
of Prolog or under an interleaving refinement of DFS...&lt;p&gt;
[The] attempts to define decidable multiplication even for the seemingly trivial unary case show the difficulties that become more pronounced as we move to binary arithmetic. We rely on a finite representation of infinite domains, precise instantiatedness analysis, and reasoning about SLD using search trees.
&lt;/blockquote&gt;&lt;p&gt;
So you&#039;ve read &lt;a href=&quot;http://lambda-the-ultimate.org/node/1104&quot;&gt;The Reasoned Schemer&lt;/a&gt; and were excited about the fact that unlike the built-in operations in Prolog, arithmetic relations (over binary numbers) were fully implemented. For example, addition could also be used for subtraction and multiplication for factoring numbers and for generating all triples of numbers related by multiplication. Now comes this paper to explain the motivation behind some of the more arcane definitions needed to implement arithmetic in a fully relational style,  and to prove their properties formally. The paper develops unary and binary arithmetic relations in pure Prolog (with no cuts, negation or introspection).&lt;p&gt;
LtU readers will also be interested in &lt;a href=&quot;http://okmij.org/ftp/Prolog/Arithm/DefinitionTree.hs
&quot;&gt;yet another embedding of pure Prolog into Haskell&lt;/a&gt;, that the authors offer. It is not meant to be the most optimal or convenient Prolog implementation (it wasn&#039;t even intended to be an implementation of a logic
system). It was explicitly designed to be easier to reason about and so help prove certain properties of SLD or similar evaluation strategies. The main difference of DefinitionTree from other embeddings of Prolog in Haskell has to do with the generation of fresh names for logic variables. In DefinitionTree, name generation is &lt;strong&gt;not&lt;/strong&gt; an effect, and the naming is fully decoupled from the evaluation. The evaluation no longer needs to carry a state for the generation of fresh names, hence the evaluator is easier to reason
about equationally.
</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Wed, 27 Feb 2008 00:11:45 -0500</pubDate>
</item>
<item>
 <title>NEXCEL, a Deductive Spreadsheet</title>
 <link>http://lambda-the-ultimate.org/node/2531</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://theory.stanford.edu/~iliano/papers/ker06.pdf&quot;&gt;NEXCEL, a Deductive Spreadsheet&lt;/a&gt;, Iliano Cervesato. 2006.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Usability and usefulness have made the spreadsheet one of the most successful computing applications of all times: millions rely on it every day for anything from typing grocery lists to developing multimillion dollar budgets. One thing spreadsheets are not very good at is manipulating symbolic data and helping users make decisions based on them. By tapping into recent research in Logic Programming, Databases and Cognitive Psychology, we propose a deductive extension to the spreadsheet paradigm which addresses precisely this issue. The accompanying tool, which we call NEXCEL, is intended as an automated assistant for the daily reasoning and decision-making needs of computer users, in the same way as a spreadsheet application such as Microsoft Excel assists them every day with calculations simple and complex. Users without formal training in Logic or even Computer Science can interactively define logical rules in the same simple way as they define formulas in Excel. NEXCEL immediately evaluates these rules thereby returning lists of values that satisfy them, again just like with numerical formulas. The deductive component is seamlessly integrated into the traditional spreadsheet so that a user not only still has access to the usual functionalities, but is able to use them as part of the logical inference and, dually, to embed deductive steps in a numerical calculation.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is a neat paper about using Datalog-style relations to extend spreadsheets with some deductive database features. It seems like Datalog represents a real sweet spot in the design space for logic programming -- I&#039;ve seen a lot of people put it to effective use.&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/13">Logic/Declarative</category>
 <pubDate>Sat, 10 Nov 2007 12:12:12 -0500</pubDate>
</item>
<item>
 <title>The End of an Architectural Era (It’s Time for a Complete Rewrite)</title>
 <link>http://lambda-the-ultimate.org/node/2500</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://web.mit.edu/dna/www/vldb07hstore.pdf&quot;&gt;The End of an Architectural Era (It’s Time for a Complete Rewrite)&lt;/a&gt;. Michael Stonebraker, Samuel Madden, Daniel J. Abadi, Stavros Harizopoulos, Nabil Hachem, Pat Helland. VLDB 2007.&lt;/p&gt;
&lt;p &gt;A not directly PL-related paper about a new database architecture, but the authors provide some interesting and possibly controversial perspectives:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;They split the application into per-core, single-threaded instances without any communication between them.&lt;/li&gt;
&lt;li &gt;Instead of using SQL from an external (web app) process to communicate with the database, they envision embedding Ruby on Rails directly into the database.&lt;/li&gt;
&lt;li &gt;They state that most database warehouse tasks rely on pre-canned queries only, so there is no need for ad-hoc querying.&lt;/li&gt;
&lt;/ul&gt;
&lt;p &gt;The somewhat performance-focused abstract:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In two previous papers some of us predicted the end of &quot;one size fits all&quot; as a commercial relational DBMS paradigm. These papers presented reasons and experimental evidence that showed that the major RDBMS vendors can be outperformed by 1-2 orders of magnitude by specialized engines in the data warehouse, stream processing, text, and scientific data base markets.&lt;/p&gt;
&lt;p &gt;Assuming that specialized engines dominate these markets over time, the current relational DBMS code lines will be left with the business data processing (OLTP) market and hybrid markets where more than one kind of capability is required. In this paper we show that current RDBMSs can be beaten by nearly two orders of magnitude in the OLTP market as well. The experimental evidence comes from comparing a new OLTP prototype, H-Store, which we have built at M.I.T. to one of the popular RDBMSs on the standard transactional benchmark, TPC-C.&lt;/p&gt;
&lt;p &gt;We conclude that the current RDBMS code lines, while attempting to be a &quot;one size fits all&quot; solution, in fact, excel at nothing. Hence, they are 25 year old legacy code lines that should be retired in favor of a collection of &quot;from scratch&quot; specialized engines. The DBMS vendors (and the research community) should start with a clean sheet of paper and design systems for tomorrow&#039;s requirements, not continue to push code lines and architectures designed for the yesterday&#039;s requirements.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A &lt;a href=&quot;http://www.allthingsdistributed.com/2007/09/50_x.html&quot;&gt;critical comment&lt;/a&gt; by Amazon&#039;s CTO, Werner Vogels.&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/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/30">Ruby</category>
 <pubDate>Fri, 19 Oct 2007 09:46:50 -0400</pubDate>
</item>
<item>
 <title>Escape from Zurg: An Exercise in Logic Programming</title>
 <link>http://lambda-the-ultimate.org/node/2434</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://web.engr.oregonstate.edu/~erwig/papers/Zurg_JFP04.pdf&quot;&gt;Escape from Zurg: An Exercise in Logic Programming&lt;/a&gt; by Martin Erwig. Journal of Functional Programming, Vol. 14, No. 3, 253-261, 2004&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In this article we will illustrate with an example that modern functional programming languages like Haskell can be used effectively for programming search problems, in contrast to the widespread belief that Prolog is much better suited for tasks like these.&lt;/p&gt;
&lt;p &gt;...&lt;/p&gt;
&lt;p &gt;The example that we want to consider is a homework problem that we have given in a graduate level course on programming languages. The problem was one of several exercises to practice programming in Prolog. After observing that many students had problems manipulating term structures in Prolog (after already having learned to use data types in Haskell) and spending a lot of time on debugging, the question arose whether it would be as difficult to develop a solution for this problem in Haskell. This programming exercise worked well, and we report the result in this paper.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;(&lt;a href=&quot;http://web.engr.oregonstate.edu/~erwig/zurg/&quot;&gt;Haskell source code&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>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <pubDate>Sat, 01 Sep 2007 11:04:26 -0400</pubDate>
</item>
<item>
 <title>Theory and Practice of Constraint Handling Rules</title>
 <link>http://lambda-the-ultimate.org/node/2420</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://citeseer.ist.psu.edu/216100.html&quot;&gt;Theory and Practice of Constraint Handling Rules&lt;/a&gt;, Thom Fruewirth, Journal of Logic Programming, 1994. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Constraint Handling Rules (CHR) are our proposal to allow more flexibility and application-oriented customization of constraint systems. CHR are a declarative language extension especially designed for writing user-defined constraints. CHR are essentially a committed-choice language consisting of multi-headed guarded rules that rewrite constraints into simpler ones until they are solved. &lt;/p&gt;
&lt;p &gt;In this broad survey we cover all aspects of CHR as they currently present themselves. Going from theory to practice, we will define the syntax and semantics of CHR, introduce an important decidable property, confluence, of CHR programs and define a tight integration of CHR with constraint logic programming languages. This survey then describes implementations of the language before we review several constraint solvers -- both traditional and non-standard ones -- written in the CHR language. Finally we introduce two innovative applications that benefited from being written in CHR.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In the last post, we had some requests for constraint programming, so here you go. Constraint solving programs are often essentially stateful algorithms, and I see CHR as a particularly nice way of handling all that state in a declarative way. (They have a very pretty semantics as proof search in linear logic, too.)&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/29">Semantics</category>
 <pubDate>Sat, 25 Aug 2007 05:04:42 -0400</pubDate>
</item>
<item>
 <title>Cloning-Based Context-Sensitive Pointer Alias Analysis Using Binary Decision Diagrams</title>
 <link>http://lambda-the-ultimate.org/node/2383</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://suif.stanford.edu/papers/pldi04.pdf&quot;&gt;Cloning-Based Context-Sensitive Pointer Alias Analysis Using Binary Decision Diagrams&lt;/a&gt;, John Whaley and Monica S. Lam. PLDI 2004.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This paper presents the first scalable context-sensitive, inclusion-based pointer alias analysis for Java programs. Our approach to context sensitivity is to create a clone of a method for every context of interest, and run a context-insensitive algorithm over the ex-panded call graph to get context-sensitive results. For precision, we generate a clone for every acyclic path through a program&#039;s call graph, treating methods in a strongly connected component as a single node. Normally, this formulation is hopelessly intractable as a call graph often has 10^14 acyclic paths or more. We show that these exponential relations can be computed efficiently using binary decision diagrams (BDDs). Key to the scalability of the technique is a context numbering scheme that exposes the commonalities across contexts. We applied our algorithm to the most popular applications available on Sourceforge, and found that the largest programs, with hundreds of thousands of Java bytecodes, can be analyzed in under 20 minutes.&lt;/p&gt;
&lt;p &gt;   This paper shows that pointer analysis, and many other queries and algorithms, can be described succinctly and declaratively using Datalog, a logic programming language. We have developed a system called bddbddb that automatically translates Datalog programs into highly efficient BDD implementations. We used this approach to develop a variety of context-sensitive algorithms including side effect analysis, type analysis, and escape analysis.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Binary decision diagrams are one of the coolest data structures of the last 20 years, and are also one of the basic enabling data structures underlying modern SAT solvers. Using them to implement Datalog is a really clever idea.&lt;/p&gt;
&lt;p &gt;EDIT: I relied on memory instead of Google, and got it wrong about BDDs and SAT solving. Modern DPLL-based SAT solvers generally do not use BDDs, because when your solutions are far apart in the solution space the representing BDD would get quite large. BDDs are  widely used in verification, though, and are also still one my favorite data structures. :)&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/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Wed, 08 Aug 2007 04:12:29 -0400</pubDate>
</item>
<item>
 <title>CLL: A Concurrent Language Built from Logical Principles</title>
 <link>http://lambda-the-ultimate.org/node/2322</link>
 <description>&lt;a href=&quot;http://citeseer.ist.psu.edu/garg05cll.html&quot;&gt;CLL: A Concurrent Language Built from Logical Principles&lt;/a&gt; by Deepak Garg, 2005.
&lt;blockquote &gt;
In this report, we use both the Curry-Howard isomorphism and proof-search to design a concurrent programming
language from logical principles.
...
Our underlying
logic is a first-order intuitionistic linear logic where all right synchronous connectives are restricted to a monad.
&lt;/blockquote&gt;

Yet another example of using monads to embed effectful computations into a pure FP. Another interesting part is the methodology of derivation of a PL from a logic.</description>
 <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>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 30 Jun 2007 14:06:25 -0400</pubDate>
</item>
<item>
 <title>Application-specific foreign-interface generation</title>
 <link>http://lambda-the-ultimate.org/node/2304</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://people.cs.uchicago.edu/~jhr/papers/2006/gpce-fig.pdf&quot;&gt;Application-specific foreign-interface generation&lt;/a&gt;, John Reppy and Chunyan Song, October 2006.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
A foreign interface (FI) mechanism to support interoperability with libraries written in other languages (especially C) is an important feature in most high-level language implementations. Such FI mechanisms provide a Foreign Function Interface (FFI) for the high-level language to call C functions and marshaling and unmarshaling mechanisms to support conversion between the high-level and C data representations. Often, systems provide tools to automate the generation of FIs, but these tools typically lock the user into a specific model of interoperability. It is our belief that the policy used to craft the mapping between the high-level language and C should be distinct from the underlying mechanism used to implement the mapping.&lt;/p&gt;
&lt;p &gt;In this paper, we describe a FI generation tool, called FIG (for Foreign Interface Generator) that embodies a new approach to the problem of generating foreign interfaces for high-level languages. FIG takes as input raw C header files plus a declarative script that specifies the generation of the foreign interface from the header file. The script sets the policy for the translation, which allows the user to tailor the resulting FI to his or her application. We call this approach application-specific foreign-interface generation. The scripting language uses rewriting strategies as its execution model. The other major feature of the scripting language is a novel notion of composable typemaps that describe the mapping between high-level and low-level types.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;FFIs are a perennial engineering problem, and it&#039;s very nice to see progress being made on automating what&#039;s automatable about building interfaces. Their interface specification language is built from two little DSLs. The first one is a language that for specifying how to map low level types to high level types, and the second one is a rewriting-based language for translating API functions, which makes use of the type mapping programs you defined earlier. The whole thing is quite pretty, and seems to read very well. &lt;/p&gt;
&lt;p &gt;An interesting gimme for you stack-language fans: the DSL that Reppy and Song use to specify type mappings from low-level to high-level types is a combinator-based language that reads a bit like Forth or Postscript. &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/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Wed, 20 Jun 2007 16:52:35 -0400</pubDate>
</item>
<item>
 <title>Python in Pardus Linux</title>
 <link>http://lambda-the-ultimate.org/node/2301</link>
 <description>&lt;p &gt;
&lt;a href=&quot;http://www.pardus.org.tr/eng/projects/comar/PythonInPardus.html&quot;&gt;Pardus Linux&lt;/a&gt; is a case study of functional Python.  It&#039;s a Linux distribution built from semi-scratch, the main focii being &lt;a href=&quot;http://www.pardus.org.tr/eng/projects/pisi/PiSi.html&quot;&gt;package management&lt;/a&gt; and init subsystems - places where C and shell script make poor sense.  A funded group has finally tackled these issues.
&lt;/p&gt;

&lt;p &gt;
&lt;blockquote &gt;
A package management software deals a lot with sets, lists, and dependency graphs....We have extensively used functional operators (map, filter, reduce) and list comprehensions, even metaclasses are used in a few places.
&lt;/blockquote&gt;
&lt;/p&gt;

&lt;p &gt;
Someone nudge Guido.  Scheme or Oz might have been the better choice, but give them credit.  They admit frankly to social acceptance issues.
&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/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/26">Python</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/27">XML</category>
 <pubDate>Tue, 19 Jun 2007 18:55:33 -0400</pubDate>
</item>
<item>
 <title>Solving a Sudoku with one  SQL-statement</title>
 <link>http://lambda-the-ultimate.org/node/2291</link>
 <description>&lt;p &gt;Doing strange things with SQL is always fun...&lt;p &gt;
This &lt;a href=&quot;http://technology.amis.nl/blog/?p=2066&quot;&gt;Sudoku solver&lt;/a&gt; makes use of Oracle 10g&#039;s &lt;a href=&quot;http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14223/sqlmodel.htm#sthref1855&quot;&gt;MODEL &lt;/a&gt; clause, which seems quite hairy.&lt;p &gt;
SQL isn&#039;t mentioned around here all that often, so I am glad we can at least remind ourselves from time to time of the most heavily used declarative language out there by posting SQL puzzles and hacks...&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Sat, 09 Jun 2007 03:54:37 -0400</pubDate>
</item>
<item>
 <title>Foundations Of Temporal Query Languages</title>
 <link>http://lambda-the-ultimate.org/node/2237</link>
 <description>&lt;a href=&quot;http://citeseer.ist.psu.edu/37369.html&quot;&gt;
Foundations Of Temporal Query Languages
&lt;/a&gt;
by David Toman, 1995.

&lt;blockquote &gt;
In recent years, there have been numerous proposals that introduce
time into standard
relational systems. Unfortunately, most of the attempts have been
based on ad-hoc extensions
of existing database systems and query languages, e.g., TQUEL and
TSQL. Such
extensions often create many problems, when precise semantics needs
to be developed, if one
exists at all. In a recent survey by J. Chomicki, a clean way of
defining temporal databases
based on logic was proposed. This methodology views temporal
databases as multi-sorted,
finitely representable first-order structures. Query languages then
became formulas in suitable
logics over the vocabulary of such structures.
&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <pubDate>Wed, 09 May 2007 06:33:11 -0400</pubDate>
</item>
<item>
 <title>The Design and Implementation of a Dataflow Language for Scriptable Debugging</title>
 <link>http://lambda-the-ultimate.org/node/2075</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.brown.edu/~sk/Publications/Papers/Published/mcskr-dataflow-lang-script-debug-journal/&quot;&gt;The Design and Implementation of a Dataflow Language for Scriptable Debugging&lt;/a&gt;, Guillaume Marceau, Gregory H. Cooper, Jonathan P. Spiro, Shriram Krishnamurthi, and Steven P. Reiss.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Debugging is a laborious, manual activity that often involves the repetition of common operations. Ideally, users should be able to describe these repetitious operations as little programs. Debuggers should therefore be programmable, or scriptable. The operating environment of these scripts, however, imposes interesting design challenges on the programming language in which these scripts are written.&lt;/p&gt;
&lt;p &gt;This paper presents our design of a language for scripting debuggers. The language offers powerful primitives that can precisely and concisely capture many important debugging and comprehension metaphors. The paper also describes a pair of debuggers, one for Java and the other for Scheme, built in accordance with these principles. The paper includes concrete examples of applying this debugger to programs.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;We&#039;ve seen a paper on compiling dataflow languages, so here&#039;s one on an interesting application. &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/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Mon, 19 Feb 2007 21:06:12 -0500</pubDate>
</item>
</channel>
</rss>
