<?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/"
	>

<channel>
	<title>Sebastian Fischer</title>
	<atom:link href="http://www-ps.informatik.uni-kiel.de/~sebf/feed" rel="self" type="application/rss+xml" />
	<link>http://www-ps.informatik.uni-kiel.de/~sebf</link>
	<description>Department of Computing Science, Christian-Albrechts-University of Kiel, Germany</description>
	<pubDate>Fri, 10 Jul 2009 09:19:54 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Declarative Programming Overview</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/dp-overview.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/dp-overview.html#comments</comments>
		<pubDate>Thu, 09 Jul 2009 17:49:57 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=185</guid>
		<description><![CDATA[I have finished a first draft of an overview on declarative programming. The section on functional programming is almost identical to the version published previously but I have added a section on logic programming features: unbound variables, non-determinism, search, and constraints.

The LP section contains a surprisingly concise solution for the n-queens problem and a lazy [...]]]></description>
			<content:encoded><![CDATA[<p>I have finished a first draft of an <a href="/~sebf/haskell/dp-overview.pdf">overview on declarative programming</a>. The section on functional programming is almost identical to the version published <a href="/~sebf/haskell/fp-overview.html">previously</a> but I have added a section on logic programming features: unbound variables, non-determinism, search, and constraints.</p>

<p>The LP section contains a surprisingly concise solution for the n-queens problem and a lazy implementation of breadth-first search with a circular queue.</p>

<p><span id="more-185"></span></p>

<p>If you find time to read it, I&#8217;d be interested in whether you could follow easily or&#8212;if not&#8212;where you got stuck (especially if you are not very familiar with functional and/or logic programming).</p>

<p>Feel free to comment on <a href="http://www.reddit.com/r/haskell/comments/8zqm4/sebfisch_declarative_programming_overview/">reddit</a> or <a href="/~sebf/contact">by email</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/dp-overview.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>FP Overview</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/fp-overview.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/fp-overview.html#comments</comments>
		<pubDate>Fri, 03 Jul 2009 13:40:30 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=177</guid>
		<description><![CDATA[I have finished a first draft of a brief overview on functional programming featuring type polymorphism, higher-order functions, lazy evaluation, class-based overloading, and equational reasoning.

comments appreciated!
]]></description>
			<content:encoded><![CDATA[<p>I have finished a first draft of a <a href="/~sebf/haskell/fp-overview.pdf">brief overview on functional programming</a> featuring type polymorphism, higher-order functions, lazy evaluation, class-based overloading, and equational reasoning.</p>

<p><a href="http://www.reddit.com/r/haskell/comments/8xzsx/sebastian_fischer_a_brief_overview_on_functional/">comments</a> appreciated!</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/fp-overview.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Reinventing Haskell Backtracking</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/pub/atps09.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/pub/atps09.html#comments</comments>
		<pubDate>Fri, 19 Jun 2009 14:01:30 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<category><![CDATA[Publications]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=126</guid>
		<description><![CDATA[I have revised my submission to ATPS&#8217;09 &#8212; a german workshop on programming.

The most important changes are:


a simplified implementation of iterative deepening depth-first search and
an additional section with experimental results.


There is also an extended one page abstract summarising the work.



Abstract

Almost ten years ago, Ralf Hinze has written a functional pearl on
how to derive backtracking functionality [...]]]></description>
			<content:encoded><![CDATA[<p>I have revised <a href="/~sebf/data/pub/atps09.pdf">my submission</a> to <a href="http://www-ps.informatik.uni-kiel.de/atps09/">ATPS&#8217;09</a> &#8212; a german workshop on programming.</p>

<p>The most important changes are:</p>

<ul>
<li>a simplified implementation of iterative deepening depth-first search and</li>
<li>an additional section with experimental results.</li>
</ul>

<p>There is also an extended <a href="/~sebf/data/pub/atps09-abstract.pdf">one page abstract</a> summarising the work.</p>

<p><span id="more-126"></span></p>

<h2>Abstract</h2>

<p>Almost ten years ago, Ralf Hinze has written a functional pearl on
how to derive backtracking functionality for the purely functional
programming language Haskell.
In these notes, we show how to arrive at the efficient,
two-continuation based backtracking monad derived by Hinze starting
from an intuitive inefficient implementation that we subsequently
refine using well known program transformations.</p>

<p>It turns out that the technique can be used to build monads for
non-determinism from modular, independent parts which gives rise to
various new implementations.
Specifically, we show how the presented approach can be applied to
obtain new implementations of breadth-first search and iterative
deepening depth-first search.</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/pub/atps09.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Explicit sharing of monadic effects</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/explicit-sharing.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/explicit-sharing.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 15:46:47 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=165</guid>
		<description><![CDATA[The paper on Purely Functional Lazy Non-deterministic Programming describes an approach to model lazy functional logic programming in Haskell via explicit sharing of monadic effects. The corresponding project page explains how to install and use our code.
]]></description>
			<content:encoded><![CDATA[<p>The paper on <a href="http://www-ps.informatik.uni-kiel.de/~sebf/pub/icfp09.html">Purely Functional Lazy Non-deterministic Programming</a> describes an approach to model lazy functional logic programming in Haskell via explicit sharing of monadic effects. The corresponding <a href="http://sebfisch.github.com/explicit-sharing">project page</a> explains how to install and use our code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/explicit-sharing.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Purely Functional Lazy Non-deterministic Programming</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/pub/icfp09.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/pub/icfp09.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 15:35:19 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Publications]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=143</guid>
		<description><![CDATA[This is joint work with Oleg Kiselyov and Chung-chieh Shan accepted for ICFP&#8217;09.



Functional logic programming and probabilistic programming have
demonstrated the broad benefits of combining laziness (non-strict
evaluation with sharing of the results) with non-determinism. Yet these
benefits are seldom enjoyed in functional programming, because the
existing features for non-strictness, sharing, and non-determinism in
functional languages are tricky to combine.

We [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www-ps.informatik.uni-kiel.de/~sebf/data/pub/icfp09.pdf">This</a> is joint work with <a href="http://okmij.org/ftp/">Oleg Kiselyov</a> and <a href="http://www.cs.rutgers.edu/~ccshan/">Chung-chieh Shan</a> accepted for <a href="http://www.cs.nott.ac.uk/~gmh/icfp09.html">ICFP&#8217;09</a>.</p>

<p><span id="more-143"></span></p>

<p>Functional logic programming and probabilistic programming have
demonstrated the broad benefits of combining laziness (non-strict
evaluation with sharing of the results) with non-determinism. Yet these
benefits are seldom enjoyed in functional programming, because the
existing features for non-strictness, sharing, and non-determinism in
functional languages are tricky to combine.</p>

<p>We present a practical way to write purely functional lazy
non-deterministic programs that are efficient and perspicuous.  We
achieve this goal by embedding the programs into existing languages
(such as Haskell, SML, and OCaml) with high-quality implementations,
by making choices lazily and representing data with non-deterministic
components, by working with custom monadic data types and
search strategies, and by providing equational laws for the programmer
to reason about their code.</p>

<p>© ACM, 2009. This is the author&#8217;s version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. The definitive version will be published in Proceedings of the International Conference on Functional Programming (ICFP).</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/pub/icfp09.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Barefaced pilferage of monadic bind</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/stealing-bind.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/stealing-bind.html#comments</comments>
		<pubDate>Tue, 14 Apr 2009 08:14:48 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=119</guid>
		<description><![CDATA[I had an insightful discussion on haskell-cafe on how to steal the implementation of monadic bind from a continuation monad transformer.

I did it twice, first re-inventing the two-continuation model for depth-first search, then discovering an implementation of breadth-first search that I didn&#8217;t know before.

On the go, I used higher-rank infix record selectors for the first [...]]]></description>
			<content:encoded><![CDATA[<p>I had an insightful <a href="http://www.mail-archive.com/haskell-cafe@haskell.org/msg57697.html">discussion on haskell-cafe</a> on how to steal the implementation of monadic bind from a continuation monad transformer.</p>

<p>I did it twice, first re-inventing the two-continuation model for depth-first search, then discovering an implementation of breadth-first search that I didn&#8217;t know before.</p>

<p>On the go, I used higher-rank infix record selectors for the first time.</p>

<p>In <a href="/~sebf/haskell/barefaced-pilferage-of-monadic-bind.lhs.html">this program</a> I talk about monads for non-determinism, functional lists, continuations, and what you get for free when you combine them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/stealing-bind.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Faster Non-deterministic programs with explicit parallelism</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/par-search.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/par-search.html#comments</comments>
		<pubDate>Tue, 07 Apr 2009 14:39:53 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=110</guid>
		<description><![CDATA[What does this chart mean?



find out! 
]]></description>
			<content:encoded><![CDATA[<p>What does this chart mean?</p>

<p><img src="/~sebf/haskell/multicore-permsort.png" alt="yellow bars" /></p>

<p><a href="http://www-ps.informatik.uni-kiel.de/~sebf/haskell/speedup-search-with-parallelism.lhs.html">find out!</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/par-search.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fair conjunction and disjunction</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/projects/fair-predicates.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/projects/fair-predicates.html#comments</comments>
		<pubDate>Wed, 25 Mar 2009 12:42:42 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=83</guid>
		<description><![CDATA[How can you write a Haskell predicate that detects (without diverging) that both of these two infinite trees are unsorted?






The fair-predicates library gives an answer.

There are comments on reddit.
]]></description>
			<content:encoded><![CDATA[<p>How can you write a Haskell predicate that detects (without diverging) that both of these two infinite trees are unsorted?</p>

<p><img alt="" src="/~sebf/data/fair-predicates/decreasing.png" width="150" height="200" />
<img alt="" src="/~sebf/data/fair-predicates/increasing.png" width="150" height="200" /></p>

<p><span id="more-83"></span></p>

<p>The <a href="http://sebfisch.github.com/fair-predicates">fair-predicates</a> library gives an answer.</p>

<p>There are <a href="http://www.reddit.com/r/haskell/comments/87enw/sebastian_fischer_fair_conjunction_and_disjunction/">comments on reddit</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/projects/fair-predicates.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Using SmallCheck to Shatter an Audacious Claim</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/smallcheck-experience.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/smallcheck-experience.html#comments</comments>
		<pubDate>Sat, 31 Jan 2009 11:35:59 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=64</guid>
		<description><![CDATA[Today I played with SmallCheck. Interested in what happened when I tried to find a small unsatisfiable boolean formula that is not easily detected as such? Watch my attempts! (strip .html suffix for executable Haskell file)



Update

After realising that the crucial step to enable SmallCheck to find the formula was not the limitation to conjunctive normal [...]]]></description>
			<content:encoded><![CDATA[<p>Today I played with SmallCheck. Interested in what happened when I tried to find a small unsatisfiable boolean formula that is not easily detected as such? Watch <a href="/~sebf/haskell/unsatisfiable-formula-that-needs-guessing-to-fail.lhs.html">my attempts</a>! (strip <code>.html</code> suffix for executable Haskell file)</p>

<p><span id="more-64"></span></p>

<h2>Update</h2>

<p>After realising that the crucial step to enable SmallCheck to find the formula was <em>not</em> the limitation to conjunctive normal form but the limitation to only two variables, I tried what happens when incorporating this limitation in the original <code>Serial</code> instance for <code>Boolean</code>s:</p>

<pre>
  instance Serial Boolean
   where
    series = const [Var 0, Var 1]
          \/ cons0 Yes
          \/ cons0 No
          \/ cons1 Not
          \/ cons2 (:&#038;&:)
          \/ cons2 (:||:)
</pre>

<p>Using this instance, SmallCheck finds a counter example at depth three in about 30 seconds:</p>

<pre>
  Depth 3:
    Failed test no. 10682586. Test values follow.
    (Var 0 :&#038;&: Not (Var 0)) :||: (Var 1 :&#038;&: Not (Var 1))
</pre>

<p>This is a condensed version of the formula found before (which is the CNF of this one). Seems like by generating only CNFs I was barking up the wrong tree!</p>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/smallcheck-experience.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fun with Infinite Global Constants</title>
		<link>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/infinite-constants.html</link>
		<comments>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/infinite-constants.html#comments</comments>
		<pubDate>Fri, 30 Jan 2009 07:40:15 +0000</pubDate>
		<dc:creator>Sebastian Fischer</dc:creator>
		
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www-ps.informatik.uni-kiel.de/~sebf/?p=50</guid>
		<description><![CDATA[I just wrote a tiny little Haskell program that demonstrates a small trick: how to use an infinite global constant to speed up tree-recursive functions. Remove .html from it&#8217;s URL to download an executable Haskell file.

comments on reddit



more comments

My code shows how to speed up naive recursive algorithms without changing their basic structure. John Tromp [...]]]></description>
			<content:encoded><![CDATA[<p>I just wrote a <a href="http://www-ps.informatik.uni-kiel.de/~sebf/haskell/tabulated-binomial-coefficients.lhs.html">tiny little Haskell program</a> that demonstrates a small trick: how to use an infinite global constant to speed up tree-recursive functions. Remove <code>.html</code> from it&#8217;s URL to download an executable Haskell file.</p>

<p><a href="http://www.reddit.com/r/programming/comments/7shes/sebastian_fischer_fun_with_infinite_global/">comments on reddit</a></p>

<p><span id="more-50"></span></p>

<h2>more comments</h2>

<p>My code shows how to speed up naive recursive algorithms without changing their basic structure. <a href="http://homepages.cwi.nl/~tromp/">John Tromp</a> has sent me a one liner that computes the table of binomial coefficients by iteration:</p>

<pre><code>iterate (\row -&gt; zipWith (+) ([0] ++ row) (row ++ [0])) [1]
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www-ps.informatik.uni-kiel.de/~sebf/haskell/infinite-constants.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
