<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Lambda Calculus</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/20/0</link>
 <description>LC and variations.</description>
 <language>en</language>
<item>
 <title>Milawa on Jitawa: a Verified Theorem Prover</title>
 <link>http://lambda-the-ultimate.org/node/4464</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.utexas.edu/users/jared/milawa/Web/&quot;&gt;Milawa&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Aug 2010 - May 2011. Magnus Myreen has developed a verified Lisp system, named Jitawa, which can run Milawa. Our paper about this project was accepted to ITP 2011.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is pretty interesting: Milawa was already &quot;self-verifying,&quot; in the sense explained on the page. More recently, it&#039;s been made to run on a verified Lisp runtime, so that means the entire stack down to the X86_64 machine code is verified. Milawa itself is &quot;ACL2-like,&quot; so it&#039;s not as interesting logically as, say, Isabelle or Coq, but it&#039;s far from a toy. Also, the Jitawa formalization apparently took place in HOL4, so you need to trust HOL4. Since HOL4 is an &quot;LCF-like&quot; system, you can do that to the extent that you trust the LCF process, but it doesn&#039;t satisfy the de Bruijn criterion in the same way Milawa or Coq do. Nevertheless, this seems like an important step toward the ultimate goal of having a stack that is verified &quot;all the way down,&quot; as it were.&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>
 <pubDate>Wed, 29 Feb 2012 13:34:45 -0500</pubDate>
</item>
<item>
 <title>Vellvm: Formalizing the LLVM Intermediate Representation for Verified Program Transformations</title>
 <link>http://lambda-the-ultimate.org/node/4440</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cis.upenn.edu/~jianzhou/Vellvm/&quot;&gt;Vellvm: Formalizing the LLVM Intermediate Representation for Verified Program Transformations&lt;/a&gt; by Jianzhou Zhao, Santosh Nagarakatte, Milo M. K. Martin, and Steve Zdancewic, POPL 2012&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This paper presents Vellvm (&lt;em &gt;verified&lt;/em&gt; &lt;a href=&quot;http://llvm.org/&quot;&gt;LLVM&lt;/a&gt;), a framework for reasoning about programs expressed in &lt;a href=&quot;http://llvm.org/docs/LangRef.html&quot;&gt;LLVM&#039;s intermediate representation&lt;/a&gt; and transformations that operate on it. Vellvm provides a mechanized formal semantics of LLVM&#039;s intermediate representation, its type system, and properties of its &lt;a href=&quot;http://en.wikipedia.org/wiki/Static_single_assignment_form&quot;&gt;SSA&lt;/a&gt; form. The framework is built using the &lt;a href=&quot;http://coq.inria.fr/&quot;&gt;Coq&lt;/a&gt; interactive theorem prover. It includes multiple operational semantics and proves relations among them to facilitate different reasoning styles and proof techniques.&lt;/p&gt;
&lt;p &gt;To validate Vellvm&#039;s design, we extract an interpreter from the Coq formal semantics that can execute programs from LLVM &lt;a href=&quot;http://llvm.org/docs/TestingGuide.html#quicktestsuite&quot;&gt;test suite&lt;/a&gt; and thus be compared against LLVM reference implementations. To demonstrate Vellvm&#039;s practicality, we formalize and verify a &lt;a href=&quot;http://www.cis.upenn.edu/acg/softbound/&quot;&gt;previously proposed transformation&lt;/a&gt; that hardens C programs against spatial memory safety violations. Vellvm&#039;s tools allow us to &lt;a href=&quot;http://coq.inria.fr/refman/Reference-Manual027.html&quot;&gt;extract&lt;/a&gt; a new, verified implementation of the transformation pass that plugs into the real LLVM infrastructure; its performance is competitive with the non-verified, ad-hoc original.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This obviously represents huge progress in marrying the theoretical benefits of tools like Coq with the practical benefits of tools like LLVM. We can only hope that this spurs further development in practical certified software development.&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/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 28 Jan 2012 10:57:08 -0500</pubDate>
</item>
<item>
 <title>Deca, an LtU-friendly bare metal systems programming language</title>
 <link>http://lambda-the-ultimate.org/deca</link>
 <description>&lt;p &gt;The &lt;a href=&quot;http://code.google.com/p/decac/&quot;&gt;Deca programming language&lt;/a&gt; is &quot;&lt;i &gt;a language designed to provide the advanced features of sophisticated, high-level programming languages while still programming as close as possible to the bare metal. It brings in the functional, object-oriented, and generic programming paradigms without requiring a garbage collector or a threading system, so programmers really only pay in performance for the features they use.&lt;/i&gt;&quot;  The latter link provides a list of features that Deca does, will, and won&#039;t provide.  Features provided include type inference, universally- and existentially- quantified types, and &quot;a strong region-and-effect system that prohibits unsafe escaping pointers and double-free errors&quot;.&lt;/p&gt;
&lt;p &gt;The Deca language and ideas behind it are documented in a thesis, &lt;a href=&quot;http://decac.googlecode.com/files/Deca%20Thesis.pdf&quot;&gt;The design and implementation of a modern systems programming language&lt;/a&gt; (PDF):&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Low-level systems programming has remained one of the most consistently difficult tasks in software engineering, since systems programmers must routinely deal with details that programming-language and systems researchers have preferred to abstract away. At least partially, the difficulty arises from not applying the state of the art in programming-languages research to systems programming. I therefore describe the design and implementation of Deca, a systems language based on modern PL principles. Deca makes use of decades in programming-languages research, particularly drawing from the state of the art in functional programming, type systems, extensible data-types and subroutines, modularity, and systems programming-languages research. I describe Deca&#039;s feature-set, examine the relevant literature, explain design decisions, and give some of the implementation details for Deca language features. I have been writing a compiler for Deca to translate it into machine code, and I describe the overall architecture of this compiler and some of its details.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The source code for the Deca compiler, decac, is &lt;a href=&quot;http://code.google.com/p/decac/source/checkout&quot;&gt;available here&lt;/a&gt;.  The compiler is implemented in Scala and generates LLVM bytecode.  (The author points out in the comments below that this implementation is a work in progress.)&lt;/p&gt;
&lt;p &gt;The author of Deca is LtU member Eli Gottlieb, who back in 2008 posted in the forum asking for feedback on his language: &lt;a href=&quot;http://lambda-the-ultimate.org/node/2898&quot;&gt;Practical Bits of Making a Compiler for a New Language&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;There&#039;s some more discussion of Deca over at &lt;a href=&quot;http://news.ycombinator.com/item?id=3413936&quot;&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;</description>
 <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/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sun, 01 Jan 2012 21:40:53 -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>Levy:  a Toy Call-by-Push-Value Language</title>
 <link>http://lambda-the-ultimate.org/node/4314</link>
 <description>&lt;p &gt;Andrej Bauer&#039;s &lt;A href=&#039;http://math.andrej.com/&#039;&gt;blog&lt;/A&gt; contains the &lt;A href=&#039;http://math.andrej.com/?s=PL+Zoo&#039;&gt;PL Zoo&lt;/A&gt; project. In particular, the &lt;A href=&#039;http://math.andrej.com/2008/11/23/a-toy-call-by-push-value-language/&#039;&gt;Levy&lt;/A&gt; language, a toy implementation of Paul Levy&#039;s &lt;A href=&#039;http://lambda-the-ultimate.org/node/1975&#039;&gt;CBPV&lt;/A&gt; in OCaml. &lt;/p&gt;
&lt;p &gt;If you&#039;re curious about CBPV, this implementation might be a nice accompaniment to the &lt;A href=&#039;http://portal.acm.org/citation.cfm?id=984044&#039;&gt;book&lt;/A&gt;, or simply a hands on way to check it out.&lt;/p&gt;
&lt;p &gt;It looks like an implementation of CBPV without sum and product types, with complex values, and without effects. I guess a more hands-on way to get to grips with CBPV would be to implement any of these missing features.&lt;/p&gt;
&lt;p &gt;The posts are are 3 years old, but I&#039;ve only just noticed them. The PL Zoo project was &lt;A href=&#039;http://lambda-the-ultimate.org/node/2815#comment-42266&#039;&gt;briefly mentioned&lt;/A&gt; here.&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/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/10">Paradigms</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/19">Theory</category>
 <pubDate>Thu, 14 Jul 2011 14:57:09 -0400</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>Syntactic Proofs of Compositional Compiler Correctness</title>
 <link>http://lambda-the-ultimate.org/node/3765</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/tmp/compose.pdf&quot;&gt;Syntactic Proofs of Compositional Compiler Correctness&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Semantic preservation by compilers for higher-order languages can be veriﬁed using simple syntactic methods. At the heart of classic techniques are relations between source-level and target-level values. Unfortunately, these relations are speciﬁc to particular compilers, leading to correctness theorems that have nothing to say about linking programs with functions compiled by other compilers or written by hand in the target language. Theorems based on logical relations manage to avoid this problem, but at a cost: standard logical relations do not apply directly to programs with non-termination or impurity, and extensions to handle those features are relatively complicated, compared to the classical compiler veriﬁcation literature. &lt;/p&gt;
&lt;p &gt;In this paper, we present a new approach to “open” compiler correctness theorems that is “syntactic” in the sense that the core relations do not refer to semantics. Though the technique is much more elementary than previous proposals, it scales up nicely to realistic languages. In particular, untyped and impure programs may be handled simply, while previous work has addressed neither in this context. &lt;/p&gt;
&lt;p &gt;Our approach is based on the observation that it is an unnecessary handicap to consider proofs as black boxes. We identify some theorem-speciﬁc proof skeletons, such that we can deﬁne an algebra of nondeterministic compilations and their proofs, and we can compose any two compilations to produce a correct-by-construction result. We have prototyped these ideas with a Coq implementation of multiple CPS translations for an untyped Mini-ML source language with recursive functions, sums, products, mutable references, and exceptions.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A submitted draft of another paper from Adam, continuing to expand &lt;a href=&quot;http://ltamer.sourceforge.net&quot;&gt;LambdaTamer&lt;/a&gt;&#039;s reach.&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/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/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 12:10:05 -0500</pubDate>
</item>
<item>
 <title>A Verified Compiler for an Impure Functional Language</title>
 <link>http://lambda-the-ultimate.org/node/3764</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/papers/ImpurePOPL10/&quot;&gt;A Verified Compiler for an Impure Functional Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a verified compiler to an idealized assembly language from a small, untyped functional language with mutable references and exceptions. The compiler is programmed in the Coq proof assistant and has a proof of total correctness with respect to big-step operational semantics for the source and target languages. Compilation is staged and includes standard phases like translation to continuation-passing style and closure conversion, as well as a common subexpression elimination optimization. In this work, our focus has been on discovering and using techniques that make our proofs easy to engineer and maintain. While most programming language work with proof assistants uses very manual proof styles, all of our proofs are implemented as adaptive programs in Coq&#039;s tactic language, making it possible to reuse proofs unchanged as new language features are added.&lt;/p&gt;
&lt;p &gt;In this paper, we focus especially on phases of compilation that rearrange the structure of syntax with nested variable binders. That aspect has been a key challenge area in past compiler verification projects, with much more effort expended in the statement and proof of binder-related lemmas than is found in standard pencil-and-paper proofs. We show how to exploit the representation technique of parametric higher-order abstract syntax to avoid the need to prove any of the usual lemmas about binder manipulation, often leading to proofs that are actually shorter than their pencil-and-paper analogues. Our strategy is based on a new approach to encoding operational semantics which delegates all concerns about substitution to the meta language, without using features incompatible with general purpose type theories like Coq&#039;s logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Further work on/with &lt;a href=&quot;http://ltamer.sourceforge.net/&quot;&gt;LambdaTamer&lt;/a&gt; for certified compiler development.&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/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/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 12:03: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>A Veriﬁed Compiler for an Impure Functional Language</title>
 <link>http://lambda-the-ultimate.org/node/3554</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/tmp/imp.pdf&quot;&gt;A Veriﬁed Compiler for an Impure Functional Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a veriﬁed compiler to an idealized assembly language from a small, untyped functional language with mutable references and exceptions. The compiler is programmed in the Coq proof assistant and has a proof of total correctness with respect to big-step operational semantics for the source and target languages. Compilation is staged and includes standard phases like translation to continuation-passing style and closure conversion, as well as a common subexpression elimination optimization. In this work, our focus has been on discovering and using techniques that make our proofs easy to engineer and maintain. While most programming language work with proof assistants uses very manual proof styles, all of our proofs are implemented as adaptive programs in Coq’s tactic language, making it possible to reuse proofs unchanged as new language features are added. &lt;/p&gt;
&lt;p &gt;In this paper, we focus especially on phases of compilation that rearrange the structure of syntax with nested variable binders. That aspect has been a key challenge area in past compiler veriﬁcation projects, with much more effort expended in the statement and proof of binder-related lemmas than is found in standard pencil-and-paper proofs. We show how to exploit the representation technique of parametric higher-order abstract syntax to avoid the need to prove any of the usual lemmas about binder manipulation, often leading to proofs that are actually shorter than their pencil-and-paper analogues. Our strategy is based on a new approach to encoding operational semantics which delegates all concerns about substitution to the meta language, without using features incompatible with general-purpose type theories like Coq’s logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The latest from Adam Chlipala. Yet another evolutionary step for &lt;a href=&quot;http://lambda-the-ultimate.org/node/2146&quot;&gt;Lambda&lt;/a&gt; &lt;a href=&quot;http://lambda-the-ultimate.org/node/2853&quot;&gt;Tamer&lt;/a&gt;. Between this and &lt;a href=&quot;http://lambda-the-ultimate.org/node/3549&quot;&gt;Ynot&lt;/a&gt; the Coq/certified compiler story seems to be getting more impressive nearly daily.&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/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/29">Semantics</category>
 <pubDate>Mon, 10 Aug 2009 12:09:11 -0400</pubDate>
</item>
<item>
 <title>Oh no!  Animated Alligators!</title>
 <link>http://lambda-the-ultimate.org/node/3485</link>
 <description>&lt;p &gt;Lambda calculus as &lt;a href=&quot;http://visual-languages.blogspot.com/2009/07/alligator-eggs-revisited.html&quot;&gt;animated alligators and eggs&lt;/a&gt;.  Virtually guaranteed to turn any 4 year old into a PLT geek.&lt;/p&gt;
&lt;p &gt;The non-animated game was mentioned previously on LTU &lt;a href=&quot;http://lambda-the-ultimate.org/node/2239&quot;&gt;here&lt;/a&gt;.&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/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/18">Teaching &amp; Learning</category>
 <pubDate>Thu, 09 Jul 2009 14:43:40 -0400</pubDate>
</item>
<item>
 <title>Dana</title>
 <link>http://lambda-the-ultimate.org/node/3214</link>
 <description>&lt;p &gt;Luke Palmer and Nick Szabo can shoot me for this if they want, but I think this is warranted, and I want to connect a couple of dots as well. Luke is one of a number of computer scientists, with &lt;a href=&quot;http://lambda-the-ultimate.org/user/3960/track&quot;&gt;Conal Elliott&lt;/a&gt; probably being the best known, who have devoted quite a bit of attention to Functional Reactive Programming, or FRP. FRP has been &lt;a href=&quot;http://lambda-the-ultimate.org/node/1998&quot;&gt;discussed&lt;/a&gt; on LtU &lt;a href=&quot;http://lambda-the-ultimate.org/node/1771&quot;&gt;off&lt;/a&gt; and &lt;a href=&quot;http://lambda-the-ultimate.org/node/2756&quot;&gt;on&lt;/a&gt; over the years, but, unusually for LtU IMHO, does not seem to have gotten the traction that some other similarly abstruse subjects have.&lt;/p&gt;
&lt;p &gt;In parallel, LtU has had a &lt;a href=&quot;http://lambda-the-ultimate.org/node/1187&quot;&gt;couple&lt;/a&gt; of interesting &lt;a href=&quot;http://lambda-the-ultimate.org/node/1835&quot;&gt;threads&lt;/a&gt; about Second Life&#039;s economy, smart contracts, usage control, denial of service, technical vs. legal remedies, and the like. I would particularly like to call attention to this &lt;a href=&quot;http://lambda-the-ultimate.org/node/1835#comment-22349&quot;&gt;post&lt;/a&gt; by Nick Szabo, in which he discusses a &lt;a href=&quot;http://szabo.best.vwh.net/contractlanguage.html&quot;&gt;contract language&lt;/a&gt; that he designed:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Designing the contract language radically changed my idea of what program flow and instruction pointers can be. Its successor, a general-purpose programming language, may thereby make event-oriented programming and concurrency far easier. The language is targeted at GUI programming as well as smart contracts, real-time, and workflow programming. My answer to the problems of concurrency and event handling is to make the ordering of instructions the syntactic and semantic core of the language. The order of execution and event handlers are the easiest things to express in the language rather than kludged add-ons to a procedural or functional language.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In recent private correspondence, Nick commented that he&#039;d determined that he was reinventing synchronous programming &lt;i &gt;à la&lt;/i&gt; &lt;a href=&quot;http://lambda-the-ultimate.org/classic/message1956.html&quot;&gt;Esterel&lt;/a&gt;, and mentioned &quot;Reactive&quot; programming.&lt;/p&gt;
&lt;p &gt;Ding!&lt;/p&gt;
&lt;p &gt;To make a potentially long entry somewhat shorter, Luke is working on a new language, Dana, which appears to have grown out of some frustration with existing FRP systems, including Conal Elliot&#039;s &lt;a href=&quot;http://www.haskell.org/haskellwiki/Reactive&quot;&gt;Reactive&lt;/a&gt;, currently perhaps the lynchpin of FRP research. Luke&#039;s motivating kickoff post for the Dana project can be found &lt;a href=&quot;http://lukepalmer.wordpress.com/2009/01/24/the-third-virtue/&quot;&gt;here&lt;/a&gt;, and there are several follow-up posts, including links to experimental source code repositories. Of particularly motivating interest, IMHO, is &lt;a href=&quot;http://lukepalmer.wordpress.com/2009/01/24/existential-memoization/&quot;&gt;this&lt;/a&gt; post, where Luke discusses FRP&#039;s interaction with garbage collection succinctly but nevertheless in some depth. Luke&#039;s most recent &lt;a href=&quot;http://lukepalmer.wordpress.com/2009/02/18/dependent-types-are-ridiculously-easy/&quot;&gt;post&lt;/a&gt; makes the connection from Dana, which Luke has determined needs to have a dependently-typed core, to Illative Combinatory Logic, explicit, and offers a ~100 line type checker for the core.&lt;/p&gt;
&lt;p &gt;I find this very exciting, as I believe strongly in the project of being able to express computation centered on time, in the sense of Nick&#039;s contract language, in easy and safe ways extremely compelling. I&#039;ve intuited for some time now that FRP represents a real breakthrough in moving us past the Von Neumann runtime paradigm in fundamental ways, and between Conal Elliott&#039;s and Luke&#039;s work (and no doubt that of others), it seems to me that my sense of this may be borne out, with Nick&#039;s contract language, or something like it, as an initial application realm.&lt;/p&gt;
&lt;p &gt;So I wanted to call attention to Luke&#039;s work, and by extension recapitulate Conal&#039;s and Nick&#039;s, both for the PLT aspects that Luke&#039;s clearly represents, but also as a challenge to the community to assist in the realization of Nick&#039;s design efforts, if at all possible.&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/6">General</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/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Wed, 18 Feb 2009 16:55:30 -0500</pubDate>
</item>
<item>
 <title>Parameterized Notions of Computation</title>
 <link>http://lambda-the-ultimate.org/node/3210</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://homepages.inf.ed.ac.uk/ratkey/paramnotions-jfp.pdf&quot;&gt;Parameterized Notions of Computation&lt;/a&gt;, Robert Atkey, JFP 2008. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Moggi&#039;s Computational Monads and Power et al&#039;s equivalent notion of Freyd category have captured a large range of computational effects present in programming languages. Examples include non-termination, non-determinism, exceptions, continuations, side-effects and input/output. We present generalisations of both computational monads and Freyd categories, which we call parameterised monads and parameterised Freyd categories, that also capture computational effects with parameters. &lt;/p&gt;
&lt;p &gt;Examples of such are composable continuations, side-effects where the type of the state varies and input/output where the range of inputs and outputs varies. By also considering structured parameterisation, we extend the range of effects to cover separated side-effects and multiple independent streams of I/O. We also present two typed λ-calculi that soundly and completely model our categorical definitions — with and without symmetric monoidal parameterisation — and act as prototypical languages with parameterised effects.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Once you&#039;ve programmed with monads for a while, it&#039;s pretty common to start defining parameterized families of monads -- e.g., we might define a family of type constructors for IO, in which the program type additionally tracks which files the computation reads and writes from. This is a very convenient programming pattern, but the theory of it is honestly a little sketchy: on what basis do we conclude that the indices we define &lt;em &gt;actually&lt;/em&gt; track what we intend them to? And furthermore, why can we believe that (say) the monadic equational laws still apply? That&#039;s the question Atkey lays out a nice solution to. He gives a nice categorical semantics for indexed, effectful computations, and then cooks up lambda calculi whose equational theory corresponds to the equations his semantics justifies. &lt;/p&gt;
&lt;p &gt;The application to delimited continuations is quite nice, and the type theories can also give a little insight into the basics of how stuff like Hoare Type Theory works (which uses parameterized monads, with a very sophisticated language of parameters). &lt;/p&gt;
&lt;p &gt;On a slightly tangential note, this also raises in my mind a methodological point. Over the last &lt;em &gt;n&lt;/em&gt; years, we&#039;ve seen many people identify certain type constructors, whose usage is pervasive, and greatly simplified with some syntactic extensions  -- monads, comonads, applicative functors, arrows, and so on. It&#039;s incredible to suggest that we have exhausted the list of interesting types, and so together they constitute a good argument for some kind of language extension mechanism, such as macros. However, all these examples also &lt;em &gt;raise the bar&lt;/em&gt; for when a macro is a good idea, because what makes them compelling is precisely that the right syntax yields an interesting and pretty equational theory in the extended language. &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/20">Lambda Calculus</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>Wed, 11 Feb 2009 16:40:24 -0500</pubDate>
</item>
<item>
 <title>SEP entry on Combinatory Logic</title>
 <link>http://lambda-the-ultimate.org/node/3098</link>
 <description>&lt;p &gt;There&#039;s a new entry on &lt;a href=&quot;http://plato.stanford.edu/entries/logic-combinatory/&quot;&gt;Combinatory Logic&lt;/a&gt; in the Stanford Encyclopedia of Philosophy.&lt;p &gt;
I haven&#039;t perused it yet, so please share opinions and comments.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <pubDate>Mon, 17 Nov 2008 14:45:58 -0500</pubDate>
</item>
</channel>
</rss>

