<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Call-by-push-value</title>
	<atom:link href="http://sneezy.cs.nott.ac.uk/fplunch/weblog/?feed=rss2&#038;p=159" rel="self" type="application/rss+xml" />
	<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159</link>
	<description>abstracting the pain away</description>
	<lastBuildDate>Tue, 17 May 2011 07:05:56 +0100</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
	<item>
		<title>By: Wouter</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24525</link>
		<dc:creator>Wouter</dc:creator>
		<pubDate>Sun, 07 Dec 2008 17:07:44 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24525</guid>
		<description>Justin: No particular reason, I&#039;m afraid. You could just as well give small-step semantics I suppose. Most of these rules are from Paul Levy&#039;s book on CBPV - he may have a better reason than I do.</description>
		<content:encoded><![CDATA[<p>Justin: No particular reason, I&#8217;m afraid. You could just as well give small-step semantics I suppose. Most of these rules are from Paul Levy&#8217;s book on CBPV &#8211; he may have a better reason than I do.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Justin</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24504</link>
		<dc:creator>Justin</dc:creator>
		<pubDate>Thu, 04 Dec 2008 17:25:02 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24504</guid>
		<description>Wouter,

Why the choice for big-step evaluation rules rather than single-step in your PDF? Just curious.</description>
		<content:encoded><![CDATA[<p>Wouter,</p>
<p>Why the choice for big-step evaluation rules rather than single-step in your PDF? Just curious.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Noam</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24247</link>
		<dc:creator>Noam</dc:creator>
		<pubDate>Mon, 24 Nov 2008 14:53:17 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24247</guid>
		<description>Paul: I meant both lazy and eager.  Specifically I&#039;m thinking of Haskell, where both lambdas and lazy pairs are considered &quot;values&quot;.  You could argue that &lt;i&gt;that&lt;/i&gt; is misleading terminology, but in any case it&#039;s a potential source of confusion with cbpv.</description>
		<content:encoded><![CDATA[<p>Paul: I meant both lazy and eager.  Specifically I&#8217;m thinking of Haskell, where both lambdas and lazy pairs are considered &#8220;values&#8221;.  You could argue that <i>that</i> is misleading terminology, but in any case it&#8217;s a potential source of confusion with cbpv.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24240</link>
		<dc:creator>Paul</dc:creator>
		<pubDate>Mon, 24 Nov 2008 12:50:41 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24240</guid>
		<description>Noam: when you say &quot;in ordinary functional programming, lambdas are values&quot;, does
&quot;ordinary&quot; mean lazy or eager?  If you mean eager, I agree that lambdas are values, but cbv lambda translates into thunk lambda, so it remains a value in cbpv.</description>
		<content:encoded><![CDATA[<p>Noam: when you say &#8220;in ordinary functional programming, lambdas are values&#8221;, does<br />
&#8220;ordinary&#8221; mean lazy or eager?  If you mean eager, I agree that lambdas are values, but cbv lambda translates into thunk lambda, so it remains a value in cbpv.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrej Bauer</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24181</link>
		<dc:creator>Andrej Bauer</dc:creator>
		<pubDate>Sun, 23 Nov 2008 10:10:27 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24181</guid>
		<description>You might be interested in looking at the toy language &quot;levy&quot; in my &lt;a href=&quot;http://www.andrej.com/plzoo/&quot; rel=&quot;nofollow&quot;&gt;Programming Languages Zoo&lt;/a&gt;. It closely follows Paul Levy&#039;s call-by-push-value language and might be a good starting point for experimentation with call-by-push-value.</description>
		<content:encoded><![CDATA[<p>You might be interested in looking at the toy language &#8220;levy&#8221; in my <a href="http://www.andrej.com/plzoo/" rel="nofollow">Programming Languages Zoo</a>. It closely follows Paul Levy&#8217;s call-by-push-value language and might be a good starting point for experimentation with call-by-push-value.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Noam</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24147</link>
		<dc:creator>Noam</dc:creator>
		<pubDate>Sat, 22 Nov 2008 18:09:53 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24147</guid>
		<description>Wouter/Hank: so I think the terminology &quot;value&quot; vs &quot;computation&quot; is a bit misleading, because in ordinary functional programming, lambda&#039;s are values.  The way Paul explains value types vs computation types is in terms of the semantics: value types are modelled by sets, computation types by algebras.  The coercions F (turning a value type into a computation type) and U (turning a computation type into a value type) represent an adjunction between sets and algebras (hence Paul&#039;s use of the symbols F and U, by analogy to the free algebra functor, and the underlying set functor).  So rather than thinking of computations as modelled by &quot;computation types&quot; as such, it&#039;s better to think of them as modelled by this adjunction.

The unity of duality paper also had some misleading terminology, and these days I like to speak of both positive and negative values, and positive and negative continuations.  My favorite way to think about these is in terms of pattern-matching: positive types are &lt;i&gt;eliminated&lt;/i&gt; (i.e., we build positive continuations) by pattern-matching, while negative types are &lt;/i&gt;introduced&lt;/i&gt; (i.e., we build negative values) by pattern-matching.  This explains why the ordinary function space of functional programming is negative, because we define functions by pattern-matching.  (A positive function space would be weird, because it would be eliminated by pattern-matching...but indeed that&#039;s what the paper on &quot;focusing on binding and computation&quot; is about.)  A slightly subtle point, though, is that we build negative values by pattern-matching against patterns of &lt;i&gt;destructors.&lt;/i&gt;  It so happens that a destructor pattern for A -&gt; B contains a constructor pattern for A (and a destructor pattern for B).  You can also think of the negative type of lazy pairs: the way we build a lazy pair is by pattern-matching against the two possible destructors, fst and snd, saying what value to return in each case.</description>
		<content:encoded><![CDATA[<p>Wouter/Hank: so I think the terminology &#8220;value&#8221; vs &#8220;computation&#8221; is a bit misleading, because in ordinary functional programming, lambda&#8217;s are values.  The way Paul explains value types vs computation types is in terms of the semantics: value types are modelled by sets, computation types by algebras.  The coercions F (turning a value type into a computation type) and U (turning a computation type into a value type) represent an adjunction between sets and algebras (hence Paul&#8217;s use of the symbols F and U, by analogy to the free algebra functor, and the underlying set functor).  So rather than thinking of computations as modelled by &#8220;computation types&#8221; as such, it&#8217;s better to think of them as modelled by this adjunction.</p>
<p>The unity of duality paper also had some misleading terminology, and these days I like to speak of both positive and negative values, and positive and negative continuations.  My favorite way to think about these is in terms of pattern-matching: positive types are <i>eliminated</i> (i.e., we build positive continuations) by pattern-matching, while negative types are introduced (i.e., we build negative values) by pattern-matching.  This explains why the ordinary function space of functional programming is negative, because we define functions by pattern-matching.  (A positive function space would be weird, because it would be eliminated by pattern-matching&#8230;but indeed that&#8217;s what the paper on &#8220;focusing on binding and computation&#8221; is about.)  A slightly subtle point, though, is that we build negative values by pattern-matching against patterns of <i>destructors.</i>  It so happens that a destructor pattern for A -&gt; B contains a constructor pattern for A (and a destructor pattern for B).  You can also think of the negative type of lazy pairs: the way we build a lazy pair is by pattern-matching against the two possible destructors, fst and snd, saying what value to return in each case.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wouter</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24114</link>
		<dc:creator>Wouter</dc:creator>
		<pubDate>Sat, 22 Nov 2008 11:17:27 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24114</guid>
		<description>Jean-Philippe: You may want to have a look at some of &lt;a href=&quot;http://www.cs.cmu.edu/~noam/research.html&quot; rel=&quot;nofollow&quot;&gt;Noam Zeilberger&#039;s papers&lt;/a&gt;. He has written quite a lot about focusing. &lt;a href=&quot;http://www.cs.cmu.edu/~noam/research/unity-duality.pdf&quot; rel=&quot;nofollow&quot;&gt;On the unity of duality&lt;/a&gt; is probably a good place to start.

 I don&#039;t think Conor&#039;s ever written anything up about Frank, but you might be interested in &lt;a href=&quot;http://cs.ioc.ee/efftt/mcbride-slides.pdf&quot; rel=&quot;nofollow&quot;&gt;the slides of his talk at the Effects in Type Theory Workshop&lt;/a&gt;.

Noam: Thanks for your reply! I&#039;ve had &quot;Read Noam&#039;s Agda code&quot; on my &quot;Todo someday&quot; list for about a year now. I guess I got distracted by writing my thesis :) 

Ralf Hinze was visiting when I gave talked about this and he asked an interesting question: why does the function space necessarily build computation types? I&#039;m afraid I couldn&#039;t give him a satisfactory answer. Do you have a convincing explanation?

Hank: Computation types are what Noam calls &quot;negative types&quot; - types characterised by their elimination rules rather than their introduction rules. For example, the function space operator build computation types. In Paul and Noam&#039;s work, functions abstract over value types but return computation types. Inhabitants of Nat would be values (which is different from a computation that will return a Nat).</description>
		<content:encoded><![CDATA[<p>Jean-Philippe: You may want to have a look at some of <a href="http://www.cs.cmu.edu/~noam/research.html" rel="nofollow">Noam Zeilberger&#8217;s papers</a>. He has written quite a lot about focusing. <a href="http://www.cs.cmu.edu/~noam/research/unity-duality.pdf" rel="nofollow">On the unity of duality</a> is probably a good place to start.</p>
<p> I don&#8217;t think Conor&#8217;s ever written anything up about Frank, but you might be interested in <a href="http://cs.ioc.ee/efftt/mcbride-slides.pdf" rel="nofollow">the slides of his talk at the Effects in Type Theory Workshop</a>.</p>
<p>Noam: Thanks for your reply! I&#8217;ve had &#8220;Read Noam&#8217;s Agda code&#8221; on my &#8220;Todo someday&#8221; list for about a year now. I guess I got distracted by writing my thesis <img src='http://sneezy.cs.nott.ac.uk/fplunch/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Ralf Hinze was visiting when I gave talked about this and he asked an interesting question: why does the function space necessarily build computation types? I&#8217;m afraid I couldn&#8217;t give him a satisfactory answer. Do you have a convincing explanation?</p>
<p>Hank: Computation types are what Noam calls &#8220;negative types&#8221; &#8211; types characterised by their elimination rules rather than their introduction rules. For example, the function space operator build computation types. In Paul and Noam&#8217;s work, functions abstract over value types but return computation types. Inhabitants of Nat would be values (which is different from a computation that will return a Nat).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Hank</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24080</link>
		<dc:creator>Hank</dc:creator>
		<pubDate>Fri, 21 Nov 2008 22:05:27 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24080</guid>
		<description>Wouter, I don&#039;t think I know what a computation is. 

Is Nat a value or a computation?

Hank</description>
		<content:encoded><![CDATA[<p>Wouter, I don&#8217;t think I know what a computation is. </p>
<p>Is Nat a value or a computation?</p>
<p>Hank</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Noam</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24069</link>
		<dc:creator>Noam</dc:creator>
		<pubDate>Fri, 21 Nov 2008 17:56:29 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24069</guid>
		<description>There&#039;s a very close relationship between CBPV and focusing.  You can view the types of CBPV as formulas of polarized intuitionistic logic: value types are positive formulas, computation types are negative.  At the DTP workshop last spring, I went through some &lt;a href=&quot;http://www.cs.cmu.edu/~noam/research/dtp08.agda&quot; rel=&quot;nofollow&quot;&gt;agda code&lt;/a&gt; that shows how to view proofs in a focused sequent calculus for polarized intuitionistic logic as pattern-matching programs.  There&#039;s a pretty simple translation guide between this syntax and CBPV.  (We came up with it when Paul Levy was visiting CMU this summer, but haven&#039;t written it down anywhere...hmm...)  The only significant differences between focused, polarized IL and CBPV is that the former distinguishes a few more syntactic categories, and more importantly, that we build &quot;inversion&quot; constructs (i.e., elimination of positive/value types, or introduction of negative/computation types) by &quot;maximally deep&quot; pattern-matching.  For example, to eliminate a positive/value type, we have to pattern-match all the way down to variables of negative/computation type.  But this idea also shows up in the semantics of CBPV, with what &lt;a href=&quot;http://www.cs.bham.ac.uk/~pbl/papers/LassenLevy2007tnfb-4.pdf&quot; rel=&quot;nofollow&quot;&gt;Levy and Soren Lassen&lt;/a&gt; called &quot;ultimate pattern-matching&quot;.  It makes it a lot easier to reason about the operational behaviour of programs.</description>
		<content:encoded><![CDATA[<p>There&#8217;s a very close relationship between CBPV and focusing.  You can view the types of CBPV as formulas of polarized intuitionistic logic: value types are positive formulas, computation types are negative.  At the DTP workshop last spring, I went through some <a href="http://www.cs.cmu.edu/~noam/research/dtp08.agda" rel="nofollow">agda code</a> that shows how to view proofs in a focused sequent calculus for polarized intuitionistic logic as pattern-matching programs.  There&#8217;s a pretty simple translation guide between this syntax and CBPV.  (We came up with it when Paul Levy was visiting CMU this summer, but haven&#8217;t written it down anywhere&#8230;hmm&#8230;)  The only significant differences between focused, polarized IL and CBPV is that the former distinguishes a few more syntactic categories, and more importantly, that we build &#8220;inversion&#8221; constructs (i.e., elimination of positive/value types, or introduction of negative/computation types) by &#8220;maximally deep&#8221; pattern-matching.  For example, to eliminate a positive/value type, we have to pattern-match all the way down to variables of negative/computation type.  But this idea also shows up in the semantics of CBPV, with what <a href="http://www.cs.bham.ac.uk/~pbl/papers/LassenLevy2007tnfb-4.pdf" rel="nofollow">Levy and Soren Lassen</a> called &#8220;ultimate pattern-matching&#8221;.  It makes it a lot easier to reason about the operational behaviour of programs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jean-Philippe Bernardy</title>
		<link>http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24064</link>
		<dc:creator>Jean-Philippe Bernardy</dc:creator>
		<pubDate>Fri, 21 Nov 2008 16:50:47 +0000</pubDate>
		<guid isPermaLink="false">http://sneezy.cs.nott.ac.uk/fplunch/weblog/?p=159#comment-24064</guid>
		<description>Care to give pointers for the references you mention? (Frank, focussing) 
Thanks!</description>
		<content:encoded><![CDATA[<p>Care to give pointers for the references you mention? (Frank, focussing)<br />
Thanks!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
