<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Introduction to Automated Proof Verification with SASyLF</title>
	<atom:link href="http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/feed" rel="self" type="application/rss+xml" />
	<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf</link>
	<description>(permanently in beta)</description>
	<lastBuildDate>Sun, 29 Aug 2010 20:01:44 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Daniel Spiewak</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4374</link>
		<dc:creator>Daniel Spiewak</dc:creator>
		<pubDate>Sat, 06 Dec 2008 05:31:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4374</guid>
		<description>@Dr. Boyland

Thanks for the clarification on Twelf!  I had planned on re-reading your introduction to the system but never got around to it.  I&#039;ll insert a note in the article to avoid leading too many people astray.

Regarding forall/exists: it occurs to me that I never showed an example with multiple forall(s).  This makes the motivation for exists a little bit more apparent.  A simple example would be the header for the preservation theorem for the simply-typed lambda calculus:

&lt;pre&gt;theorem preservation:
    forall d: Gamma &#124;- t : T
    forall e: t -&gt; t&#039;
    exists Gamma &#124;- t&#039; : T .

    ...
end theorem&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>@Dr. Boyland</p>
<p>Thanks for the clarification on Twelf!  I had planned on re-reading your introduction to the system but never got around to it.  I&#8217;ll insert a note in the article to avoid leading too many people astray.</p>
<p>Regarding forall/exists: it occurs to me that I never showed an example with multiple forall(s).  This makes the motivation for exists a little bit more apparent.  A simple example would be the header for the preservation theorem for the simply-typed lambda calculus:</p>
<pre>theorem preservation:
    forall d: Gamma |- t : T
    forall e: t -> t'
    exists Gamma |- t' : T .

    ...
end theorem</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: John Tang Boyland</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4373</link>
		<dc:creator>John Tang Boyland</dc:creator>
		<pubDate>Sat, 06 Dec 2008 04:35:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4373</guid>
		<description>Nice post.  I&#039;m glad to see SASyLF is being appreciated.  Regarding Twelf: you&#039;re right to have a disclaimer.  Twelf works with (higher-order!) unification and types for logic programs (not functional programs).  Twelf is closer to Prolog than even SASyLF.  On the other hand, you&#039;re absolutely right that SASyLF is massively more readable.

Regarding alloy:  I think (and now I&#039;m out of my depth) that Alloy can only declare the absence of counter-examples up to a particular size.  So it would be less useful for verifying type systems.

Regarding forall vs exists: &quot;forall&quot; are the &quot;inputs&quot; to the theorem, and &quot;exists&quot; are the outputs.  Hence the extra keyword/marker.</description>
		<content:encoded><![CDATA[<p>Nice post.  I&#8217;m glad to see SASyLF is being appreciated.  Regarding Twelf: you&#8217;re right to have a disclaimer.  Twelf works with (higher-order!) unification and types for logic programs (not functional programs).  Twelf is closer to Prolog than even SASyLF.  On the other hand, you&#8217;re absolutely right that SASyLF is massively more readable.</p>
<p>Regarding alloy:  I think (and now I&#8217;m out of my depth) that Alloy can only declare the absence of counter-examples up to a particular size.  So it would be less useful for verifying type systems.</p>
<p>Regarding forall vs exists: &#8220;forall&#8221; are the &#8220;inputs&#8221; to the theorem, and &#8220;exists&#8221; are the outputs.  Hence the extra keyword/marker.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexey Romanov</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4371</link>
		<dc:creator>Alexey Romanov</dc:creator>
		<pubDate>Wed, 03 Dec 2008 22:20:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4371</guid>
		<description>Actually, I&#039;d make a distinction between natural language and logical language. SASyLF looks like it&#039;s trying to approach the logical language and succeeds. 

There are just two things that look wrong from your examples:
1) Having to explicitly say &quot;_:&quot; for &quot;I won&#039;t name this&quot;;
2) This extra &quot;exists&quot;.
Anyway, I clearly need to read the papers :)</description>
		<content:encoded><![CDATA[<p>Actually, I&#8217;d make a distinction between natural language and logical language. SASyLF looks like it&#8217;s trying to approach the logical language and succeeds. </p>
<p>There are just two things that look wrong from your examples:<br />
1) Having to explicitly say &#8220;_:&#8221; for &#8220;I won&#8217;t name this&#8221;;<br />
2) This extra &#8220;exists&#8221;.<br />
Anyway, I clearly need to read the papers <img src='http://www.codecommit.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Spiewak</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4370</link>
		<dc:creator>Daniel Spiewak</dc:creator>
		<pubDate>Tue, 02 Dec 2008 19:25:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4370</guid>
		<description>&gt; What I don’t understand is why do you need “exists” in all 
&gt; the theorems and lemmas

:-S  Like many things in SASyLF, it&#039;s there to bring the syntax more in line with natural-language.  I didn&#039;t show it, but if you wanted to prove something using a theorem or lemma, the syntax looks like this:

&lt;pre&gt;_: ... by theorem my-cool-theorem&lt;/pre&gt;

In more complicated proofs, things get very, *very* verbose.</description>
		<content:encoded><![CDATA[<p>&gt; What I don’t understand is why do you need “exists” in all<br />
&gt; the theorems and lemmas</p>
<p>:-S  Like many things in SASyLF, it&#8217;s there to bring the syntax more in line with natural-language.  I didn&#8217;t show it, but if you wanted to prove something using a theorem or lemma, the syntax looks like this:</p>
<pre>_: ... by theorem my-cool-theorem</pre>
<p>In more complicated proofs, things get very, *very* verbose.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexey Romanov</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4369</link>
		<dc:creator>Alexey Romanov</dc:creator>
		<pubDate>Tue, 02 Dec 2008 19:18:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4369</guid>
		<description>Cool! (Both SASyLF and Alloy.) What I don&#039;t understand is why do you need &quot;exists&quot; in all the theorems and lemmas you present and why couldn&#039;t you just say something like
theorem gt-implies-gt-succ:
    forall g: n1 &gt; n2 . s n1 &gt; s n2
?</description>
		<content:encoded><![CDATA[<p>Cool! (Both SASyLF and Alloy.) What I don&#8217;t understand is why do you need &#8220;exists&#8221; in all the theorems and lemmas you present and why couldn&#8217;t you just say something like<br />
theorem gt-implies-gt-succ:<br />
    forall g: n1 &gt; n2 . s n1 &gt; s n2<br />
?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew McVeigh</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4368</link>
		<dc:creator>Andrew McVeigh</dc:creator>
		<pubDate>Tue, 02 Dec 2008 08:50:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4368</guid>
		<description>@Daniel
&quot;I assume you mean “inference” and not “reconstruction”?&quot;

It&#039;s simpler really than what you mean by both.  My system is a hierarchical component model (i.e. a component contains instances of other components wired in using connectors).  My &quot;inference&quot; allows the required and provided interfaces of ports of composite components (made up of other components) to be determined automatically.  You can also represent relationships between ports on implementation components which bear on the composite case.

Whilst not trivial, it&#039;s a long way from specifying something like the Hindley-Milner type equations.

Andrew</description>
		<content:encoded><![CDATA[<p>@Daniel<br />
&#8220;I assume you mean “inference” and not “reconstruction”?&#8221;</p>
<p>It&#8217;s simpler really than what you mean by both.  My system is a hierarchical component model (i.e. a component contains instances of other components wired in using connectors).  My &#8220;inference&#8221; allows the required and provided interfaces of ports of composite components (made up of other components) to be determined automatically.  You can also represent relationships between ports on implementation components which bear on the composite case.</p>
<p>Whilst not trivial, it&#8217;s a long way from specifying something like the Hindley-Milner type equations.</p>
<p>Andrew</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Spiewak</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4365</link>
		<dc:creator>Daniel Spiewak</dc:creator>
		<pubDate>Mon, 01 Dec 2008 21:44:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4365</guid>
		<description>@Andrew

Cool!  I don&#039;t really understand everything that&#039;s going on in the linked Alloy proof, but to prove a system with full type inference is an impressive feat (I assume you mean &quot;inference&quot; and not &quot;reconstruction&quot;?).  SASyLF is nice, but things get horribly ugly if you try to prove the soundness of things involving unification at the type level.  For example, you could probably prove the soundness of a Prolog type system (if it had one) in SASyLF, but it would be nasty in the extreme.  Alloy looks like it may not suffer from that shortcoming.</description>
		<content:encoded><![CDATA[<p>@Andrew</p>
<p>Cool!  I don&#8217;t really understand everything that&#8217;s going on in the linked Alloy proof, but to prove a system with full type inference is an impressive feat (I assume you mean &#8220;inference&#8221; and not &#8220;reconstruction&#8221;?).  SASyLF is nice, but things get horribly ugly if you try to prove the soundness of things involving unification at the type level.  For example, you could probably prove the soundness of a Prolog type system (if it had one) in SASyLF, but it would be nasty in the extreme.  Alloy looks like it may not suffer from that shortcoming.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew McVeigh</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4364</link>
		<dc:creator>Andrew McVeigh</dc:creator>
		<pubDate>Mon, 01 Dec 2008 20:53:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4364</guid>
		<description>@Daniel
Alloy works off structure -- i.e. you define sigs (signatures) which loosely correspond to classes.  The model checker (finder?) will then look for solutions to your logical specification.  If it doesn&#039;t find any, you have only really verified your logic within the specified state space.  One of the key things it doesn&#039;t have is recursive functions -- you have to use recursive structures for that.

As for proving the soundness of a type system -- i&#039;m not so sure.  It can be used for large and complex examples if needed.  I used Alloy to formally specify a fairly large and intense component system with full type inference: http://www.doc.ic.ac.uk/~amcveigh/papers/transfer/alloy.pdf

Cheers,
Andrew</description>
		<content:encoded><![CDATA[<p>@Daniel<br />
Alloy works off structure &#8212; i.e. you define sigs (signatures) which loosely correspond to classes.  The model checker (finder?) will then look for solutions to your logical specification.  If it doesn&#8217;t find any, you have only really verified your logic within the specified state space.  One of the key things it doesn&#8217;t have is recursive functions &#8212; you have to use recursive structures for that.</p>
<p>As for proving the soundness of a type system &#8212; i&#8217;m not so sure.  It can be used for large and complex examples if needed.  I used Alloy to formally specify a fairly large and intense component system with full type inference: <a href="http://www.doc.ic.ac.uk/~amcveigh/papers/transfer/alloy.pdf" rel="nofollow">http://www.doc.ic.ac.uk/~amcveigh/papers/transfer/alloy.pdf</a></p>
<p>Cheers,<br />
Andrew</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Spiewak</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4363</link>
		<dc:creator>Daniel Spiewak</dc:creator>
		<pubDate>Mon, 01 Dec 2008 17:52:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4363</guid>
		<description>Very interesting!  It looks like Alloy is more geared toward program proving than SASyLF.  On the inverse, it doesn&#039;t look like I could prove the soundness of a type system in Alloy.  Different tools for different jobs I suppose.</description>
		<content:encoded><![CDATA[<p>Very interesting!  It looks like Alloy is more geared toward program proving than SASyLF.  On the inverse, it doesn&#8217;t look like I could prove the soundness of a type system in Alloy.  Different tools for different jobs I suppose.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jherber</title>
		<link>http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf/comment-page-1#comment-4362</link>
		<dc:creator>jherber</dc:creator>
		<pubDate>Mon, 01 Dec 2008 17:42:04 +0000</pubDate>
		<guid isPermaLink="false">http://www.codecommit.com/blog/scala/introduction-to-automated-proof-verification-with-sasylf#comment-4362</guid>
		<description>Alloy is another interesting software analysis/modeling tool for reasoning about systems:  http://alloy.mit.edu/alloy4/tutorial4/</description>
		<content:encoded><![CDATA[<p>Alloy is another interesting software analysis/modeling tool for reasoning about systems:  <a href="http://alloy.mit.edu/alloy4/tutorial4/" rel="nofollow">http://alloy.mit.edu/alloy4/tutorial4/</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
