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

<channel>
	<title>niche computing science &#187; Software</title>
	<atom:link href="http://www.iis.sinica.edu.tw/~scm/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iis.sinica.edu.tw/~scm</link>
	<description>Research Blog of 穆信成 Shin-Cheng Mu</description>
	<lastBuildDate>Mon, 21 Nov 2011 11:53:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Fully Polynomial-Time Approximation by Thinning</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2010/fptas/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2010/fptas/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 10:57:18 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Approximation]]></category>

		<guid isPermaLink="false">http://www.iis.sinica.edu.tw/~scm/?p=458</guid>
		<description><![CDATA[Code accompanying a forthcoming paper of Yu-Han Lyu, Akimasa Morihata, and me: Constructing Datatype-Generic Fully Polynomial-Time Approximation Schemes Using Generalised Thinning.]]></description>
			<content:encoded><![CDATA[<p><b>Last update: June 23, 2010</b></p>
<p>Code accompanying a forthcoming paper of Yu-Han Lyu, Akimasa Morihata, and me: Constructing Datatype-Generic Fully Polynomial-Time Approximation Schemes Using Generalised Thinning.</p>
<p>The file <a href="http://www.iis.sinica.edu.tw/~scm/sw/2010/fptas.zip">fptas.zip</a> consists of the following Haskell modules:</p>
<ul>
<li><code>KnapsackSpec</code>: specification of the 0-1 knapsack problem.</li>
<li><code>Knapsack</code>: a thinning algorithm solving knapsack (<code>knapsack</code>), and an approximation algorithm (<code>knapsack_apx</code>).</li>
<li><code>KnapsackTest</code>: some QuickCheck properties to test the code.</li>
<li><code>PartTreesSpec</code>: specification of the maximal tree partition problem.</li>
<li><code>PartTrees</code>: a thinning algorithm solving the tree partition problem (<code>mtp</code>), and an approximation algorithm (<code>mtp_apx</code>).</li>
<li><code>PartTreesTest</code>: some QuickCheck properties to test the code.</li>
<li><code>Utilities</code>: some utilities used by <code>PartTreesSpec</code>.</li>
<li><code>Merging</code>: generalised merging and bumping functions for both programs.</li>
</ul>
<p>The problem instances generated by QuickCheck very rapidly get too large in size. The function <code>smallCheck</code> defined in both <code>*Test</code> modules restricts the sizes of instances generated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2010/fptas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maximally Dense Segments &#8212; Code and Proof</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2010/maximally-dense-segments-code-and-proof/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2010/maximally-dense-segments-code-and-proof/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 02:43:44 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Program Derivation]]></category>
		<category><![CDATA[Segment Problems]]></category>

		<guid isPermaLink="false">http://www.iis.sinica.edu.tw/~scm/?p=279</guid>
		<description><![CDATA[Code and proof accompanying our forthcoming paper Functional Pearl: Maximally Dense Segments.
]]></description>
			<content:encoded><![CDATA[<p>Code and proof accompanying a forthcoming paper of <a href="http://cms.brookes.ac.uk/staff/SharonCurtis/">Sharon Curtis</a> and me: <a href="http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/">Functional Pearl: Maximally Dense Segments</a>.</p>
<p>Quick links: [<a href="http://www.iis.sinica.edu.tw/~scm/sw/2010/mds_code.tar.gz">expository program</a> | <a href="http://www.iis.sinica.edu.tw/~scm/sw/2010/mds_code_linear.tar.gz">linear time program</a> | <a href="http://www.iis.sinica.edu.tw/~scm/pub/mds-proofs.pdf">proofs</a> (late update: 2010.04.17)].</p>
<p>
<div style="background:#ffffcc"><strong>errata</strong>:
<ul>
<li>Page 3: &#8220;This input sequence does not have a solution&#8230;&#8221; what we meant was &#8220;This input does not have a prefix that is within bounds.&#8221; We used another example where the input does not have a feasible segment at all before changing to example, but I forgot to change the text accordingly. </li>
<li>Page 4, Proof of Theorem 3.2: the first <code>mds<sub>M</sub> x ⇑<sub>d</sub> win (a:x)</code> should be <code>mds<sub>M</sub> x ⇑<sub>d</sub> wp (trim (a:x))</code>; <code>a : x <<sub>b</sub> L</code> and <code>a : x ≥<sub>b</sub> L</code> should respectively be <code>trim (a : x) <<sub>b</sub> L</code> and <code>trim (a : x) ≥<sub>b</sub> L</code>.
</li>
<p>Thanks to Josh Ko for pointing out both errors.
</p></div>
</p>
<h3>Expository Code</h3>
<p>The expository program [<a href="http://www.iis.sinica.edu.tw/~scm/sw/2010/mds_code.tar.gz">download here</a>] intends to be an executable implementation of the code in the paper. For clarity we use Haskell lists for all sequences, and do not implement optimisations such as storing the areas and breadths of segments, thus the program is not linear time yet. A linear time implementation will follow soon.</p>
<p>The code is mostly consistent with the paper, with some minor differences: many functions take an additional argument of type <code>BreadthSpec = (Breadth, Maybe Breadth)</code>. The first component is the lower bound, while the second component is an optional upperbound. The main function is:
<pre><code>mds :: BreadthSpec ->  [Elem] -> Maybe [Elem]</code></pre>
<p>which takes a <code>BreadthSpec</code> and switches between the modes with or without an upper bound.</p>
<p>To try the code, you may either load the module <code>Main</code> into <code>ghci</code> and invoke the function <code>mds</code>:</p>
<pre><code>mds (lb, Just ub) [x1, x2, x3, ... ]</code></pre>
<p>or load the module <code>Test</code> and run some QuickCheck properties:</p>
<pre><code>Test.QuickCheck.quickCheck (prop_mds_correct bb (lb, Just ub))</code></pre>
<p>where <code>lb</code> and <code>ub</code> are the lower and upper bounds, and <code>bb</code> is the bound on breadths of generated test elements. The property <code>prop_mds_correct</code> asserts that <code>mds (lb,ub) x =<sub>d</sub> mds_spec (lb,ub) x</code> for all <code>x</code>.</p>
<p>The <a href="http://www.iis.sinica.edu.tw/~scm/sw/2010/mds_code.tar.gz">gzipped</a> file consists of the following Haskell modules:</p>
<ul>
<li><code>Main</code>: containing the main program <code>mds</code>, our variant of zygomorphism <code>zh</code>, <code>wp2</code>, <code>smsp2</code>, <code>maxChop</code>, <code>trim</code>, etc.</li>
<li><code>Spec</code>: containing a specification of the maximally dense segment problem:
<pre><code>mds_spec :: BreadthSpec -> [Elem] -> Maybe [Elem]
mds_spec bs = maxlistM d . filter (bounds bs) . nonEmptySegs</code></pre>
<p>Many types having <code>area</code>, <code>breadth</code>, and <code>density</code> defined are collected into a type class <code>Block</code>, and functions like <code>maxChop</code> are define on the type class.</li>
<li><code>DRSP</code>: specification of right-skew segments and DRSP, with functions including <code>rightSkew</code>, <code>sdars</code>, <code>lrsp</code>, and <code>drsp</code>.</li>
<li><code>DPTrees</code>: defining <code>DTree</code>s and <code>PTrees</code>, and functions like <code>addD</code> and <code>prependD</code> allowing one to construct DRSPs in a fold.</li>
<li><code>Utilities</code>: some utility functions processing lists.</li>
<li><code>Test</code>: a module defining some QuickCheck properties to test the code.</li>
</ul>
<h3>Linear Time Implementation</h3>
<p>A linear time implementation can be <a href="http://www.iis.sinica.edu.tw/~scm/sw/2010/mds_code_linear.tar.gz">downloaded here</a>. The program uses <a href="http://www.haskell.org/ghc/dist/stable/docs/libraries/containers/Data-Sequence.html">Data.Sequence</a> to represent the compulsory part and the first level of the <code>DForest</code> and the <code>PForest</code> of the window, as well as annotating them with areas and breadths. The subtrees of a <code>DTree</code> and a <code>PTree</code>, however, can be represented simply by snoc-lists and cons-lists respectively.</p>
<p>Organisation of the code is the same as the first program. </p>
<h3>Proofs</h3>
<p>Proofs accompanying the paper [<a href="http://www.iis.sinica.edu.tw/~scm/pub/mds-proofs.pdf">PDF</a>].  Theorems and lemmas are labelled with both their own numbers as well as the numbers in the paper, if any. For example, <b>Lemma A.1</b> (3.1) is Lemma 3.1 in the paper.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2010/maximally-dense-segments-code-and-proof/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AoPA &#8212; Algebra of Programming in Agda</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2008/aopa/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2008/aopa/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 16:20:08 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Agda]]></category>
		<category><![CDATA[Dependent Type]]></category>
		<category><![CDATA[Optimisation Problems]]></category>
		<category><![CDATA[Program Derivation]]></category>

		<guid isPermaLink="false">http://www.iis.sinica.edu.tw/~scm/2008/derivation-carry-code-using-agda/</guid>
		<description><![CDATA[The <strong>AoPA</strong> library allows one to encode <a href="http://portal.acm.org/citation.cfm?id=248932">Algebra of Programming</a> style program derivation, both functional and relational, in <a href="http://appserv.cs.chalmers.se/users/ulfn/wiki/agda.php">Agda</a>, accompanying the paper <a href="http://www.iis.sinica.edu.tw/~scm/2008/algebra-of-programming-using-dependent-types/">Algebra of Programming Using Dependent Types</a> (<a href="http://mpc08.lri.fr/">MPC 2008</a>) developed in co-operation with <a href="http://joshkos.blogspot.com/">Hsiang-Shang Ko</a> and <a href="http://www.cs.chalmers.se/~patrikj/">Patrik Jansson</a>. ]]></description>
			<content:encoded><![CDATA[<p><strong>2011.06.01</strong> <i>Part of the library is updated to use universe polymorphism, and it now type checks with Agda 2.2.11. This is a temporary update yet to be finished. The unfinished parts are commented out in Everything.agda.</i></p>
<p><hl/></p>
<p>An <a href="http://appserv.cs.chalmers.se/users/ulfn/wiki/agda.php">Agda</a> library accompanying the paper <a href="http://www.iis.sinica.edu.tw/~scm/2009/algebra-of-programming-in-agda-dependent-types-for-relational-program-derivation/">Algebra of Programming in Agda: Dependent Types for Relational Program Derivation</a>, developed in co-operation with <a href="http://joshkos.blogspot.com/">Hsiang-Shang Ko</a> and <a href="http://www.cs.chalmers.se/~patrikj/">Patrik Jansson</a>. </p>
<p>Dependent type theory is rich enough to express that a program satisfies an input/output relational specification, but it could be hard to construct the proof term. On the other hand, <em>squiggolists</em> know very well how to show that one relation is included in another by algebraic reasoning. The <strong>AoPA</strong> library allows one to encode <a href="http://portal.acm.org/citation.cfm?id=248932">Algebra of Programming</a> style program derivation, both functional and relational, in Agda. </p>
<h3>Example</h3>
<p>The following is a derivation of insertion sort in progress:</p>
<blockquote><p><code>isort-der : ∃ (\f → ordered? ○ permute ⊒ fun f )<br />
isort-der = (_ , (<br />
&nbsp;&nbsp;⊒-begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordered? ○ permute<br />
&nbsp;&nbsp;⊒⟨ (\vs -> ·-monotonic ordered? (permute-is-fold vs)) ⟩<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordered? ○ foldR combine nil<br />
&nbsp;&nbsp;⊒⟨ foldR-fusion ordered? ins-step ins-base ⟩<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foldR (fun (uncurry insert)) nil<br />
&nbsp;&nbsp;⊒⟨ <span style="background-color: #ccc">{ foldR-to-foldr insert []}0</span> ⟩<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="background-color: #ccc">{ fun (foldr insert [])</span><br />
&nbsp;&nbsp;<span style="background-color: #ccc">⊒∎ }1</span>))</p>
<p>isort : [ Val ] -> [ Val ]<br />
isort = proj₁ isort-der<br />
</code></p></blockquote>
<p>The type of <code>isort-der</code> is a proposition that there exists a function <code>f</code> that is contained in <code>ordered ? ◦ permute</code> , a relation mapping a list to one of its ordered permutations. The proof proceeds by derivation from the speciﬁcation towards the algorithm. The ﬁrst step exploits monotonicity of <code>◦</code> and that <code>permute</code> can be expressed as a fold. The second step makes use of relational fold fusion. The shaded areas denote interaction points — fragments of (proof ) code to be completed. The programmer can query Agda for the expected type and the context of the shaded expression. When the proof is completed, an algorithm <code>isort</code> is obtained by extracting the witness of the proposition. It is an executable program that is backed by the type system to meet the speciﬁcation.</p>
<p>The complete program is in the Example directory of the code.</p>
<h3>The Code</h3>
<p>The code consists of the following files and folders:</p>
<ul>
<li><strong>AlgebraicReasoning</strong>: a number of modules supporting algebraic reasoning. At present we implement our own because the <code>PreorderReasoning</code> module in earlier versions of the <a href="http://appserv.cs.chalmers.se/users/ulfn/wiki/agda.php?n=Libraries.StandardLibrary">Standard Library</a> was not expressive enough for our need. We may adapt to the new Standard Library later.</li>
<li><strong>Data</strong>: defining relational fold, unfold, hylomorphism (using <a href="http://www.iis.sinica.edu.tw/~scm/2008/well-founded-recursion-and-accessibility/">well-founded recursion</a>), the greedy theorem, and the <a href="http://www.iis.sinica.edu.tw/~scm/tag/converse-of-a-function-theorem/">converse-of-a-function theorem</a>, etc, for list and binary tree.</li>
<li><strong>Examples</strong>: currently we have prepared four examples: a functional derivation of the maximum segment sum problem, a relational derivation of insertion sort and quicksort (following the paper <a href="http://portal.acm.org/citation.cfm?coll=GUIDE&#038;dl=GUIDE&#038;id=227829">Functional Algorithm Design</a> by <a href="http://web.comlab.ox.ac.uk/people/Richard.Bird/">Richard Bird</a>), and solving an optimisation problem using the greedy theorem.</li>
<li><strong>Relations</strong>: modules defining various properties of relations.</li>
<li><strong>Sets</strong>: a simple encoding of sets, upon with <strong>Relations</strong> are built.</li>
</ul>
<h3>Download</h3>
<p>To grab the latest code, install <a href="http://darcs.net/">darcs</a> and check our the code from the repository:</p>
<blockquote><p><code>darcs get http://pc-scm.iis.sinica.edu.tw/repos/AoPA<br />
</code></p></blockquote>
<p><strong>AoPA</strong> makes use of the <a href="http://appserv.cs.chalmers.se/users/ulfn/wiki/agda.php?n=Libraries.StandardLibrary">Standard Library</a>, to install which you will need <a href="http://darcs.net/">darcs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2008/aopa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Push: Improving Heap Residency for Lazy Stream Processing by Concurrency</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2007/push-improving-heap-residency-for-lazy-stream-processing-by-concurrency/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2007/push-improving-heap-residency-for-lazy-stream-processing-by-concurrency/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 09:01:16 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[XML Streaming]]></category>

		<guid isPermaLink="false">http://www.iis.sinica.edu.tw/~scm/?p=34</guid>
		<description><![CDATA[Prototype implementation of a language Push, accompanying our recently submitted paper. The prototype is implemented and prepared by <a href="http://www.iis.sinica.edu.tw/public-prog/printinfo.php?person=44169">Ta-Chung Tsai</a>.<br/><br/>While studying XML stream processing, we noticed that programmers need concurrency to save space, especially in a lazy language. We propose the idea of pushing datatypes — when a pushing closure is demanded, all expressions referring to it are evaluated concurrently to weak head normal forms. The closure is no more alive and may thus be garbage collected.

[<a href="http://www.iis.sinica.edu.tw/~scm/sw/push.tar.gz">GZipped Tarball</a>]]]></description>
			<content:encoded><![CDATA[<p>Prototype implementation of a language Push, accompanying our recently submitted paper. The prototype is implemented and prepared by <a href="http://www.iis.sinica.edu.tw/public-prog/printinfo.php?person=44169">Ta-Chung Tsai</a>.</p>
<p>While studying XML stream processing, we noticed that programmers need concurrency to save space, especially in a lazy language. We propose the idea of pushing datatypes — when a pushing closure is demanded, all expressions referring to it are evaluated concurrently to weak head normal forms. The closure is no more alive and may thus be garbage collected.</p>
<p>[<a href="http://www.iis.sinica.edu.tw/~scm/sw/push.tar.gz">GZipped Tarball</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2007/push-improving-heap-residency-for-lazy-stream-processing-by-concurrency/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maximum Segment Sum and Density with Bounded Lengths</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2007/maximum-segment-sum-and-density-with-bounded-lengths/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2007/maximum-segment-sum-and-density-with-bounded-lengths/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 07:01:09 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Greedy Theorem]]></category>
		<category><![CDATA[Optimisation Problems]]></category>
		<category><![CDATA[Program Derivation]]></category>
		<category><![CDATA[Segment Problems]]></category>
		<category><![CDATA[Thinning Theorem]]></category>

		<guid isPermaLink="false">http://www.iis.sinica.edu.tw/~scm/?p=25</guid>
		<description><![CDATA[It may be surprising that variations of the maximum segment sum (MSS) problem, a textbook example for the squiggolists, are still active topics for algorithm designers. These literate Haskell scripts presents a program solving two recently studied variations: computing the maximum sum of segments not longer than an upper-bound, and the maximum density (average) of segments not shorter than a lower-bound. <b>2007/06/26 Update: fixed binary search.</b><br/>
<b>2007/11/04 Update: linear time algorithm for MSDL.</b>]]></description>
			<content:encoded><![CDATA[<p>It may be surprising that variations of the maximum segment sum (MSS) problem, a textbook example for the squiggolists, are still active topics for algorithm designers. These literate Haskell scripts presents a program solving two recently studied variations:</p>
<ol>
<li><a href="http://www.iis.sinica.edu.tw/~scm/sw/mss/mssu.lhs">mssu.lhs</a>: an amortised linear-time algorithm computing the maximum sum of segments not longer than an upper-bound;</li>
<li><a href="http://www.iis.sinica.edu.tw/~scm/sw/mss/msdlb.lhs">msdlb.lhs</a>: an O(n log L) algorithm computing the maximum density (average) of segments not shorter than a lower-bound;</li>
<li><a href="http://www.iis.sinica.edu.tw/~scm/sw/mss/msdll.lhs">msdll.lhs</a>: computing the maximum density (average) of segments not shorter than a lower-bound. With the discovery of Glodwasser et al. we are able to refine the algorithm to amortised linear time again.</li>
</ol>
<p><b>2007/06/26 Update: fixed binary search.</b><br />
<b>2007/11/04 Update: linear time algorithm for MSDL.</b></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2007/maximum-segment-sum-and-density-with-bounded-lengths/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Countdown</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2007/countdown/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2007/countdown/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 12:25:39 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Optimisation Problems]]></category>
		<category><![CDATA[Program Derivation]]></category>
		<category><![CDATA[Program Inversion]]></category>

		<guid isPermaLink="false">http://pc-scm.iis.sinica.edu.tw/~scm/blog/wp/?p=4</guid>
		<description><![CDATA[Programs and profiling results accompanying the paper <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2005:Countdown">Countdown: a case study in origami programming</a>. [<a href="http://www.iis.sinica.edu.tw/~scm/sw/countdown.tar.gz">GZipped Tarball</a>]]]></description>
			<content:encoded><![CDATA[<p>Programs and profiling results accompanying the paper <a href="http://www.iis.sinica.edu.tw/~scm/?p=21">Countdown: a case study in origami programming</a>.</p>
<p>[<a href="http://www.iis.sinica.edu.tw/~scm/sw/countdown.tar.gz">GZipped Tarball</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2007/countdown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inv</title>
		<link>http://www.iis.sinica.edu.tw/~scm/2007/inv/</link>
		<comments>http://www.iis.sinica.edu.tw/~scm/2007/inv/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 12:24:29 +0000</pubDate>
		<dc:creator>Shin</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Bidirectional Updating]]></category>
		<category><![CDATA[Program Inversion]]></category>

		<guid isPermaLink="false">http://pc-scm.iis.sinica.edu.tw/~scm/blog/wp/?p=3</guid>
		<description><![CDATA[The injective language <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2004:Algebraic">Inv</a>, together with the language X, the <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2006:Programmable">XEditor</a>, and the <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2005:Bidirectionalising">HaXml embedding</a>. [<a href="http://www.iis.sinica.edu.tw/~scm/sw/Inv.tar.gz">GZipped Tarball</a>]
]]></description>
			<content:encoded><![CDATA[<p>The injective language <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2004:Algebraic">Inv</a>, together with the language X, the <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2006:Programmable">XEditor</a>, and the <a href="http://www.iis.sinica.edu.tw/~scm/pub/abstracts.shtml#2005:Bidirectionalising">HaXml embedding</a>.</p>
<p>[<a href="http://www.iis.sinica.edu.tw/~scm/sw/Inv.tar.gz">GZipped Tarball</a>]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iis.sinica.edu.tw/~scm/2007/inv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

