<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-13547860</id><updated>2011-04-22T14:10:14.786+10:00</updated><title type='text'>Labelled Tableaux</title><subtitle type='html'>Implementing a theorem prover for modal logics based on labelled tableaux.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13547860.post-7308444261709689462</id><published>2007-02-03T01:46:00.000+11:00</published><updated>2007-02-03T01:49:42.527+11:00</updated><title type='text'>Moving</title><content type='html'>&lt;p&gt;This blog is defunct. It's content, along with that of my other blogs, is now hosted at &lt;a href="http://thomas-sutton.id.au/"&gt;thomas-sutton.id.au&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-7308444261709689462?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/7308444261709689462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=7308444261709689462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/7308444261709689462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/7308444261709689462'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2007/02/moving.html' title='Moving'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-113105770295898919</id><published>2005-11-04T09:35:00.000+11:00</published><updated>2005-11-04T09:41:42.973+11:00</updated><title type='text'>Writing and Ownership</title><content type='html'>My thesis was due last Friday (delayed to last Monady) and I have an extension (or, rather, an I-don't-have-it-done) until today. Unfortunately, it doesn't look like I'll have it done by my deadline today either. For some reason, I just haven't wanted, or been able to, write.&lt;br /&gt;&lt;br /&gt;I think that this is due, in part, to the fact that this is my own project (rather than the one I originally started on) which I'd been thinking about for a while before I started my Honours year. As such, I don't feel any sort of obligation to work on it for any purposes other than my own gratification. While this is a good thing by some measures (it's a project that I am interested in, etc., etc.) it is very, &lt;span style="font-style:italic;"&gt;very&lt;/span&gt;, bad by others (like that fact that I don't feel any particular drive to write about it).&lt;br /&gt;&lt;br /&gt;All I know is that I'm well and truly sick of University and computer science. If Honours is a taste of research and a hint of what a Ph.D. is like, then I want nothing to do with either. This &lt;span style="font-weight:bold;"&gt;used&lt;/span&gt; to be fun...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-113105770295898919?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/113105770295898919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=113105770295898919' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/113105770295898919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/113105770295898919'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/11/writing-and-ownership.html' title='Writing and Ownership'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112546446592279626</id><published>2005-08-31T14:03:00.000+10:00</published><updated>2005-08-31T15:52:48.216+10:00</updated><title type='text'>Relational Algebra in Haskell</title><content type='html'>I've just spoken to &lt;a href="http://thatlogicblog.blogspot.com/"&gt;Jon&lt;/a&gt; about the problems and ideas I have &lt;a href="http://labelledtableaux.blogspot.com/2005/07/thoughts-on-hypergraphs.html"&gt;posted&lt;/a&gt; about previously. One of the things I came away with is the suggestion that I might be thinking about  relational algebras (perhaps an &lt;a href="http://en.wikipedia.org/wiki/Algebra_over_a_set"&gt;algebra over a set&lt;/a&gt;) rather than hypergraphs. I'm not entirely sure that this is the case (the "hypergraph" Wikipedia article above seems to describe what I'm thinking of), but the "algebra over a set" article is certainly applicable as well).&lt;br /&gt;&lt;br /&gt;As a result, I've been able to dig up a &lt;a href="http://del.icio.us/thsutton/project+algebra"&gt;couple of things&lt;/a&gt; that look like they might help me implement support for generic frames (i.e. those with an arbitrary number of &lt;span style="font-style: italic;"&gt;n&lt;/span&gt;-relations for arbitrary values of &lt;span style="font-style: italic;"&gt;n&lt;/span&gt; greater than 0).&lt;br /&gt;&lt;br /&gt;While I've seen &lt;a href="http://weblogs.asp.net/brianbec/articles/246392.aspx"&gt;A Relational Algebra Simulator in Haskell&lt;/a&gt; before, it didn't occur to me that it might be applicable to my problem. &lt;a href="http://www2-data.informatik.unibw-muenchen.de/relmics/tools/RATH/"&gt;RATH - Relation Algebra Tools in Haskell&lt;/a&gt;, however is new to me and looks like it provides a complete library (rather than the example program of the first link).&lt;br /&gt;&lt;br /&gt;Whether I have enough time to catch up on my course-work, finish my system (as it stands), write a thesis &lt;emph&gt;and&lt;/emph&gt; learn enough about this topic to extend the system using such a generalisation remains to be seen.&lt;br /&gt;&lt;br /&gt;Another possibly useful generalisation might be to extend the concept of "relation" from sets of tuples to mutisets (or bags) of tuples, thereby allowing relations in a frame to be &lt;a href="http://en.wikipedia.org/wiki/Multigraph"&gt;mutigraphs&lt;/a&gt; (i.e. graphs allowing multiple edges between a given pair of vertices). The &lt;a href="http://www.haskell.org/ghc/docs/latest/html/libraries/fgl/Data.Graph.Inductive.html"&gt;Data.Graph.Inductive&lt;/a&gt; library supports labelled edges which suggests that it might also support multigraphs to some degree (if edges with non-identical labels are non-identical, then you can simulate an unlabelled multigraph by  labelled each edge with an index).&lt;br /&gt;&lt;br /&gt;I'd like to write a generic graph library with support for multigraphs and [uniform] hypergraphs, possibly by extending Data.Graph.Inductive, but this will probably wind up being pushed back until the Christmas break.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112546446592279626?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112546446592279626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112546446592279626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112546446592279626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112546446592279626'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/08/relational-algebra-in-haskell.html' title='Relational Algebra in Haskell'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111841032098068709</id><published>2005-08-31T13:14:00.000+10:00</published><updated>2005-08-31T15:56:13.753+10:00</updated><title type='text'>Modal Logic Wikipedia Articles</title><content type='html'>I've been poking at Wikipedia again (I dislike free time) and decided that a list of articles relevant to modal logic might be useful. To that end, I present a partial list of Wikipedia articles:&lt;br /&gt;&lt;ul&gt;    &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Kripke_semantics"&gt;Kripke Semantics&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Modal_logic"&gt;Modal Logic&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Temporal_logic"&gt;Temporal Logic&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Proof_theory"&gt;Proof Theory&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Model_theory"&gt;Model Theory&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Analytic_tableaux"&gt;Analytic Tableaux&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;In addition to the articles above (which aren't really directly relevent to my work), there are a number of articles that I've found useful in trying to puzzle my way through things. A partial list of these useful articles is:&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Hypergraph"&gt;Hypergraph&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Multigraph"&gt;Multigraph&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Power_set"&gt;Power set&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Algebra_over_a_set"&gt;Algebra over a set&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;More articles will be added to this list as they are uncovered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111841032098068709?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111841032098068709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111841032098068709' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111841032098068709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111841032098068709'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/08/modal-logic-wikipedia-articles.html' title='Modal Logic Wikipedia Articles'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112495826469576810</id><published>2005-08-25T18:22:00.000+10:00</published><updated>2005-08-31T14:01:27.400+10:00</updated><title type='text'>Annoyances of the Feature Kind</title><content type='html'>Yesterday, I finally sat down and wrote a priority queue (a &lt;a href="http://en.wikipedia.org/wiki/Heap"&gt;heap&lt;/a&gt; to those in the know) to store the formulae on a branch that still need to be processed. Chris Okasaki (in his book &lt;a href="http://www.eecs.usma.edu/Personnel/okasaki/pubs.html#cup98"&gt;Purely Functional Data Structures&lt;/a&gt;) defines the interface of a heap as follows:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="keyword"&gt;class&lt;/span&gt; Heap h &lt;span class="keyword"&gt;where&lt;/span&gt;&lt;code style="border: none;"&gt;    empty     &lt;span class="keyword"&gt;::&lt;/span&gt; (&lt;span class="keyword"&gt;Ord&lt;/span&gt; a) &lt;span class="keyword"&gt;=&amp;gt;&lt;/span&gt; h a&lt;br /&gt;  isEmpty   &lt;span class="keyword"&gt;::&lt;/span&gt; (&lt;span class="keyword"&gt;Ord&lt;/span&gt; a) &lt;span class="keyword"&gt;=&amp;gt;&lt;/span&gt; h a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; Bool&lt;br /&gt;&lt;br /&gt;  insert    &lt;span class="keyword"&gt;::&lt;/span&gt; (&lt;span class="keyword"&gt;Ord&lt;/span&gt; a) &lt;span class="keyword"&gt;=&amp;gt;&lt;/span&gt; a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; h a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; h a&lt;br /&gt;  merge     &lt;span class="keyword"&gt;::&lt;/span&gt; (&lt;span class="keyword"&gt;Ord&lt;/span&gt; a) &lt;span class="keyword"&gt;=&amp;gt;&lt;/span&gt; h a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; h a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; h a&lt;br /&gt;&lt;br /&gt;  findMin   &lt;span class="keyword"&gt;::&lt;/span&gt; (&lt;span class="keyword"&gt;Ord&lt;/span&gt; a) &lt;span class="keyword"&gt;=&amp;gt;&lt;/span&gt; h a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; a&lt;br /&gt;  deleteMin &lt;span class="keyword"&gt;::&lt;/span&gt; (&lt;span class="keyword"&gt;Ord&lt;/span&gt; a) &lt;span class="keyword"&gt;=&amp;gt;&lt;/span&gt; h a &lt;span class="keyword"&gt;-&amp;gt;&lt;/span&gt; h a&lt;br /&gt;&lt;/code&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is a problem (in my opinion) in that it requires that heaps (all heaps) be over ordered data-types. The entire &lt;emph&gt;reason&lt;/emph&gt; that I am attempting to extend the heap is to remove the ordering from the contained type, and use a priority type instead. Thus we are no longer saying that, for example, &lt;code style="text-align: center;"&gt;α &amp;lt; β&lt;/code&gt; but that &lt;code style="text-align: center;"&gt;(priority α) &amp;lt; (priority β)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I'll be the first to admit that this isn't much of a distinction to make (especially from a pragmatic "programmer" point of view), but it is a nicer approach.&lt;br /&gt;&lt;br /&gt;I got around this problem, such as it is, by modifying my Prioritised class to have a function to inject values into my Priority type and one to extract them. The heap then is a type synonym:&lt;code style="text-align: center;"&gt;&lt;span class="keyword"&gt;type&lt;/span&gt; PriorityHeap t &lt;span class="keyword"&gt;=&lt;/span&gt; LeftistHeap (Priority t)&lt;/code&gt; with the restriction that you need to explicitly wrap values you insert into a heap:&lt;code style="text-align: center;"&gt;&lt;span class="keyword"&gt;let&lt;/span&gt; h' &lt;span class="keyword"&gt;=&lt;/span&gt; insert (priority v) h &lt;span class="keyword"&gt;in&lt;/span&gt; ...&lt;/code&gt; and unwrap those you get out: &lt;code style="text-align: center;"&gt;&lt;span class="keyword"&gt;let&lt;/span&gt; v &lt;span class="keyword"&gt;=&lt;/span&gt; value &lt;span class="keyword"&gt;$&lt;/span&gt; findMin h' &lt;span class="keyword"&gt;in&lt;/span&gt; ...&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Not terribly inconvenient, but not ideal. I'm fairly sure that this could be solved with some functional dependancies magic, but the current state of affairs is good enough to be getting on with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112495826469576810?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112495826469576810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112495826469576810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112495826469576810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112495826469576810'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/08/annoyances-of-feature-kind.html' title='Annoyances of the Feature Kind'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112382501037301428</id><published>2005-08-12T15:30:00.000+10:00</published><updated>2005-08-12T15:36:50.376+10:00</updated><title type='text'>Purely Functional Data Structures</title><content type='html'>The Haskell code from &lt;span style="font-style: italic;"&gt;Purely Functional Data Structures&lt;/span&gt; by Chris Okasaki can be found as &lt;a href="http://www.eecs.usma.edu/Personnel/okasaki/pubs.html#cup98"&gt;his web-site&lt;/a&gt; at the United States Military Academy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112382501037301428?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112382501037301428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112382501037301428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112382501037301428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112382501037301428'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/08/purely-functional-data-structures.html' title='Purely Functional Data Structures'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112321757952373453</id><published>2005-08-05T14:52:00.000+10:00</published><updated>2005-08-05T14:52:59.530+10:00</updated><title type='text'>RSChem is Burning Down, Burning Down, Burning Down...</title><content type='html'>&lt;a href="http://photos1.blogger.com/blogger/5615/352/1600/fire.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5615/352/320/fire.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;RSChem is currently on fire. There haven't been any reported injuries, but they have evacuated that precinct of the campus.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112321757952373453?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112321757952373453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112321757952373453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112321757952373453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112321757952373453'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/08/rschem-is-burning-down-burning-down.html' title='RSChem is Burning Down, Burning Down, Burning Down...'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112264080270318572</id><published>2005-07-29T22:34:00.000+10:00</published><updated>2005-07-29T22:42:46.810+10:00</updated><title type='text'>Hmmm.</title><content type='html'>The presentation is over and done with. It didn't go &lt;emph&gt;too&lt;/emph&gt; badly, though I did run under-time: I finished my presentation and asked (&lt;emph&gt;begged&lt;/emph&gt;) for questions half way through my time slot. I'm not sure how much of it the audience caught, or what sort of comments the assessing academics will give me, but I'm reasonable happy with my performance.&lt;br /&gt;&lt;br /&gt;Having seen all of the presentations, I find myself wondering at how many of the projects involve writing compilers and optimisers. One is attempting to learn tests to avoid computing expensive functions unless they're required (with collision detection as the experimental framework). Another is doing something with symbolic optimisation of robot dynamics (which looks a lot like &lt;a href="http://en.wikipedia.org/wiki/Static_single_assignment_form"&gt;single static assignment&lt;/a&gt;). I'm compiling a DSL to Haskell. Someone else is experimenting with &lt;a href="http://en.wikipedia.org/wiki/Interval_arithmetic"&gt;interval arithmetic&lt;/a&gt; (which I want to implement in Haskell) for scientific computations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112264080270318572?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112264080270318572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112264080270318572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112264080270318572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112264080270318572'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/hmmm.html' title='Hmmm.'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112254300448252467</id><published>2005-07-28T19:20:00.000+10:00</published><updated>2005-07-28T19:30:04.486+10:00</updated><title type='text'>Presentations...</title><content type='html'>I have to give my mid-term seminar tomorrow afternoon and I'm getting rather nervous about it.&lt;br /&gt;&lt;br /&gt;My supervisor has told me that my slides aren't accessible enough (i.e. I require too much prior knowledge), but I can't see any way to simplify things or remove content without missing important things. I'm not happy, but I don't the time fine-tune it any more.&lt;br /&gt;&lt;br /&gt;If you're at the ANU (I'm not sure if the public is allowed) and free tomorrow at 1:00 (my presentation is at 1:26), come along to the &lt;a href="http://campusmap.anu.edu.au/displaybldg.asp?no=108"&gt;Department of Computer Science&lt;/a&gt; seminar room (N101) and watch me embarrass myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112254300448252467?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112254300448252467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112254300448252467' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112254300448252467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112254300448252467'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/presentations.html' title='Presentations...'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112228765735263144</id><published>2005-07-25T19:21:00.000+10:00</published><updated>2005-08-31T18:18:46.170+10:00</updated><title type='text'>Stupidity or How Dumb Can I Get</title><content type='html'>I've just been trying to install &lt;a href="http://www.cse.unsw.edu.au/~dons/hs-plugins/"&gt;&lt;span style="font-family: monospace;"&gt;hs-plugins&lt;/span&gt;&lt;/a&gt; on my iBook with &lt;a href="http://www.haskell.org/ghc/"&gt;GHC&lt;/a&gt; 6.4. Sorting out the dependancies, getting stuff to build and getting the libraries installed has been ridiculously complex.&lt;br /&gt;&lt;br /&gt;Now that I've got it built and installed (part of which required using &lt;span style="font-family: monospace;"&gt;hugs&lt;/span&gt; because &lt;span style="font-family: monospace;"&gt;runghc&lt;/span&gt; refused to run the setup programme), it doesn't appear to have registered the package, which means I need to manually provide the details to &lt;span style="font-family: monospace;"&gt;GHC&lt;/span&gt; every time I compile some code using &lt;span style="font-family: monospace;"&gt;System.Plugins&lt;/span&gt; (rather than just tell the compiler to use the package: &lt;span style="font-family: monospace;"&gt;-package plugins&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;I need to figure out what it going wrong with my environment and fix it. Perhaps by tearing some capabilities out...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt; I've got that problem fixed (&lt;span style="font-family: monospace;"&gt;make install&lt;/span&gt; doesn't appear to update the package database). Now all I need to do is work out a way to be able to specify the data-types in the plug-ins.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112228765735263144?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112228765735263144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112228765735263144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112228765735263144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112228765735263144'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/stupidity-or-how-dumb-can-i-get.html' title='Stupidity or How Dumb Can I Get'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112227725094838970</id><published>2005-07-25T17:26:00.000+10:00</published><updated>2005-08-31T18:20:52.776+10:00</updated><title type='text'>Dependancies...</title><content type='html'>I'm currently experimenting with &lt;a href="http://www.cse.unsw.edu.au/~dons/hs-plugins/"&gt;hs-plugins&lt;/a&gt;, a library which supports dynamically loading plugins in Haskell. Or, rather, I would be if I could manage to sort out the various hassles I'm encountering in installing it. &lt;br /&gt;&lt;br /&gt;The only problem is that &lt;span style="font-family: monospace;"&gt;hs-plugins&lt;/span&gt; depends on &lt;span style="font-family: monospace;"&gt;Language.Haskell.Hsx&lt;/span&gt;. This would be fine, if it came in the GHC distribution. Alas it doesn't, so I've had to &lt;a href="http://www.cs.chalmers.se/~d00nibro/haskell-src-exts/"&gt;find&lt;/a&gt; and install it myself. This isn't too much trouble - I have, after all, been using UNIX-like systems for at least 7 years now. The only bump in this stretch of the road is that &lt;span style="font-family: monospace;"&gt;Language.Haskell.Hsx&lt;/span&gt; depends on &lt;a href="http://haskell.org/happy/#download"&gt;&lt;span style="font-family: monospace;"&gt;Happy&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Haskell is getting to the point where it could &lt;emph&gt;really&lt;/emph&gt; do with a &lt;a href="http://www.cpan.org/"&gt;CPAN&lt;/a&gt;-style package archive, if only because introducing it now will be so much easier than later when it is actually necessary. &lt;a href="http://www.haskell.org/cabal"&gt;Cabal&lt;/a&gt; already provides these sorts of features (dependancy chasing, etc).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112227725094838970?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112227725094838970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112227725094838970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112227725094838970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112227725094838970'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/dependancies.html' title='Dependancies...'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112226779797558382</id><published>2005-07-25T14:44:00.000+10:00</published><updated>2005-08-31T18:21:33.093+10:00</updated><title type='text'>Generality for its own sake</title><content type='html'>&lt;a href="http://www.haskell.org/ghc/docs/latest/html/libraries/base/System.Console.GetOpt.html"&gt;System.Console.GetOpt&lt;/a&gt; is a Haskell port of the GNU getopt library (which is almost impossible to find, unless they mean &lt;span style="font-family: monospace;"&gt;getopt(3)&lt;/span&gt; in glibc). In spite of being written in Haskell, the awfulness of &lt;span style="font-family: monospace;"&gt;getopt&lt;/span&gt; shines through.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112226779797558382?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112226779797558382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112226779797558382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112226779797558382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112226779797558382'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/generality-for-its-own-sake.html' title='Generality for its own sake'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112195073722233837</id><published>2005-07-21T22:50:00.000+10:00</published><updated>2005-08-31T18:22:24.453+10:00</updated><title type='text'>More on Literate Haskell</title><content type='html'>I've been having fun extending my environment for literate Haskell programming in LaTeX. While I still haven't looked at the &lt;a href="http://labelledtableaux.blogspot.com/2005/07/literate-haskell.html#comments"&gt;suggestion&lt;/a&gt; my previous post provoked (though I'll get round to it eventually), I have been taking the opportunity to learn some of the more &lt;emph&gt;programme-y&lt;/emph&gt; things one can do in LaTeX.&lt;br /&gt;&lt;br /&gt;The macro I use for the title of each module (called &lt;span style="font-family: monospace;"&gt;\module&lt;/span&gt; funnily enough) now checks to see if it is a sub-module (i.e. contains a '.' in its name) and makes it a &lt;span style="font-family: monospace;"&gt;\subsection&lt;/span&gt; if it does. For now, this will be enough, but later on there will be some configurability to this to make sure that we don't typeset modules as sub-sections of random other modules.&lt;br /&gt;&lt;br /&gt;I'm also planning on making the pretty-printing code build a list of imported modules as it typesets the Haskell and then include the appropriate files (I've got an &lt;span style="font-family: monospace;"&gt;\import&lt;/span&gt; macro all ready and waiting) afterward.&lt;br /&gt;&lt;br /&gt;I like playing with LaTeX.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112195073722233837?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112195073722233837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112195073722233837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112195073722233837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112195073722233837'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/more-on-literate-haskell.html' title='More on Literate Haskell'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112174615817896058</id><published>2005-07-19T13:28:00.000+10:00</published><updated>2005-07-19T14:09:18.183+10:00</updated><title type='text'>Licencing</title><content type='html'>A fourth post for today, also on a non-logic related topic. I'll be releasing an initial, non-modal, version of my code soon (in the next couple of weeks) and need to think about a licence for it. I've narrowed it down to four alternatives:&lt;ul&gt;&lt;li&gt;the Creative Commons &lt;a href="http://creativecommons.org/licenses/by-sa/2.1/au/"&gt;attribution share alike&lt;/a&gt; licence;&lt;/li&gt; &lt;li&gt;the Creative Commons &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.1/au/"&gt;attribution non-commercial share alike&lt;/a&gt; licence; &lt;/li&gt;&lt;li&gt;the &lt;a href="http://nicta.com.au/director/commercialisation/open_source_licence.cfm"&gt;Australian Public Licence B&lt;/a&gt;; or&lt;/li&gt;&lt;li&gt;a BSD-like licence.&lt;/li&gt;&lt;/ul&gt;I'm leaning toward the Creative Commons licences at this point, but the Australian Public License could be good as well.&lt;br /&gt;&lt;br /&gt;If anyone has suggestions or arguments for or against any licence (please don't bother suggesting the GPL and friends), please leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112174615817896058?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112174615817896058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112174615817896058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112174615817896058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112174615817896058'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/licencing.html' title='Licencing'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112173371645241479</id><published>2005-07-19T10:12:00.000+10:00</published><updated>2005-07-19T13:28:19.870+10:00</updated><title type='text'>Thoughts on Hypergraphs</title><content type='html'>&lt;emph&gt;I'll start this post with a disclaimer that I am a mathematically naive person and don't really know what I'm talking about.&lt;/emph&gt;&lt;br /&gt;&lt;br /&gt;After my &lt;a href="http://labelledtableaux.blogspot.com/2005/07/renovation-in-progress.html"&gt;post&lt;/a&gt; last night (or this morning), I though a bit more about hypergraphs and started playing with a few ideas for a data structure based on incidence lists (lists of every edge incident on a particular vertex). While I've got something that works (after a fashion and in a naive and trivial sort of way), I've come to a realisation that I don't really know what a lot of the things I might want to do to such graphs actually mean.&lt;br /&gt;&lt;br /&gt;What,if anything, do reflexivity, transitivity and symmetry mean in the context of a hypergraph? I've been trying to figure this out using the composition relation from arrow logic as an example but I'm still not sure I'm getting anywhere.&lt;br /&gt;&lt;br /&gt;Be that as it may, I've started working on a prototype of a hypergraph package for Haskell and if I can figure out how various things ought to work and how to generalise it to relations of arbitrary arity, I'll release it separately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112173371645241479?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112173371645241479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112173371645241479' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112173371645241479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112173371645241479'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/thoughts-on-hypergraphs.html' title='Thoughts on Hypergraphs'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112172925250899801</id><published>2005-07-19T09:27:00.000+10:00</published><updated>2005-07-19T09:27:32.513+10:00</updated><title type='text'>Literate Haskell</title><content type='html'>Last night I spent a while wrestling with latex, vim, make and ghc as part of my source-code reorganisation. One of the things I've been wanting for quite a while, is a vim syntax highlighting mode that understands the LaTeX literate Haskell syntax and displays both the Haskell code and the LaTeX code properly. Last night, I finally got it to work, though it has taken a bit of hackery in my Haskell files: I need to have a comment in every file so that the highlighter can detect the LaTeX.&lt;br /&gt;&lt;br /&gt;This is a problem as the LaTeX detection heuristic appears to be:&lt;ol&gt;&lt;li&gt;Look for a \documentclass macro (the begining of a LaTeX document); or &lt;/li&gt;&lt;li&gt;Look for a LaTeX command; or&lt;/li&gt;&lt;li&gt;Assume that the "literate" part is not LaTeX&lt;/li&gt;&lt;/ol&gt; Needless to say, this is rather annoying as I'm writing a program with a number of modules (and thus a number of files) and want to produce a single document from them. To ameliorate this problem, I just make sure to include a LaTeX-style comment on the first line of every literate Haskell file and use a few macros to do include imported modules into the LaTeX document.&lt;br /&gt;&lt;br /&gt;I'm also using the listings package to pretty-print the Haskell code and my next goal is to use its custom keyword handling capabilities to &lt;emph&gt;automatically&lt;/emph&gt; include the modules that we import (if they exist in our source tree and are LaTeX-style literate code).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112172925250899801?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112172925250899801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112172925250899801' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112172925250899801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112172925250899801'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/literate-haskell.html' title='Literate Haskell'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112169920393920463</id><published>2005-07-19T00:57:00.000+10:00</published><updated>2005-07-19T01:06:43.946+10:00</updated><title type='text'>Renovation in Progress</title><content type='html'>I'm about one third of the way through the rewrite of the system so far, this time using doing the job properly (checking that there aren't too many or too few of anything in particular, that the numbers all agree, etc). Even if they had no other worth, the clarity that the monadic approach lends to code (parsing and error handling at the moment) more than justifies the presence of monads in Haskell.&lt;br /&gt;&lt;br /&gt;I expect to have the system into a fairly robust state in the next day or two after which I'll knock together a small test suite (De Morgan's Laws, a bunch of tautologies and the like) and then move on. I hope to have the features required to implement K finished well within two weeks.&lt;br /&gt;&lt;br /&gt;If anyone knows of a way to define a hypergraph inductively, please drop a note in the comments. If I can't find such a representation then I'm going to have a hard time supporting ternary and higher relations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112169920393920463?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112169920393920463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112169920393920463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112169920393920463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112169920393920463'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/renovation-in-progress.html' title='Renovation in Progress'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112168159318060568</id><published>2005-07-18T19:49:00.000+10:00</published><updated>2005-07-18T20:14:56.663+10:00</updated><title type='text'>The Natural Numbers</title><content type='html'>One of the statements in my calculus language is the operator declaration:&lt;blockquote style="text-align: center; font-weight: bold;"&gt;Neg operator "~" has arity 1, fixity 0, priority 1.&lt;/blockquote&gt;As negative numbers don't really make much sense as the arity and fixity of an operator, I've just spent a while knocking up a Haskell implementation of the &lt;a href="http://en.wikipedia.org/wiki/Natural_numbers"&gt;natural numbers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While I dislike programming in Java and other "OO" languages, they do make it &lt;emph&gt;a lot&lt;/emph&gt; easier to extend types than is the case in Haskell. It would be much easier to do this sort of thing if Haskell supported instance declarations (the things that make most polymorphic functionality work in Haskell) on type synonyms. If it did, Natural.hs would be about 6 lines of code (plus a few lines of boiler plate) rather than nearly 60 lines.&lt;br /&gt;&lt;br /&gt;My new type Natural (just a wrapper around Integer) is an instance of eight separate type classes:&lt;ol&gt;&lt;li&gt;Eq (they can be compared for equality)&lt;/li&gt;&lt;li&gt;Ord (values can be ordered with respect to each other)&lt;/li&gt;&lt;li&gt;Show (values can be converted to strings)&lt;/li&gt;&lt;li&gt;Read (values can be parsed out of strings)&lt;/li&gt;&lt;li&gt;Bounded (the range of values is bounded), though Natural shouldn't have an upper bound&lt;/li&gt;&lt;li&gt;Enum (values can be enumerated)&lt;/li&gt;&lt;li&gt;Num (values are numbers)&lt;/li&gt;&lt;li&gt;Real (values are real numbers)&lt;/li&gt;&lt;li&gt;Integral (values are integral numbers)&lt;/li&gt;&lt;/ol&gt;It probably ought to have a few more like:&lt;ul&gt;&lt;li&gt;Random (values can be randomly generated); and&lt;/li&gt;&lt;li&gt;Ix (values can used as array indices)&lt;/li&gt;&lt;/ul&gt;but it'll get the job done -- all I need from it is Eq and Ord.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112168159318060568?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112168159318060568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112168159318060568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112168159318060568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112168159318060568'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/natural-numbers.html' title='The Natural Numbers'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112113317094813141</id><published>2005-07-12T11:48:00.000+10:00</published><updated>2005-07-12T11:52:50.950+10:00</updated><title type='text'>A Delay or Murphy Strikes</title><content type='html'>I've just had to take my iBook in to &lt;a href="http://www.themacshop.com.au/"&gt;The Mac Shop&lt;/a&gt; to get its charger (or perhaps the power regulation circuitry) fixed as it no longer wants to charge.&lt;br /&gt;&lt;br /&gt;Unfortunately, this means that I'm unable to do any work for the next few days and may not get as much as I'd like done before my return to Canberra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112113317094813141?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112113317094813141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112113317094813141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112113317094813141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112113317094813141'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/delay-or-murphy-strikes.html' title='A Delay or Murphy Strikes'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112096018210575156</id><published>2005-07-10T11:49:00.000+10:00</published><updated>2005-07-10T11:49:42.106+10:00</updated><title type='text'>Cool Things That'll Help</title><content type='html'>In the cool things that will help implement this project, the Haskell Hierarchical Libraries contain a Graph library which supports querying the existence a path between specified nodes, just what I'll need to implement box rules.&lt;br /&gt;&lt;br /&gt;Another cool thing I need to look at more is the definition of "&lt;a href="http://www.nomaware.com/monads/html/xformerexamples.html#example24"&gt;a monad for stateful non-deterministic computations&lt;/a&gt;" in the &lt;a href="http://www.nomaware.com/monads/"&gt;All About Monads&lt;/a&gt; tutorial. &lt;br /&gt;&lt;br /&gt;I need to learn more about monad transformers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112096018210575156?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112096018210575156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112096018210575156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112096018210575156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112096018210575156'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/cool-things-thatll-help.html' title='Cool Things That&apos;ll Help'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112095963808904504</id><published>2005-07-10T11:16:00.000+10:00</published><updated>2005-08-31T18:25:24.013+10:00</updated><title type='text'>Parsing and Patterns</title><content type='html'>The logic compiler generates Haskell code to implement a calculus. This includes a data-type to represent formulae, a function to resolve those formulae into sub-formulae, functions to format them for output, miscellaneous utility functions and a parser to parse formulae in the language the calculus operates with. As the code stands currently, the logic language allows the user to define operators with arbitrary arity and fixity. One might, if one were of a mind, define a 4-fix &lt;span style="font-weight: bold"&gt;#&lt;/span&gt; operator with an arity of 3. A formula with such an operator might look like: &lt;code style="text-align: center;"&gt;&amp;alpha;&lt;sub&gt;1&lt;/sub&gt; &amp;alpha;&lt;sub&gt;2&lt;/sub&gt; &amp;alpha;&lt;sub&gt;3&lt;/sub&gt; # &amp;alpha;&lt;sub&gt;4&lt;/sub&gt;&lt;/code&gt;&lt;br /&gt;As the code stands, the generated parser is built using the &lt;a href="http://www.cs.uu.nl/people/daan/download/parsec/parsec.html#buildExpressionParser"&gt;buildExpressionParser&lt;/a&gt; facility of the &lt;a href="http://www.cs.uu.nl/~daan/parsec.html"&gt;Parsec&lt;/a&gt; parser library. Unfortunately, &lt;span style="font-weight: bold"&gt;buildExpressionParser&lt;/span&gt; is only capable of handling expression languages with unary prefix, binary infix and unary postfix operators, meaning that we can't generate parsers for all calculi that can be defined with our language.&lt;br /&gt;&lt;br /&gt;To fix this, I'm going to have to write a more general expression parser generator (hopefully using &lt;span style="font-weight: bold"&gt;buildExpressionParser&lt;/span&gt; as a base) that can handle operators of arbitrary arity and fixity. Either that, restrict the system to only unary and binary operators which would make implementing some [conceivable] logics very difficult, if not impossible.&lt;br /&gt;&lt;br /&gt;On the other hand, &lt;span style="font-weight: bold"&gt;buildExpressionParser&lt;/span&gt; has greatly simplified the pattern handling code in the compiler. In our language (which is so simple as to not need a name), we define rules such as: &lt;code style="text-align: center;"&gt; Resolve "a-&gt;b" to "~a" or "b".&lt;/code&gt; The patterns (the bits in quote marks) are formulae using the operators of the calculus, with arbitrary alphabetic names for variables (which can stand for any sub-formula - we can make no distinction at this point between sub-formulae and propositions as I haven't got round to implementing that yet). Our compiler generates &lt;emph&gt;at run time&lt;/emph&gt; a parser for the formulae of the calculus and uses it to parse the rule patterns and generate appropriate snippets of code which we use for pattern-matching in the Haskell code implementing the calculus. For example, the rule above would be translated to the Haskell code &lt;code style="text-align: center;"&gt; resolve (Impl a b) = Or [(Neg a), b]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Once we've parsed the pattern and generated a function, we get the pattern matching at run-time for free from Haskell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112095963808904504?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112095963808904504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112095963808904504' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112095963808904504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112095963808904504'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/parsing-and-patterns.html' title='Parsing and Patterns'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112089221622962864</id><published>2005-07-09T16:54:00.000+10:00</published><updated>2005-08-31T18:26:23.800+10:00</updated><title type='text'>Done! or It's A Start!</title><content type='html'>Last night (or, more correctly, this morning) I constructed a model: &lt;code style="text-align: center;"&gt;~a, b&lt;/code&gt; for the formul&amp;aelig;: &lt;code style="text-align: center;"&gt;~a, a&amp;or;b&lt;/code&gt; using only the tableau framework and an automatically generated implementation of the propositional calculus:&lt;blockquote&gt;Tableau&gt; &lt;span style="font-weight: bold;"&gt;prove [Neg (Prop "a"), Disj (Prop "a") (Prop "b")]&lt;/span&gt;&lt;br/&gt;Model [b,~a]&lt;/blockquote&gt;Now all I have to do is fix the bugs, extend what's there to labelled tableau and test it all. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112089221622962864?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112089221622962864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112089221622962864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112089221622962864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112089221622962864'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/done-or-its-start.html' title='Done! or It&apos;s A Start!'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-112039300500976835</id><published>2005-07-03T21:57:00.000+10:00</published><updated>2005-07-03T22:16:45.013+10:00</updated><title type='text'>I can do it, I can do it...</title><content type='html'>The system is nearly to the stage where I can write the propositional logic in it. I've been held up by a bit of trouble writing the code to generate a formula parser from the definitions of the logical operators. Once that is written, I need to modify it slightly (to generate a parser, rather than generate code to generate a parser) to parse the rule patterns, and logic compiler will be finished.&lt;br /&gt;&lt;br /&gt;Then it'll need a Makefile (or something similar) to link a logic with the tableau engine (the simple, unlabelled version of it is finished), and we'll be finished with this initial stage of development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-112039300500976835?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/112039300500976835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=112039300500976835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112039300500976835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/112039300500976835'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/07/i-can-do-it-i-can-do-it.html' title='I can do it, I can do it...'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111983139207420015</id><published>2005-06-27T10:11:00.000+10:00</published><updated>2005-06-27T10:16:32.076+10:00</updated><title type='text'>Incremental Development</title><content type='html'>Incremental development is fun. I've just added support for branching as required to implement the disjunction and implication rules of my propositional calculus and it's been quite interesting to see just how easy a functional programming language makes with sort of exploratory approach to design and development.&lt;br /&gt;&lt;br /&gt;Once I've got this up and running (all I need to do is add a check for contradiction), I'll refactor it to be a little neater, write a parser and generator that supports all of the features and get an initial, pre-alpha, demonstration version posted.&lt;br /&gt;&lt;br /&gt;Hopefully that'll be in the next two or three days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111983139207420015?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111983139207420015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111983139207420015' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111983139207420015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111983139207420015'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/incremental-development.html' title='Incremental Development'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111957147792560578</id><published>2005-06-24T09:52:00.000+10:00</published><updated>2005-06-27T09:52:30.293+10:00</updated><title type='text'>Another Night's Worth of Code</title><content type='html'>I've just finished the first major part of my first step along the road to [real] implementation: I now have a working type for propositional calculus, a simple representation of a tableau branch, can saturate said branch (modulo the rules which branch) and generate a model (which is simply a list of literals at this point).&lt;br /&gt;&lt;br /&gt;Next, I need to extend this tableau implementation to support branching and then complete the logic with correct rules for branching connectives (disjunction and implication). Once that is done, I'll rewrite my language parser and code generator so that I can actually generate this implementation of the propositional calculus from the definition.&lt;br /&gt;&lt;br /&gt;Once that is done, I'll move on to the basic propositional modal logic: K. Getting K to work will require that I implement labels, relations and extend my language so that it can import and extend existing logics. Once that is done, I'll move onto a more complex modal logic (perhaps S4) before tackling intuitionistic logic (which uses two-part labels).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111957147792560578?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111957147792560578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111957147792560578' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111957147792560578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111957147792560578'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/another-nights-worth-of-code.html' title='Another Night&apos;s Worth of Code'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111956136122369736</id><published>2005-06-24T07:08:00.000+10:00</published><updated>2005-06-24T07:16:01.226+10:00</updated><title type='text'>Reusing Throwaway Code</title><content type='html'>I've just had my first go at writing a monad, and it's harder than it would seem. As a result of my moderately dismal failure, I've decided to go back and actually read the monads sections of the various Haskell tutorials (the Gentle Introduction, Yet Another Haskell Tutorial, and anything else I find laying around on my hard disc). I've just been looking at &lt;a href="http://www.isi.edu/~hdaume/htut/" style="font-style: italic;"&gt;Yet Another Haskell Tutorial&lt;/a&gt; and the section on computations (Section 8.4.2 in the PDF) defines a small graph library which might be a useful starting point when I need to start dealing with transitive, Euclidean and even more bizarre frames and rules with conditions on them.&lt;br /&gt;&lt;br /&gt;In one section, I get some [hopefully] usable code, and a better understanding of monads.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111956136122369736?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111956136122369736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111956136122369736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111956136122369736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111956136122369736'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/reusing-throwaway-code.html' title='Reusing Throwaway Code'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111953379816126388</id><published>2005-06-23T23:36:00.000+10:00</published><updated>2005-08-31T18:29:05.083+10:00</updated><title type='text'>[Haskell-cafe] Re: Using type classes for polymorphism of data constructors</title><content type='html'>&lt;a href="http://haskell.org/pipermail/haskell-cafe/2005-June/010434.html"&gt; [Haskell-cafe] Re: Using type classes for polymorphism of data constructors&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A message on the &lt;a href="http://haskell.org/pipermail/haskell-cafe/"&gt;Haskell-cafe&lt;/a&gt; mailing list gives an alternative (better, even) approach to the polymorphism of formul&amp;aelig; using differential types. It works just as well as my solution, and results in much more complex (and therefore complete) types:&lt;code&gt;Main&amp;gt; &lt;span style="font-weight: bold;"&gt;:t (Impl (Prop "p") (Poss (Prop "p")))&lt;/span&gt;&lt;br/&gt;Impl (Prop "p") (Poss (Prop "p")) :: PC2 PC0 (Modal1 PC0)&lt;/code&gt;I'm not yet sure which route I'll take. My approach results in a single data type (PC, Modal, etc) for each language, which is good, but the types don't mean much and it isn't Haskell-98 (or, at least, Hugs won't load it as such). Ralf's approach also works, the types is assigns formul&amp;aelig; contain more information and it &lt;span  style="font-weight: bold;"&gt;is&lt;/span&gt; Haskell-98.&lt;br /&gt;&lt;br /&gt;I'll probably wind up using a version based on Ralf's example, unless I run into problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111953379816126388?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111953379816126388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111953379816126388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111953379816126388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111953379816126388'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/haskell-cafe-re-using-type-classes-for.html' title='[Haskell-cafe] Re: Using type classes for polymorphism of data constructors'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111946679995128043</id><published>2005-06-23T04:42:00.000+10:00</published><updated>2005-06-23T04:59:59.956+10:00</updated><title type='text'>Goals: the Motivation of Procrastination</title><content type='html'>So far, I have:&lt;ul&gt;&lt;li&gt;&lt;a href="http://labelledtableaux.blogspot.com/2005/06/parsing-stuff-in-haskell.html"&gt;written a parser&lt;/a&gt; for my logic definition language;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labelledtableaux.blogspot.com/2005/06/polymorphism-and-generality-redux-or.html"&gt;solved&lt;/a&gt; the &lt;a href="http://labelledtableaux.blogspot.com/2005/06/polymorphism-and-generality.html"&gt;problem&lt;/a&gt; I was having with polymorphism;&lt;/li&gt;&lt;li&gt;&lt;a href="http://labelledtableaux.blogspot.com/2005/06/data-structures.html"&gt;designed&lt;/a&gt;, in the large, my data structures; and&lt;/li&gt;&lt;li&gt;&lt;a href="http://labelledtableaux.blogspot.com/2005/06/hello-ill-be-your-host-tonight-as-we.html"&gt;thought&lt;/a&gt; about name for the project.&lt;/li&gt;&lt;/ul&gt;We've now entered the mid-year holiday between the two semesters and I am hoping to get a large amount of my implementation done during the break. On my list of things to do are:&lt;ul&gt;&lt;li&gt;define a state monad (to model the saturation of a branch);&lt;/li&gt;&lt;li&gt;define a backtracking monad (to model the branching of non-deterministic choices);&lt;/li&gt;&lt;li&gt;find a way to compose them (perhaps by &lt;a href="http://labelledtableaux.blogspot.com/2005/06/polymorphism-and-generality-redux-or.html"&gt;deriving a monad transformer&lt;/a&gt;);&lt;/li&gt;&lt;li&gt;finalise the structure of the logic modules;&lt;/li&gt;&lt;li&gt;write a realistic (perhaps even production) parser and code generator for the logics;&lt;/li&gt;&lt;li&gt;learn to use &lt;a href="http://www.cse.unsw.edu.au/~dons/hs-plugins/"&gt; hs-plugins&lt;/a&gt; to write dynamically loadable modules (and find a way to make logic modules dynamically loadable); and&lt;/li&gt;&lt;li&gt;implement some representative test logics (propositional calculus, K, intuitionistic logic, something with transitive frames, etc).&lt;/li&gt;&lt;/ul&gt;I've got a lot of work ahead of me, but the next few weeks are going to be fun. At the end of it, I will (I hope) have a running system to extend and improve and a much greater knowledge of Haskell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111946679995128043?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111946679995128043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111946679995128043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111946679995128043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111946679995128043'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/goals-motivation-of-procrastination.html' title='Goals: the Motivation of Procrastination'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111944839804305822</id><published>2005-06-22T23:32:00.000+10:00</published><updated>2005-08-31T18:28:09.033+10:00</updated><title type='text'>Polymorphism and Generality Redux; or The Beneficial Side Effects of Reading</title><content type='html'>I've started looking at how to code my backtracking monad (the framework that will provide the branching, failure, etc within which the tableau method for each logic will be implemented). To try to get a handle on the subject, I've started looking at &lt;a href="http://portal.acm.org/citation.cfm?id=351258" style="font-style: italic;"&gt;Deriving Backtracking Monad Transformers&lt;/a&gt; by Ralf Hinze.&lt;br /&gt;&lt;br /&gt;Section 3 of the paper defines an abnormal termination (i.e. exceptions) monad and 3.1 begins to define a transformer to extend an arbitrary monad with exceptions. As part of this, it uses an existentially quantified type variable in the definition of a type constructor (for &lt;span style="font-family: monospace;"&gt;:&amp;gt;&amp;gt;=&lt;/span&gt;). Needless to say, the similarity to my previous attempts to make polymorphic  formulae was obvious.&lt;br /&gt;&lt;br /&gt;Although I'm still, by any meaningful standard, a Haskell novice and haven't looked at this extension before, I've managed to extend that example (by restricting the type variable to members of my &lt;span style="font-family: monospace;"&gt;Formula&lt;/span&gt; type class) and Hey, Presto! I can now create polymorphic types representing my inter-mixable logical languages.&lt;br /&gt;&lt;br /&gt;As an example, I've got a type &lt;span style="font-family: monospace;"&gt;PC&lt;/span&gt; for the propositional calculus, and a type &lt; span style="font-family: monospace;" &gt;Modal&lt;/span&gt; for alethic modal logic. The connectives of each language can take formulae of either type (or both) as parameters, and everything Just Works&lt;sup&gt;TM&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;Polymorphism, they way it was intended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111944839804305822?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111944839804305822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111944839804305822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111944839804305822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111944839804305822'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/polymorphism-and-generality-redux-or.html' title='Polymorphism and Generality Redux; or The Beneficial Side Effects of Reading'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111886552294009419</id><published>2005-06-16T05:58:00.000+10:00</published><updated>2005-06-16T05:59:26.113+10:00</updated><title type='text'>Meta-post: Inward Links.</title><content type='html'>Wow, this blog has been mentioned in both &lt;a href="http://consequently.org/edit/page/weblogs"&gt;Consequently&lt;/a&gt; (Greg Restall's blog) and &lt;a href="http://thatlogicblog.blogspot.com/2005/06/labelled-tableux.html"&gt;That Logic Blog&lt;/a&gt; (Jon Cohen's blog).&lt;br /&gt;&lt;br /&gt;Now I'll just have to get some meaningful posts up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111886552294009419?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111886552294009419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111886552294009419' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111886552294009419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111886552294009419'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/meta-post-inward-links.html' title='Meta-post: Inward Links.'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111849686989466003</id><published>2005-06-11T23:25:00.000+10:00</published><updated>2005-06-11T23:34:29.896+10:00</updated><title type='text'>Hello, I'll be your host tonight as we play...</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Name that Project...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My project is in need of a name. Rather than give it an acronym, I've been trying to think of a name at least somewhat relevant to the topic at hand and my approach. I'm currently thinking about "Vindaloo" with the rather tenuous link being Haskell Curry and that the project will, I hope, be pretty &lt;span style="font-style: italic;"&gt;hot&lt;/span&gt; (for some definition). "Vindaloo," though, doesn't have all that much to do with modal logic.&lt;br /&gt;&lt;br /&gt;Names have never been a strong point of mine (I still don't know the names of many of the people I've seen and talked to every day this year), so I'll take this opportunity to solicit suggestions: If you can think of a name for a labelled tableaux theorem prover written in the Haskell programming language please leave your suggestions in a comment, or email them to me at: thsutton at gmail dot com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111849686989466003?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111849686989466003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111849686989466003' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111849686989466003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111849686989466003'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/hello-ill-be-your-host-tonight-as-we.html' title='Hello, I&apos;ll be your host tonight as we play...'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111849629083160844</id><published>2005-06-11T23:06:00.000+10:00</published><updated>2005-06-11T23:24:50.836+10:00</updated><title type='text'>Polymorphism and Generality</title><content type='html'>One of the main goals of this project, to my mind at least, is generality. The prover must be easily extendable with support for a wide range (ideally, the entire range) of labelled tableaux calculi. Furthermore, it ought to be possible to define new logics as extensions to existing logics: propositional modal logic, for example, is an extension of the propositional calculus to support two new operators: &amp;#9671; and &amp;#9633;.&lt;br /&gt;&lt;br /&gt;Unfortunately, I've not been able to get determine just how to get this level of flexibility to work under Haskell's type system. I've asked the &lt;a href="http://haskell.org/mailman/listinfo/haskell-cafe"&gt;Haskell-cafe&lt;/a&gt; mailing list for pointers and, in the mean time, have moved on to doing this composition in the compiler for my mini-language rather than in the generated Haskell code.&lt;br /&gt;&lt;br /&gt;Hopefully, I'll get this to work as it will be quite useful and, unless I'm mistaken, interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111849629083160844?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111849629083160844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111849629083160844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111849629083160844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111849629083160844'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/polymorphism-and-generality.html' title='Polymorphism and Generality'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111839479058473659</id><published>2005-06-10T18:22:00.000+10:00</published><updated>2005-06-23T05:53:38.086+10:00</updated><title type='text'>Data Structures</title><content type='html'>I'm getting to the point where I'll have to start thinking about the data structures used to implement my tableaux. They need to be as small as possible and allow fast membership testing and updating. As my current goal is to accept a formula to prove and produce either a counter-model or a "yes" as output. As such, I will only ever need access to those parts of the tree on the path from the current node, to the root. The tree is, essentially, the progress of the computation backtracking over time.&lt;br /&gt;&lt;br /&gt;As such, I'm looking forward to trying to write the run-time (once I've finished figuring out how the logic-specific code the DSL will be transformed into will work). It will require a bit of input handling (in the IO monad), parsing (in the Parser monad) and backtracking (in some backtracking monad) along with some state (perhaps a State monad, perhaps built into the backtracking monad) and a whole bunch of lazy computation (the actual tableau rules).&lt;br /&gt;&lt;br /&gt;Unless I am overlooking something (I'm sure I am and I imagine that Raj and Pietro agree), my main data structure will be...&lt;br/&gt; &lt;span style="font-weight: bold;"&gt;a list&lt;/span&gt;. The main rationale behind this decision (rather than trying to build some sort of tree structure, or some bizarre nested set-like structure) is that, as I'm merely trying to build a model, the tree itself is expressed in the computation (or, rather, its backtracking). Furthermore, as I'm working with labelled tableaux (with an explicit modal relation), all I need to construct a model once I've found an open branch is the list of formul&amp;aelig; (and relations) from the end of that branch, to the root of the tree.&lt;br /&gt;&lt;br /&gt;In Haskell, lists act like (and probably are) singly linked lists of cons cells with a pointer to the item, and one to the rest of the list. This means that you can add stuff to the front of a list without modifying the original list. This is rather helpful as it means that we can add junk onto one end of a list, which is what we'll be doing with tableaux (adding things to the end of the branch), and you can have multiple lists sharing the same tail (to give an right-way-up tree structure, like an upside-down tableau or a sequent proof). As we're going to be doing backtracking (because we can through away everything we don't need to write a model), and we've got a ready-made tree structure that can be extended at the leaves, there is a very simple way to code it all up: as a monad (for the backtracking) over the list pointers. &lt;br /&gt;&lt;br /&gt;Using a monad (probably a MonadPlus) to implement backtracking will allow us to express branching naturally (using &lt;tt&gt;mzero&lt;/tt&gt; "fail" on branch closure and &lt;tt&gt;mplus&lt;/tt&gt; to do the "branching" evaluation) and if we add in a little state to each branch (a pointer to the current head of the list, for instance) we have a backtracking model search procedure. All that remains is to implement it (no doubt discovering that my understanding of monads is completely wrong) and find out which mountains I need to move to get this approach to work for the non-simple case...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111839479058473659?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111839479058473659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111839479058473659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111839479058473659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111839479058473659'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/data-structures.html' title='Data Structures'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111838247103083353</id><published>2005-06-10T15:47:00.000+10:00</published><updated>2005-06-10T15:47:51.033+10:00</updated><title type='text'>Advice, Suggestions and Supervision</title><content type='html'>I've just had a talk with &lt;a href="http://www.rsise.anu.edu.au/~abate/"&gt;Pietro&lt;/a&gt; about my project and directions in which I might move it. Pietro's PhD project (the &lt;a href="http://users.rsise.anu.edu.au/~abate/twb/twb.html"&gt;Tableaux Work Bench&lt;/a&gt;) is written in &lt;a href="http://caml.inria.fr/"&gt;OCaml&lt;/a&gt; (an eager functional programming language) and works with &lt;span style="font-style: italic;"&gt;implicit tableaux&lt;/span&gt;. My Honours project (which needs a name, suggestions are welcome) is written in &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; (a lazy, pure functional language) and works with &lt;span style="font-style: italic;"&gt;labelled tableaux&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In spite of these differences, the projects are quite similar and Pietro's advice and suggestions are going to be invaluable. In our meeting, we discussed the data structures I am planning on using which has helped solidify my thoughts, which I shall write up and post this evening.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111838247103083353?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111838247103083353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111838247103083353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111838247103083353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111838247103083353'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/advice-suggestions-and-supervision.html' title='Advice, Suggestions and Supervision'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111834281122622794</id><published>2005-06-10T04:45:00.000+10:00</published><updated>2005-06-10T04:47:04.236+10:00</updated><title type='text'>Parsing stuff in Haskell</title><content type='html'>I've just started looking parsing in Haskell with &lt;a href="http://www.cs.uu.nl/people/daan/parsec.html"&gt;Parsec&lt;/a&gt;. After a few hours of reading the &lt;a href="http://www.cs.uu.nl/people/daan/download/parsec/parsec.pdf"&gt;documentation (PDF, 424K)&lt;/a&gt;and poking at the examples, I've managed to hack together a parser for my little language.&lt;br /&gt;&lt;br /&gt;Only a few hours after I started looking at Parsec, I've got a prototype which generates code in an abstract syntax suitable for passing to a semantics checker and code generator (the system will generate Haskell from specs written in my DSL, which is then linked against some infrastructure). Very cool. Haskell is great for my productivity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111834281122622794?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111834281122622794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111834281122622794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111834281122622794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111834281122622794'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/parsing-stuff-in-haskell.html' title='Parsing stuff in Haskell'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-13547860.post-111834337950052729</id><published>2005-06-06T01:00:00.000+10:00</published><updated>2005-06-10T15:48:54.770+10:00</updated><title type='text'>About Labelled Tableaux</title><content type='html'>On this blog I will chronicle the work on my Honours project in computer science: developing a system to construct counter-models for non-theorems of modal logics. This system will be a small theorem prover based on &lt;a href="http://en.wikipedia.org/wiki/Analytic_tableaux"&gt;tableaux&lt;/a&gt;, written in &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I will link to relevant papers and technical reports, technical details which I encounter whilst coding, material that I make available to download, and anything else in the slightest bit relevant to the topic at hand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/13547860-111834337950052729?l=labelledtableaux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labelledtableaux.blogspot.com/feeds/111834337950052729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13547860&amp;postID=111834337950052729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111834337950052729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13547860/posts/default/111834337950052729'/><link rel='alternate' type='text/html' href='http://labelledtableaux.blogspot.com/2005/06/about-labelled-tableaux.html' title='About Labelled Tableaux'/><author><name>thsutton</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://photos1.blogger.com/blogger/5615/352/320/frog.jpg'/></author><thr:total>0</thr:total></entry></feed>
