<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mathematics and Computation &#187; Talks</title>
	<atom:link href="http://math.andrej.com/category/talks/feed/" rel="self" type="application/rss+xml" />
	<link>http://math.andrej.com</link>
	<description>Mathematics for computers</description>
	<lastBuildDate>Thu, 05 Apr 2012 20:51:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta2-20500</generator>
		<item>
		<title>HoTT Equivalences</title>
		<link>http://math.andrej.com/2011/12/07/hott-equivalences/</link>
		<comments>http://math.andrej.com/2011/12/07/hott-equivalences/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 14:57:02 +0000</pubDate>
		<dc:creator>Andrej Bauer</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://math.andrej.com/?p=1092</guid>
		<description><![CDATA[<p></p>
<p>On December 6th 2011 I gave a talk about homotopy equivalences in the context of homotopy type theory at our seminar for foundations of mathematics and theoretical computer science. I discuss the differences and relations between isomorphism (in the sense of type theory), an adjoint equivalence, and a homotopy equivalence. Even though the talk itself was [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/33218969?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>On December 6th 2011 I gave a talk about homotopy equivalences in the context of homotopy type theory at our seminar for foundations of mathematics and theoretical computer science. I discuss the differences and relations between isomorphism (in the sense of type theory), an adjoint equivalence, and a homotopy equivalence. Even though the talk itself was not super-well prepared, I hope the recording will be interesting to some people. I was going fairly slowly, so it should be possible to follow the talk. I apologize for such a long video, but I really did not see how to chop it up into smaller pieces. Also, I need to figure out why I cannot fast forward the video beyond what has been downloaded.</p>
]]></content:encoded>
			<wfw:commentRss>http://math.andrej.com/2011/12/07/hott-equivalences/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to make the &#8220;impossible&#8221; functionals run even faster</title>
		<link>http://math.andrej.com/2011/12/06/how-to-make-the-impossible-functionals-run-even-faster/</link>
		<comments>http://math.andrej.com/2011/12/06/how-to-make-the-impossible-functionals-run-even-faster/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 14:27:42 +0000</pubDate>
		<dc:creator>Andrej Bauer</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://math.andrej.com/?p=1086</guid>
		<description><![CDATA[<p></p>
<p>A talk given at &#8220;Mathematics, Algorithms and Proofs 2011&#8243; at the Lorentz Center in Leiden, the Netherlands. I explain how to use computational effects to speed up Martin Escardo&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/32811801?title=0&amp;byline=0&amp;portrait=0" width="400" height="300" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>A talk given at <a href="http://www.lorentzcenter.nl/lc/web/2011/467/info.php3?wsid=467">&#8220;Mathematics, Algorithms and Proofs 2011&#8243;</a> at the Lorentz Center in Leiden, the Netherlands. I explain how to use computational effects to speed up <a href="http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/">Martin Escardo&#8217;s impossible functionals</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://math.andrej.com/2011/12/06/how-to-make-the-impossible-functionals-run-even-faster/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Embedding the Baire space into natural numbers</title>
		<link>http://math.andrej.com/2011/12/06/embedding-the-baire-space-into-natural-numbers/</link>
		<comments>http://math.andrej.com/2011/12/06/embedding-the-baire-space-into-natural-numbers/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 14:22:51 +0000</pubDate>
		<dc:creator>Andrej Bauer</dc:creator>
				<category><![CDATA[Talks]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://math.andrej.com/?p=1081</guid>
		<description><![CDATA[<p></p>
<p>A talk given at &#8220;Computation with Infinite Data: Logical and Topological Foundations&#8221; Dagstuhl seminar 11411. I describe a realizability model based on infinite-time Turing machines in which it is possible to embed the Baire space (infinite sequences of numbers) into the space of numbers.</p>
<p>Also see the post Constructive gem: an injection from Baire space to natural [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/30368682?title=0&amp;byline=0&amp;portrait=0" width="500" height="375" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>A talk given at &#8220;Computation with Infinite Data: Logical and Topological Foundations&#8221; <a href="http://www.dagstuhl.de/11411">Dagstuhl seminar 11411</a>. I describe a realizability model based on infinite-time Turing machines in which it is possible to embed the Baire space (infinite sequences of numbers) into the space of numbers.</p>
<p>Also see the post <a href="http://math.andrej.com/2011/06/15/constructive-gem-an-injection-from-baire-space-to-natural-numbers/">Constructive gem: an injection from Baire space to natural numbers</a> for written notes on this topic.</p>
]]></content:encoded>
			<wfw:commentRss>http://math.andrej.com/2011/12/06/embedding-the-baire-space-into-natural-numbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming with effects I: Theory</title>
		<link>http://math.andrej.com/2010/09/27/programming-with-effects-i-theory/</link>
		<comments>http://math.andrej.com/2010/09/27/programming-with-effects-i-theory/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 21:30:33 +0000</pubDate>
		<dc:creator>Andrej Bauer</dc:creator>
				<category><![CDATA[Computation]]></category>
		<category><![CDATA[Eff]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Talks]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://math.andrej.com/?p=560</guid>
		<description><![CDATA[<p>[UPDATE 2012-03-08: since this post was written eff has changed considerably. For updated information, please visit the eff page.]</p>
<p>I just returned from Paris where I was visiting the INRIA ?r² team. It was a great visit, everyone was very hospitable, the food was great, and the weather was nice. I spoke at their seminar where I [...]]]></description>
			<content:encoded><![CDATA[<p><strong>[UPDATE 2012-03-08: since this post was written eff has changed considerably. For updated information, please visit the <a href="/eff/">eff page</a>.]</strong></p>
<p>I just returned from Paris where I was visiting the INRIA <a href="http://www.pps.jussieu.fr/pi.r2/">?r² team</a>. It was a great visit, everyone was very hospitable, the food was great, and the weather was nice. I spoke at their seminar where I presented a new programming language <em><strong>eff</strong></em> which is based on the idea that computational effects are algebras. The language has been designed and implemented jointly by <a href="http://matija.pretnar.info/">Matija Pretnar</a> and myself. Eff is far from being finished, but I think it is ready to be shown to the world. What follows is an extended transcript of the talk I gave in Paris. It is divided into two posts. The present one reviews the basic theory of algebras for a signature and how they are related to computational effects. The impatient readers can skip ahead to <a href="http://math.andrej.com/2010/09/27/programming-with-effects-ii-introducing-eff/">the second part</a>, which is about the programming language.</p>
<p>A side remark: I have updated the blog to WordPress to 3.0 and switched to <a href="http://www.mathjax.org/">MathJax</a> for displaying mathematics. Now I need to go through 70 old posts and convert the old ASCIIMathML notation to MathJax, as well as fix characters which got garbled during the update. Oh well, it is an investment for the future.</p>
<p><span id="more-560"></span></p>
<h3>Algebras and homomorphisms</h3>
<p>An <em>algebra</em> $(A, f_1, \ldots, f_k)$ is a set $A$ together with maps $f_i : A^{n_i} \to A$ for $i = 1, \ldots, k$, called the <em>operations</em>. The number $n_i$ is the <em>arity</em> of operation $f_i$. The quintessential example of an algebra is a group, which is a set $G$ together with three operations $u : 1 \to A$, $i : A \to A$, and $m : A^2 \to A$ of arities 0, 1, and 2, respectively. These are of course the unit, the inverse, and the multiplication, and for $G$ to really be a group they have to satisfy the usual <a href="http://en.wikipedia.org/wiki/Group_(mathematics)#Definition">group axioms</a>.</p>
<p>For our purposes we need to make two adaptations to the classical view of algebras. Given an $n$-ary operation $f : A^n \to A$ and elements $t_1, \ldots, t_n \in A$, we can form the element $f(t_1, \ldots, t_n) \in A$. The $n$-tuple $(t_1, \ldots, t_n)$ is equivalent to the map $\lambda i . t_i$ where $i \in \{1, 2, \ldots, n\}$. So instead of $f(t_1, \ldots, t_n)$ we shall write $f(\lambda i . t_i).$ Now one quickly gets the idea that there is no need to restrict arity to sets of the form $\{1, 2, \ldots, n\}$. Thus we allow any set $N$ to be the arity of an operation $f : A^N \to A$. (I am using $A^N$ and $N \to A$ as two different notations for the same thing.) The $\lambda$-notation neatly accommodates general arities: given a map $k : N \to A$ and an operation $f: A^N \to A$ we can form the element $f(k) \in A$. An example of an operation with a strange arity is integration $\int_0^1 : \mathbb{R}^{[0,1]} \to \mathbb{R}$ which takes a (measurable) map $k : [0,1] \to \mathbb{R}$ to its integral. Its arity is the closed unit interval.</p>
<p>We shall need operations that take parameters, too. An example of a parametrized operation is scalar multiplication $m : \mathbb{R} \times V \to V$ which takes a scalar and a vector and returns a vector. The arity of $m$ is 1, but $m$ also takes an additional parameter from $\mathbb{R}$. In general a parametrized operation on a set $A$ is a map<br />
$$f : P \times A^N \to A$$<br />
where $P$ is the set of <em>parameters</em>, $N$ is the <em>arity</em> and $A$ is the <em>carrier</em>. We call the pair $(P,N)$ the <em>type</em> of the operation $f$.</p>
<p>A <em>signature</em> $\Sigma$ is a list of operation names together with their types:<br />
$$f_1 : (P_1, N_1), \ldots, f_k : (P_k, N_k).$$<br />
For example, the signature for a group is $u : (1,0), i : (1,1), m : (1,2).$ A <em>$\Sigma$-algebra</em> is an algebra which has operations prescribed by $\Sigma$. The category of $\Sigma$-algebras has as objects the $\Sigma$-algebras and as morphisms maps which preserve the operations, also known as <em>homomorphisms</em>. The <em>free $\Sigma$-algebra $F_\Sigma(X)$</em> generated by a set $X$ is defined inductively by the rules:</p>
<ol>
<li>for every $x \in X$, $\mathtt{return}(x) \in F_\Sigma(X)$,</li>
<li>if $f$ is an operation name of type $(P,N)$, $p \in P$, and $k : N \to F_\Sigma(X)$ then the symbolic expression $f(p,k)$ is an element of $F_\Sigma(X)$.</li>
</ol>
<p>The reason for writing $\mathtt{return}(x)$ instead of just $x$ is that it should remind you of $\mathtt{return}$ from Haskell's monads. The elements of $F_\Sigma(X)$ are best thought of as well-founded trees whose leaves are labeled with elements of $X$ and whose branching types are the operations from $\Sigma$.</p>
<p>Given a $\Sigma$-algebra $A$ and a map $r : X \to A$ there is a unique homomorphism $h : F_\Sigma(X) \to A$ such that, for all $x \in X$,<br />
$$h(\mathtt{return}(x)) = r(x)$$<br />
and for every operation $f : (P, N)$ in $\Sigma$, $p \in P$, and $k : N \to F_\Sigma(X)$,<br />
$$h(f(p,k)) = f_A(p, h \circ k).$$<br />
Here $f_A : P \times A^N \to A$ is the operation on $A$ corresponding to $f$. You may view these two equations as a recursive definition of $h$.</p>
<h3>Two examples from programming languages</h3>
<p>Let us consider two examples of algebras from programming languages.</p>
<p>The first one is mutable store, i.e., a program computing a value of type $T$ with access to one mutable memory cell of type $S$. The content of the cell can be read with operation $\mathtt{lookup}$ and written to with operation $\mathtt{update}$. The situation is modeled with an algebra whose carrier is $T^S$, i.e., a program that computes the result, given the content of the memory cell. The operations<br />
$$\mathtt{lookup} : (T^S)^S \to T^S,<br />
\qquad\qquad<br />
\mathtt{update} : S \times T^S \to T^S$$<br />
are defined as<br />
$$\mathtt{lookup} (k) = \lambda s . k \; s \; s,<br />
\qquad\qquad<br />
\mathtt{update} (t, k) = \lambda s . k \; t.$$<br />
Thus $\mathtt{lookup}$ accepts no parameters (in other words, the parameter space is the singleton 1) and has arity $S$, while $\mathtt{update}$ accepts a parameter of type $S$ and has arity $1$. The two operations satisfy various equations, for example<br />
$$\mathtt{update} (t, \mathtt{update} (u, k)) = \mathtt{update} (u, k)$$<br />
and<br />
$$\mathtt{lookup} (\lambda s . \mathtt{update} (s, k)) = k.$$<br />
The first one says that writing $t$ then $u$ to the memory cell is the same as writing just $u$. The second one says that writing the value that has just been looked up is the same as doing nothing. You may try writing down all the relevant equations for $\mathtt{lookup}$ and $\mathtt{update}$ before you look them up in papers of Gordon Plotkin and John Power, or <a href="http://matija.pretnar.info/the-logic-and-handling-of-algebraic-effects.pdf">Matija's thesis</a>.</p>
<p>Observe that $\mathtt{lookup}$ and $\mathtt{update}$ are polymorphic in the type $T$ of the result. This means that we can use them anywhere in the program, no matter what happens afterwards. Many operations are like that, but not all (we shall see examples later on).</p>
<p>In my experience, two points of confusion arise:</p>
<ol>
<li>What is $k$ in $\mathtt{lookup}(k)$? Answer: it is the rest of the program, it is what happens <em>after</em> lookup, it is the <a href="http://en.wikipedia.org/wiki/Continuation">continuation</a>.</li>
<li>Does $\mathtt{update} (t, \mathtt{update} (u, k))$ mean that we update with $t$ and then with $u$, or the other way around? After all, in $\log(\cos(\pi/4))$ we have to compute the <em>inner</em> cosine first and the logarithm second. Answer: update with $t$ happens before update  with $u$ because the argument of an operation is the stuff that happens <em>after</em> the operation.</li>
</ol>
<p>As a second example we take exceptions. To make things simple and familiar, we shall consider just one exception called $\mathtt{fail}$ which takes no parameters. In Haskell such a thing is modeled with the <a href="http://www.haskell.org/all_about_monads/html/maybemonad.html">Maybe monad</a>, so let us use Haskell-like notation. The type of $\mathtt{fail}$ is<br />
$$\mathtt{fail} : \mathtt{unit} \to \mathtt{Maybe}\; T,$$<br />
and its action is $\mathtt{fail}() = \mathtt{Nothing}$. This is a bit mysterious but if we write the type of the operation out in full,<br />
$$\mathtt{fail} : 1 \times (1 + T)^0 \to 1 + T,$$<br />
we see that $\mathtt{fail}$ takes no parameters, is a nullary operation, and that a (possibly) aborting program returns either $\mathtt{Nothing}$ or a result $\mathtt{Just}\;x$. How do we model exception handlers? Gordon Plotkin and Matija Pretnar had the important <a href="http://matija.pretnar.info/handlers-of-algebraic-effects.pdf">idea</a> that a piece of code with unhandled $\mathtt{fail}$ amounts to an element of the free algebra for the signature $\mathtt{fail} : (1,0)$, while handled $\mathtt{fail}$ corresponds to some other algebra for the same signature. The unique homomorphism from the free algebra to the other one is the handling construct. To see this, consider the following piece of (pseudo)code:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">
handle:
    a = 1
    b = 2
    fail()
    return (a + b)
with:
    operation fail(): return (42)
</pre>
<p>The code between <code>handle</code> and <code>with</code> is an element of the free algebra, namely the element $\mathtt{fail}()$. Ok, you are wondering where the rest went, but consider this: either the program raises $\mathtt{fail}$, in which case it is equivalent to $\mathtt{fail}()$, or it returns a result $x$, in which case it is equivalent to $\mathtt{return}(x)$. Or to put it in a different way: we can delete all the stuff that comes after $\mathtt{fail}$ because it will never happen, while things before it have no effect on the end result either (<em>provided</em> they are free of computational effects). The <code>with</code> part tells us that $\mathtt{fail}()$ should be interpreted as $42$. But this is precisely what an algebra for the signature $\mathtt{fail} : (1,0)$ is: a set with a chosen element, in our case the set of integers with the chosen element $42$.</p>
<h3>Handlers</h3>
<p>All of what we have just said about exceptions generalizes to arbitrary signatures and handlers: <em>every</em> algebraic computational effect has an associated notion of <em>handlers</em>. In eff you can handle (intercept, catch) not only exceptions, but also input, output, access to memory, etc. Let us look at the theoretical background for this idea.</p>
<p>Let $\Sigma$ be the signature $f_1 : (P_1, N_1), \ldots, f_k : (P_k, N_k)$. An element $t$ of the free algebra $F_\Sigma(X)$ is a well-founded tree whose nodes are the operations $f_i$ and the leaves are elements of type $X$. We think of $t$ as a piece of inert source code of type $X$ with unhandled operations $f_1, \ldots, f_k$. In order to give $t$ a computational interpretation we need to explain how the operations $f_i$ are interpreted. We might write something like this:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">
handle:
    t
with:
    operation f_1(p,k): t_1(p,k)
    operation f_2(p,k): t_2(p,k)
    ...
    return (x): r(x)
</pre>
<p>This means that in $t$ the operation $f_i(p,k)$ is interpreted as $t_i(p,k)$, and that $\mathtt{return}(x)$ is interpreted as $r(x)$. We have seen this before in a different guise. Namely, the above handler is precisely the unique homomorphism $h : F_\Sigma(T) \to A$ into the $\Sigma$-algebra $A$ whose operations are $t_1, \ldots, t_n$, and such that $h(\mathtt{return}(x)) = r(x)$.</p>
<p>A handler may handle only some operations and leave others alone. Let $\Sigma = (f,g)$ be a signature with two operations $f$ and $g$, and we do not bother to write down their types. Let $t \in F_{(f,g)}(X)$ be a term of type $X$ with unhandled operations $f$ and $g$. The handler</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">
handle:
    t
with:
    operation f(p, k): u(p, k)
    return (x): r(x)
</pre>
<p>only handles $f$ and leaves $g$ alone. How should we interpret this? Well, we could say that <em>both</em> operations are handled, except that $g$ is handled by itself:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">
handle:
    t
with:
    operation f(p,k): u(p,k)
    operation g(p,k): g(p,k)
    return (x): r(x)
</pre>
<p>Now it is clear that the handler corresponds to the unique homomorphism $h : F_{(f,g)}(X) \to F_{(g)}(Y)$ such that $h(f(p,k)) = u(p, h \circ k)$, $h(g(p,k)) = g(p, h \circ k)$ and $h(\mathtt{return}(x)) = r(x)$. As an exercise you should figure out the types of $u$ and $r$ and write down precisely the algebra that is the codomain of $h$.</p>
<h3>Generic effects and sequencing</h3>
<p>We have seen that an operation accepts a parameter and a continuation. We cannot expect programmers to write down explicit continuations all the time, so we switch to an equivalent but friendlier syntax known as <em>generic</em> effects and <em>sequencing</em> (or "<a href="http://www.haskell.org/haskellwiki/Monad#Special_notation">do notation</a>" in Haskell). An operation applied to parameter $p$ and continuation $\lambda x . c$,<br />
$$f(p, \lambda x . c),$$<br />
is written with generic effects and sequencing as<br />
$$\begin{split}&amp;x \leftarrow f_\mathrm{gen}(p) \\ &amp; c.\end{split}$$<br />
Read this as: "First perform generic effect $f_\mathrm{gen}$ applied to parameter $p$, let $x$ be the return value, and then do $c$."</p>
<p>If $f$ is an operation of type $(P,N)$ then $f_\mathrm{gen}$ is a map $f_\mathrm{gen} : P \to F_\Sigma(N)$ defined by $f_\mathrm{gen}(p) = f(p, \lambda x . \mathtt{return}(x))$.</p>
<p>Sequencing is a special kind of handler. If $t \in F_\Sigma(X)$ and $u : X \to F_\Sigma(Y)$ then sequencing<br />
$$\begin{split}&amp;x \leftarrow t \\ &amp; u(x)\end{split}$$<br />
denotes the element $h(t) \in F_\Sigma(Y)$ where $h : F_\Sigma(X) \to F_\Sigma(Y)$ is the unique homomorphism satisfying<br />
$$h(\mathtt{return}(x)) = u(x)$$<br />
and, for every operation $f_i$ in $\Sigma$,<br />
$$h(f_i(p,k)) = f_i(p,h \circ k).$$<br />
What these equations amount to is that sequencing passes the operations through and binds return values.</p>
<p>A minor complication ensues when we try to write down handlers for generic effects. A handler needs access to the continuation, but the generic effect does not carry it around explicitly. Eff uses the <code>yield</code> keyword for access to the continuation.</p>
<h3>Instances of algebras</h3>
<p>Mathematicians often take an algebra $A$ and consider two instances of it, for example in order to form a product $A \times A$. While such a move requires no special notation in mathematics, we need to be more careful about it in a programming language. Each instance of an algebra represents an instance of a computational effect which may require its own resources. For example, if $R$ is an algebra modeling a mutable memory cell, then having two instances of $R$ will be like having two mutable memory cells. In eff instances of algebras are created with the <code>with</code> keyword:</p>
<pre class="brush: plain; gutter: false; title: ; notranslate">
with E as x:
    ...
</pre>
<p>The above code creates an instance of effect $E$ and calls it $x$. The scope of the instance is local, i.e., it only exists inside the block marked with "...".</p>
<p>Without further ado, let us now <a href="http://math.andrej.com/2010/09/27/programming-with-effects-ii-introducing-eff/">look at eff proper.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://math.andrej.com/2010/09/27/programming-with-effects-i-theory/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Mathematically Structured but not Necessarily Functional Programming</title>
		<link>http://math.andrej.com/2009/05/29/mathematically-structured-but-not-necessarily-functional-programming/</link>
		<comments>http://math.andrej.com/2009/05/29/mathematically-structured-but-not-necessarily-functional-programming/#comments</comments>
		<pubDate>Fri, 29 May 2009 06:16:18 +0000</pubDate>
		<dc:creator>Andrej Bauer</dc:creator>
				<category><![CDATA[Computation]]></category>
		<category><![CDATA[Constructive math]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[RZ]]></category>
		<category><![CDATA[Talks]]></category>

		<guid isPermaLink="false">http://math.andrej.com/?p=217</guid>
		<description><![CDATA[<p>These are the slides and the extended abstract from my MSFP 2008 talk. Apparently, I forgot to publish them online. There is a discussion on the Agda mailing list to which the talk is somewhat relevant, so I am publishing now.</p>
<p>Abstract: Realizability is an interpretation of intuitionistic logic which subsumes the Curry-Howard interpretation of propositions as [...]]]></description>
			<content:encoded><![CDATA[<p>These are the slides and the extended abstract from my <a href="http://msfp.org.uk/">MSFP</a> 2008 talk. Apparently, I forgot to publish them online. There is a discussion on the <a href="http://wiki.portal.chalmers.se/agda/">Agda</a> mailing list to which the talk is somewhat relevant, so I am publishing now.</p>
<p><strong>Abstract:</strong> Realizability is an interpretation of intuitionistic logic which subsumes the Curry-Howard interpretation of propositions as types, because it allows the realizers to use computational effects such as non-termination, store and exceptions. Therefore, we can use realizability as a framework for program development and extraction which allows any style of programming, not just the purely functional one that is supported by the Curry-Howard correspondence. In joint work with <a href="http://www.cs.hmc.edu/~stone/">Christopher A. Stone</a> we developed RZ, a tool which uses realizability to translate specifications written in constructive logic into interface code annotated with logical assertions. RZ does not extract code from proofs, but allows any implementation method, from handwritten code to code extracted from proofs by other tools. In our experience, RZ is useful for specification of non-trivial theories. While the use of computational effects does improve efficiency it also makes it difficult to reason about programs and prove their correctness. We demonstrate this fact by considering non-purely functional realizers for a Brouwerian continuity principle.</p>
<p><strong>Download: </strong><a href="/wp-content/uploads/2009/05/msfp2008-slides.pdf">msfp2008-slides.pdf</a>, <a href="/wp-content/uploads/2009/05/msfp2008-abstract.pdf">msfp2008-abstract.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://math.andrej.com/2009/05/29/mathematically-structured-but-not-necessarily-functional-programming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

