<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-2323</id>
	<title>Nabble - Coq</title>
	<updated>2009-11-28T03:52:24Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/Coq-f2323.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Coq-f2323.html" />
	<subtitle type="html">Developed in the LogiCal project, the &lt;a href=&quot;http://coq.inria.fr/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Coq&lt;/a&gt;&amp;nbsp;tool is a formal proof management system: a proof done with Coq is mechanically checked by the machine. Discussion of the Coq Theorem Prover.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26552508</id>
	<title>Re: coq indenter</title>
	<published>2009-11-28T03:52:24Z</published>
	<updated>2009-11-28T03:52:24Z</updated>
	<author>
		<name>Chris Dams</name>
	</author>
	<content type="html">Dear all,
&lt;br&gt;&lt;br&gt;&amp;gt; It might be also useful to optionally add ;fail &amp;quot;Expected Goal to be
&lt;br&gt;&amp;gt; Solved&amp;quot; to the end of any statement that solves a goal, or more likley an
&lt;br&gt;&amp;gt; Ltac with a short name that does that.
&lt;br&gt;&lt;br&gt;Yes, that is very useful. I use fail a lot for that purpose and I
&lt;br&gt;organize my proofs in such a way that the reasoning only infrequently
&lt;br&gt;splits. And when it splits I add a comment that says what the purpose
&lt;br&gt;of the branches is. It is quite possible to avoid splitting the
&lt;br&gt;reasoning in lots of cases. If a tactic produces two subgoals and the
&lt;br&gt;second is solved by some short reasoning like just &amp;quot;tauto&amp;quot; or some
&lt;br&gt;other short squence of tactics then just write &amp;quot;tactic; [|tauto]&amp;quot;. In
&lt;br&gt;this case no &amp;quot;fail&amp;quot; is needed because tauto already gives an error if
&lt;br&gt;it does not solve the goal. The result is that the reasoning hardly
&lt;br&gt;ever splits and this keeps proof scripts so very much clearer.
&lt;br&gt;&lt;br&gt;All the best,
&lt;br&gt;Chris
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/coq-indenter-tp26531346p26552508.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26546593</id>
	<title>Re: coq indenter</title>
	<published>2009-11-27T11:02:11Z</published>
	<updated>2009-11-27T11:02:11Z</updated>
	<author>
		<name>Jean-Francois Monin</name>
	</author>
	<content type="html">To this effect you can use &amp;quot;...&amp;quot; in conjunction with
&lt;br&gt;&amp;quot;Proof with solve []&amp;quot;, e.g.
&lt;br&gt;&lt;br&gt;Lemma L: P.
&lt;br&gt;Proof with solve [].
&lt;br&gt;&amp;nbsp; induction n.
&lt;br&gt;&amp;nbsp; &amp;nbsp; assert Q.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; intuition...
&lt;br&gt;&amp;nbsp; &amp;nbsp; split.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; apply H; auto...
&lt;br&gt;&amp;nbsp; &amp;nbsp; exact 3...
&lt;br&gt;&amp;nbsp; rewrite IHn.
&lt;br&gt;&amp;nbsp; ring...
&lt;br&gt;Qed.
&lt;br&gt;&lt;br&gt;&amp;nbsp; JF
&lt;br&gt;&lt;br&gt;On Fri, Nov 27, 2009 at 09:50:24AM -0500, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26546593&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;roconnor@...&lt;/a&gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; It might be also useful to optionally add ;fail &amp;quot;Expected Goal to be &amp;nbsp;
&lt;br&gt;&amp;gt; Solved&amp;quot; to the end of any statement that solves a goal, or more likley an 
&lt;br&gt;&amp;gt; Ltac with a short name that does that.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The idea is to have coq fail as early as possible when a tactic fails to &amp;nbsp;
&lt;br&gt;&amp;gt; solve a goal when the script is expecting it to be solved. &amp;nbsp;Ideally the &amp;nbsp;
&lt;br&gt;&amp;gt; Coq tactic syntax ought to have a different terminator character required 
&lt;br&gt;&amp;gt; when a tactic solves the goal.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Thu, 26 Nov 2009, Bas Spitters wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Recently, I asked about a coq indenter. Meanwhile we use the following
&lt;br&gt;&amp;gt;&amp;gt; python script which was produced by Eelis.
&lt;br&gt;&amp;gt;&amp;gt; We succesfully tested it on the corn-library.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; We provide it in the hope it will be useful for others too.
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://www.eelis.net/coqindent/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.eelis.net/coqindent/&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; coqindent
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Introduction
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; coqindent is a small crude Python script that indents Coq proof
&lt;br&gt;&amp;gt;&amp;gt; scripts. It works by scanning coqtop's output for &amp;quot;# subgoals&amp;quot; strings
&lt;br&gt;&amp;gt;&amp;gt; and other cues that proofs have begun/ended, which is obviously an
&lt;br&gt;&amp;gt;&amp;gt; entirely fragile and irresponsible way to do it. Nevertheless, it
&lt;br&gt;&amp;gt;&amp;gt; mostly works, so perhaps it might be of use to others.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Example
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Given the input:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Lemma L: P.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;induction n.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;assert Q.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;intuition.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;split.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;apply H; auto.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;exact 3.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;rewrite IHn.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;ring.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Qed.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; coqindent produces the following output:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Lemma L: P.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Proof.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;induction n.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;assert Q.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;intuition.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;split.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;apply H; auto.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;exact 3.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;rewrite IHn.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;ring.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;Qed.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Thus, coqindent makes indentation depth coincide with the number of
&lt;br&gt;&amp;gt;&amp;gt; pending subgoals, revealing the basic proof structure. If you prefer
&lt;br&gt;&amp;gt;&amp;gt; another layout convention, coqindent is not for you.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt;&amp;gt; Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt; Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt; Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;&amp;gt; Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;Jean-Francois Monin
&lt;br&gt;CNRS-LIAMA, Project FORMES &amp;nbsp;&amp; &amp;nbsp;Universite de Grenoble 1
&lt;br&gt;&lt;br&gt;Office 3-605, FIT, Tsinghua University
&lt;br&gt;Haidian District, Beijing 100084, CHINA
&lt;br&gt;Tel: +86 10 62 79 69 79 ext 605
&lt;br&gt;Fax@LIAMA: +86 10 6264 7458
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/coq-indenter-tp26531346p26546593.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26543437</id>
	<title>Re: coq indenter</title>
	<published>2009-11-27T06:50:24Z</published>
	<updated>2009-11-27T06:50:24Z</updated>
	<author>
		<name>roconnor</name>
	</author>
	<content type="html">It might be also useful to optionally add ;fail &amp;quot;Expected Goal to be 
&lt;br&gt;Solved&amp;quot; to the end of any statement that solves a goal, or more likley an 
&lt;br&gt;Ltac with a short name that does that.
&lt;br&gt;&lt;br&gt;The idea is to have coq fail as early as possible when a tactic fails to 
&lt;br&gt;solve a goal when the script is expecting it to be solved. &amp;nbsp;Ideally the 
&lt;br&gt;Coq tactic syntax ought to have a different terminator character required 
&lt;br&gt;when a tactic solves the goal.
&lt;br&gt;&lt;br&gt;On Thu, 26 Nov 2009, Bas Spitters wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Recently, I asked about a coq indenter. Meanwhile we use the following
&lt;br&gt;&amp;gt; python script which was produced by Eelis.
&lt;br&gt;&amp;gt; We succesfully tested it on the corn-library.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; We provide it in the hope it will be useful for others too.
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://www.eelis.net/coqindent/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.eelis.net/coqindent/&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; coqindent
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Introduction
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; coqindent is a small crude Python script that indents Coq proof
&lt;br&gt;&amp;gt; scripts. It works by scanning coqtop's output for &amp;quot;# subgoals&amp;quot; strings
&lt;br&gt;&amp;gt; and other cues that proofs have begun/ended, which is obviously an
&lt;br&gt;&amp;gt; entirely fragile and irresponsible way to do it. Nevertheless, it
&lt;br&gt;&amp;gt; mostly works, so perhaps it might be of use to others.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Example
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Given the input:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;Lemma L: P.
&lt;br&gt;&amp;gt; &amp;nbsp;induction n.
&lt;br&gt;&amp;gt; &amp;nbsp;assert Q.
&lt;br&gt;&amp;gt; &amp;nbsp;intuition.
&lt;br&gt;&amp;gt; &amp;nbsp;split.
&lt;br&gt;&amp;gt; &amp;nbsp;apply H; auto.
&lt;br&gt;&amp;gt; &amp;nbsp;exact 3.
&lt;br&gt;&amp;gt; &amp;nbsp;rewrite IHn.
&lt;br&gt;&amp;gt; &amp;nbsp;ring.
&lt;br&gt;&amp;gt; &amp;nbsp;Qed.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; coqindent produces the following output:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;Lemma L: P.
&lt;br&gt;&amp;gt; &amp;nbsp;Proof.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;induction n.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;assert Q.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;intuition.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;split.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;apply H; auto.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;exact 3.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;rewrite IHn.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;ring.
&lt;br&gt;&amp;gt; &amp;nbsp;Qed.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thus, coqindent makes indentation depth coincide with the number of
&lt;br&gt;&amp;gt; pending subgoals, revealing the basic proof structure. If you prefer
&lt;br&gt;&amp;gt; another layout convention, coqindent is not for you.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt; Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;&amp;gt; Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;-- 
&lt;br&gt;Russell O'Connor &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&lt;a href=&quot;http://r6.ca/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://r6.ca/&lt;/a&gt;&amp;gt;
&lt;br&gt;``All talk about `theft,''' the general counsel of the American Graphophone
&lt;br&gt;Company wrote, ``is the merest claptrap, for there exists no property in
&lt;br&gt;ideas musical, literary or artistic, except as defined by statute.''
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/coq-indenter-tp26531346p26543437.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26533909</id>
	<title>Re: simple problem</title>
	<published>2009-11-26T11:20:01Z</published>
	<updated>2009-11-26T11:20:01Z</updated>
	<author>
		<name>Matthieu Sozeau</name>
	</author>
	<content type="html">Hello Chung Kil,
&lt;br&gt;&lt;br&gt;Le 26 nov. 09 à 11:34, Chung Kil Hur a écrit :
&lt;br&gt;&lt;br&gt;&amp;gt; Thanks for the detailed explanation.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I heard that Coq + Axiom K is essentailly logically equivalent to &amp;nbsp;
&lt;br&gt;&amp;gt; Agda.
&lt;br&gt;&amp;gt; But, if the propsition I gave is not provable in Coq + Axiom K, then &amp;nbsp;
&lt;br&gt;&amp;gt; it means that the above statement is not true.
&lt;br&gt;&lt;br&gt;It's not. Agda pattern-matching also considers inductive type &amp;nbsp;
&lt;br&gt;constructors injective,
&lt;br&gt;which is independent from K and not derivable in Coq in general, as &amp;nbsp;
&lt;br&gt;far as I
&lt;br&gt;know.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; Chung Kil Hur wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Can anyone prove the following simple proposition using any sensible
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; axioms like axiom_K or whatever?
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ===========================
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Require Import JMeq.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Inductive J : bool -&amp;gt; Type :=
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp;C : J true
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; | D : J false.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Goal JMeq C D -&amp;gt; False.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; From JMeq C D we can derive easily that J true = J false, which is &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; not
&lt;br&gt;&amp;gt;&amp;gt; absurd a priori since, informally, these two types are isomorphic &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; (they
&lt;br&gt;&amp;gt;&amp;gt; are both singleton types).
&lt;br&gt;&amp;gt;&amp;gt; We could try to set up a model of Coq where we have:
&lt;br&gt;&amp;gt;&amp;gt; [[J b]] = 1, [[C]] = [[D]] = 0
&lt;br&gt;&amp;gt;&amp;gt; Introduction rules are OK.
&lt;br&gt;&amp;gt;&amp;gt; But then we have a problem with the elimination rule:
&lt;br&gt;&amp;gt;&amp;gt; - The derived scheme J_rect can be interpreted as
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;[[ J_rect ]] = fun P f0 f1 b j =&amp;gt; if b then f0 else f1
&lt;br&gt;&amp;gt;&amp;gt; (remember J_rect : forall P : forall b : bool, J b -&amp;gt; Type,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; P true C -&amp;gt; P false D -&amp;gt; forall (b : bool) (j : J b), P b j)
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;However, this validates
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;J_rect P f0 f1 true C -&amp;gt; f0 (and similarly for D), but
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;not J_rect P f0 f1 b C -&amp;gt; f0, so we need typed reduction (which is &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; not
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;the case of the current presentation of Coq's formalism).
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; - The primitive match construction cannot be interpreted since we &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; do not
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;have the boolean information b
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; We can take that argument backwards and deduce that, in any &amp;quot;simple&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; model, if JMeq C D holds, then
&lt;br&gt;&amp;gt;&amp;gt; [[J true]] = [[J false]], so [[C]]=[[D]] and then
&lt;br&gt;&amp;gt;&amp;gt; [[True]] = [[match C with C =&amp;gt; True | D =&amp;gt; False end]] =
&lt;br&gt;&amp;gt;&amp;gt; [[ match D with C =&amp;gt; True | D =&amp;gt; False end]] = [[False]]
&lt;br&gt;&amp;gt;&amp;gt; which implies that False holds.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Now can we prove it ? Probably not. If we try to follow the semantic
&lt;br&gt;&amp;gt;&amp;gt; reasoning above we have a problem to replace C with D. This step &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; can be
&lt;br&gt;&amp;gt;&amp;gt; done if we assume that the match operator is a morphism for JMeq, and
&lt;br&gt;&amp;gt;&amp;gt; not only when types coincide:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Axiom Jmatch_morph : forall b b' (j1:J b) (j2:J b')
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;(P:forall b, J b -&amp;gt; Type) f0 f1,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;JMeq j1 j2 -&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;JMeq
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;match j1 in J b return P b j1 with C =&amp;gt; f0 | D =&amp;gt; f1 end
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp;match j2 in J b return P b j2 with C =&amp;gt; f0 | D =&amp;gt; f1 end.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Goal JMeq C D -&amp;gt; False.
&lt;br&gt;&amp;gt;&amp;gt; intro.
&lt;br&gt;&amp;gt;&amp;gt; generalize (Jmatch_morph _ _ _ _ (fun _ _ =&amp;gt; bool) true false H); &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; intro.
&lt;br&gt;&amp;gt;&amp;gt; discriminate H0.
&lt;br&gt;&amp;gt;&amp;gt; Qed.
&lt;br&gt;&amp;gt;&amp;gt; (* Note that we use the axiom only in the non-dependent case, so we
&lt;br&gt;&amp;gt;&amp;gt; could have assumed
&lt;br&gt;&amp;gt;&amp;gt; forall b b' (j1:J b) (j2:J b') P (f0 f1:P),
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;JMeq j1 j2 -&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;match j1 with C =&amp;gt; f0 | D =&amp;gt; f1 end =
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;match j2 with C =&amp;gt; f0 | D =&amp;gt; f1 end.
&lt;br&gt;&amp;gt;&amp;gt; *)
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I have no idea how this axiom compares to Streicher's K axiom. What &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; JMeq
&lt;br&gt;&amp;gt;&amp;gt; j1 j2 means (or should mean) outside the diagonal is unclear to me.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Bruno Barras.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt; Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;&amp;gt; Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;/div&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/simple-problem-tp26527347p26533909.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26532873</id>
	<title>Re: A simple quiz</title>
	<published>2009-11-26T09:45:09Z</published>
	<updated>2009-11-26T09:45:09Z</updated>
	<author>
		<name>Stéphane Lescuyer-3</name>
	</author>
	<content type="html">On Thu, Nov 26, 2009 at 6:36 PM, Taral &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532873&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;taralx@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; I've been looking for this one for a while:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Goal forall A B (a:A) (b:B), JMeq a b -&amp;gt; A = B.
&lt;br&gt;This one is just about destructing the hypothesis : intros; destruct
&lt;br&gt;H; reflexivity.
&lt;br&gt;Maybe you meant something else ?
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;I'm the kind of guy that until it happens, I won't worry about it. -
&lt;br&gt;R.H. RoY05, MVP06
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/A-simple-quiz-tp26527314p26532873.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26532766</id>
	<title>Re: A simple quiz</title>
	<published>2009-11-26T09:36:49Z</published>
	<updated>2009-11-26T09:36:49Z</updated>
	<author>
		<name>Taral</name>
	</author>
	<content type="html">2009/11/25 Chung Kil Hur &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532766&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Chung-Kil.Hur@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Goal forall b b' (x:I b) (y:I b'), JMeq x y -&amp;gt; b = b'.
&lt;br&gt;&lt;br&gt;I've been looking for this one for a while:
&lt;br&gt;&lt;br&gt;Goal forall A B (a:A) (b:B), JMeq a b -&amp;gt; A = B.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Taral &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532766&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;taralx@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;quot;Please let me know if there's any further trouble I can give you.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; -- Unknown
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/A-simple-quiz-tp26527314p26532766.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26532177</id>
	<title>Re: simple problem</title>
	<published>2009-11-26T08:34:50Z</published>
	<updated>2009-11-26T08:34:50Z</updated>
	<author>
		<name>Chung Kil Hur</name>
	</author>
	<content type="html">Thanks for the detailed explanation.
&lt;br&gt;&lt;br&gt;I heard that Coq + Axiom K is essentailly logically equivalent to Agda.
&lt;br&gt;But, if the propsition I gave is not provable in Coq + Axiom K, then it means that the above statement is not true.
&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;Chung-Kil Hur
&lt;br&gt;&lt;br&gt;&lt;br&gt;----- Original Message ----- 
&lt;br&gt;From: &amp;quot;Bruno Barras&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532177&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bruno.barras@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &amp;quot;Chung Kil Hur&amp;quot; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532177&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Chung-Kil.Hur@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Cc: &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26532177&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;coq-club@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Sent: Thursday, November 26, 2009 4:09 PM
&lt;br&gt;Subject: Re: [Coq-Club] simple problem
&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Chung Kil Hur wrote:
&lt;br&gt;&amp;gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; Can anyone prove the following simple proposition using any sensible 
&lt;br&gt;&amp;gt;&amp;gt; axioms like axiom_K or whatever?
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; ===========================
&lt;br&gt;&amp;gt;&amp;gt; Require Import JMeq.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; Inductive J : bool -&amp;gt; Type :=
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; C : J true
&lt;br&gt;&amp;gt;&amp;gt; | D : J false.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;&amp;gt; Goal JMeq C D -&amp;gt; False.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; From JMeq C D we can derive easily that J true = J false, which is not 
&lt;br&gt;&amp;gt; absurd a priori since, informally, these two types are isomorphic (they 
&lt;br&gt;&amp;gt; are both singleton types).
&lt;br&gt;&amp;gt; We could try to set up a model of Coq where we have:
&lt;br&gt;&amp;gt; [[J b]] = 1, [[C]] = [[D]] = 0
&lt;br&gt;&amp;gt; Introduction rules are OK.
&lt;br&gt;&amp;gt; But then we have a problem with the elimination rule:
&lt;br&gt;&amp;gt; - The derived scheme J_rect can be interpreted as
&lt;br&gt;&amp;gt; &amp;nbsp; [[ J_rect ]] = fun P f0 f1 b j =&amp;gt; if b then f0 else f1
&lt;br&gt;&amp;gt; (remember J_rect : forall P : forall b : bool, J b -&amp;gt; Type,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;P true C -&amp;gt; P false D -&amp;gt; forall (b : bool) (j : J b), P b j)
&lt;br&gt;&amp;gt; &amp;nbsp; However, this validates
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; J_rect P f0 f1 true C -&amp;gt; f0 (and similarly for D), but
&lt;br&gt;&amp;gt; &amp;nbsp; not J_rect P f0 f1 b C -&amp;gt; f0, so we need typed reduction (which is not
&lt;br&gt;&amp;gt; &amp;nbsp; the case of the current presentation of Coq's formalism).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; - The primitive match construction cannot be interpreted since we do not
&lt;br&gt;&amp;gt; &amp;nbsp; have the boolean information b
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; We can take that argument backwards and deduce that, in any &amp;quot;simple&amp;quot; 
&lt;br&gt;&amp;gt; model, if JMeq C D holds, then
&lt;br&gt;&amp;gt; [[J true]] = [[J false]], so [[C]]=[[D]] and then
&lt;br&gt;&amp;gt; [[True]] = [[match C with C =&amp;gt; True | D =&amp;gt; False end]] =
&lt;br&gt;&amp;gt; &amp;nbsp;[[ match D with C =&amp;gt; True | D =&amp;gt; False end]] = [[False]]
&lt;br&gt;&amp;gt; which implies that False holds.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Now can we prove it ? Probably not. If we try to follow the semantic 
&lt;br&gt;&amp;gt; reasoning above we have a problem to replace C with D. This step can be 
&lt;br&gt;&amp;gt; done if we assume that the match operator is a morphism for JMeq, and 
&lt;br&gt;&amp;gt; not only when types coincide:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Axiom Jmatch_morph : forall b b' (j1:J b) (j2:J b')
&lt;br&gt;&amp;gt; &amp;nbsp; (P:forall b, J b -&amp;gt; Type) f0 f1,
&lt;br&gt;&amp;gt; &amp;nbsp; JMeq j1 j2 -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; JMeq
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; match j1 in J b return P b j1 with C =&amp;gt; f0 | D =&amp;gt; f1 end
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; match j2 in J b return P b j2 with C =&amp;gt; f0 | D =&amp;gt; f1 end.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Goal JMeq C D -&amp;gt; False.
&lt;br&gt;&amp;gt; intro.
&lt;br&gt;&amp;gt; generalize (Jmatch_morph _ _ _ _ (fun _ _ =&amp;gt; bool) true false H); intro.
&lt;br&gt;&amp;gt; discriminate H0.
&lt;br&gt;&amp;gt; Qed.
&lt;br&gt;&amp;gt; (* Note that we use the axiom only in the non-dependent case, so we 
&lt;br&gt;&amp;gt; could have assumed
&lt;br&gt;&amp;gt; forall b b' (j1:J b) (j2:J b') P (f0 f1:P),
&lt;br&gt;&amp;gt; &amp;nbsp; JMeq j1 j2 -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; match j1 with C =&amp;gt; f0 | D =&amp;gt; f1 end =
&lt;br&gt;&amp;gt; &amp;nbsp; match j2 with C =&amp;gt; f0 | D =&amp;gt; f1 end.
&lt;br&gt;&amp;gt; &amp;nbsp;*)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I have no idea how this axiom compares to Streicher's K axiom. What JMeq 
&lt;br&gt;&amp;gt; j1 j2 means (or should mean) outside the diagonal is unclear to me.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Bruno Barras.
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/simple-problem-tp26527347p26532177.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26531346</id>
	<title>coq indenter</title>
	<published>2009-11-26T07:50:22Z</published>
	<updated>2009-11-26T07:50:22Z</updated>
	<author>
		<name>Bas Spitters</name>
	</author>
	<content type="html">Recently, I asked about a coq indenter. Meanwhile we use the following
&lt;br&gt;python script which was produced by Eelis.
&lt;br&gt;We succesfully tested it on the corn-library.
&lt;br&gt;&lt;br&gt;We provide it in the hope it will be useful for others too.
&lt;br&gt;&lt;a href=&quot;http://www.eelis.net/coqindent/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.eelis.net/coqindent/&lt;/a&gt;&lt;br&gt;&lt;br&gt;coqindent
&lt;br&gt;&lt;br&gt;Introduction
&lt;br&gt;&lt;br&gt;coqindent is a small crude Python script that indents Coq proof
&lt;br&gt;scripts. It works by scanning coqtop's output for &amp;quot;# subgoals&amp;quot; strings
&lt;br&gt;and other cues that proofs have begun/ended, which is obviously an
&lt;br&gt;entirely fragile and irresponsible way to do it. Nevertheless, it
&lt;br&gt;mostly works, so perhaps it might be of use to others.
&lt;br&gt;&lt;br&gt;Example
&lt;br&gt;&lt;br&gt;Given the input:
&lt;br&gt;&lt;br&gt;&amp;nbsp; Lemma L: P.
&lt;br&gt;&amp;nbsp; induction n.
&lt;br&gt;&amp;nbsp; assert Q.
&lt;br&gt;&amp;nbsp; intuition.
&lt;br&gt;&amp;nbsp; split.
&lt;br&gt;&amp;nbsp; apply H; auto.
&lt;br&gt;&amp;nbsp; exact 3.
&lt;br&gt;&amp;nbsp; rewrite IHn.
&lt;br&gt;&amp;nbsp; ring.
&lt;br&gt;&amp;nbsp; Qed.
&lt;br&gt;&lt;br&gt;coqindent produces the following output:
&lt;br&gt;&lt;br&gt;&amp;nbsp; Lemma L: P.
&lt;br&gt;&amp;nbsp; Proof.
&lt;br&gt;&amp;nbsp; &amp;nbsp; induction n.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; assert Q.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; intuition.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; split.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; apply H; auto.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; exact 3.
&lt;br&gt;&amp;nbsp; &amp;nbsp; rewrite IHn.
&lt;br&gt;&amp;nbsp; &amp;nbsp; ring.
&lt;br&gt;&amp;nbsp; Qed.
&lt;br&gt;&lt;br&gt;Thus, coqindent makes indentation depth coincide with the number of
&lt;br&gt;pending subgoals, revealing the basic proof structure. If you prefer
&lt;br&gt;another layout convention, coqindent is not for you.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/coq-indenter-tp26531346p26531346.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26530786</id>
	<title>Re: simple problem</title>
	<published>2009-11-26T07:12:20Z</published>
	<updated>2009-11-26T07:12:20Z</updated>
	<author>
		<name>muad</name>
	</author>
	<content type="html">Rather than JMeq you might have more luck with: Definition Jeq i j x y := existT J i x = existT J j y.
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/simple-problem-tp26527347p26530786.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26530795</id>
	<title>Re: simple problem</title>
	<published>2009-11-26T07:09:52Z</published>
	<updated>2009-11-26T07:09:52Z</updated>
	<author>
		<name>Bruno Barras</name>
	</author>
	<content type="html">Chung Kil Hur wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; Can anyone prove the following simple proposition using any sensible 
&lt;br&gt;&amp;gt; axioms like axiom_K or whatever?
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; ===========================
&lt;br&gt;&amp;gt; Require Import JMeq.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; Inductive J : bool -&amp;gt; Type :=
&lt;br&gt;&amp;gt; &amp;nbsp; C : J true
&lt;br&gt;&amp;gt; | D : J false.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; Goal JMeq C D -&amp;gt; False.
&lt;/div&gt;&lt;br&gt;&amp;nbsp;From JMeq C D we can derive easily that J true = J false, which is not 
&lt;br&gt;absurd a priori since, informally, these two types are isomorphic (they 
&lt;br&gt;are both singleton types).
&lt;br&gt;We could try to set up a model of Coq where we have:
&lt;br&gt;[[J b]] = 1, [[C]] = [[D]] = 0
&lt;br&gt;Introduction rules are OK.
&lt;br&gt;But then we have a problem with the elimination rule:
&lt;br&gt;- The derived scheme J_rect can be interpreted as
&lt;br&gt;&amp;nbsp; &amp;nbsp;[[ J_rect ]] = fun P f0 f1 b j =&amp;gt; if b then f0 else f1
&lt;br&gt;(remember J_rect : forall P : forall b : bool, J b -&amp;gt; Type,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P true C -&amp;gt; P false D -&amp;gt; forall (b : bool) (j : J b), P b j)
&lt;br&gt;&amp;nbsp; &amp;nbsp;However, this validates
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;J_rect P f0 f1 true C -&amp;gt; f0 (and similarly for D), but
&lt;br&gt;&amp;nbsp; &amp;nbsp;not J_rect P f0 f1 b C -&amp;gt; f0, so we need typed reduction (which is not
&lt;br&gt;&amp;nbsp; &amp;nbsp;the case of the current presentation of Coq's formalism).
&lt;br&gt;&lt;br&gt;- The primitive match construction cannot be interpreted since we do not
&lt;br&gt;&amp;nbsp; &amp;nbsp;have the boolean information b
&lt;br&gt;&lt;br&gt;We can take that argument backwards and deduce that, in any &amp;quot;simple&amp;quot; 
&lt;br&gt;model, if JMeq C D holds, then
&lt;br&gt;[[J true]] = [[J false]], so [[C]]=[[D]] and then
&lt;br&gt;[[True]] = [[match C with C =&amp;gt; True | D =&amp;gt; False end]] =
&lt;br&gt;&amp;nbsp; [[ match D with C =&amp;gt; True | D =&amp;gt; False end]] = [[False]]
&lt;br&gt;which implies that False holds.
&lt;br&gt;&lt;br&gt;Now can we prove it ? Probably not. If we try to follow the semantic 
&lt;br&gt;reasoning above we have a problem to replace C with D. This step can be 
&lt;br&gt;done if we assume that the match operator is a morphism for JMeq, and 
&lt;br&gt;not only when types coincide:
&lt;br&gt;&lt;br&gt;Axiom Jmatch_morph : forall b b' (j1:J b) (j2:J b')
&lt;br&gt;&amp;nbsp; &amp;nbsp;(P:forall b, J b -&amp;gt; Type) f0 f1,
&lt;br&gt;&amp;nbsp; &amp;nbsp;JMeq j1 j2 -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;JMeq
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;match j1 in J b return P b j1 with C =&amp;gt; f0 | D =&amp;gt; f1 end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;match j2 in J b return P b j2 with C =&amp;gt; f0 | D =&amp;gt; f1 end.
&lt;br&gt;&lt;br&gt;Goal JMeq C D -&amp;gt; False.
&lt;br&gt;intro.
&lt;br&gt;generalize (Jmatch_morph _ _ _ _ (fun _ _ =&amp;gt; bool) true false H); intro.
&lt;br&gt;discriminate H0.
&lt;br&gt;Qed.
&lt;br&gt;(* Note that we use the axiom only in the non-dependent case, so we 
&lt;br&gt;could have assumed
&lt;br&gt;forall b b' (j1:J b) (j2:J b') P (f0 f1:P),
&lt;br&gt;&amp;nbsp; &amp;nbsp;JMeq j1 j2 -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;match j1 with C =&amp;gt; f0 | D =&amp;gt; f1 end =
&lt;br&gt;&amp;nbsp; &amp;nbsp;match j2 with C =&amp;gt; f0 | D =&amp;gt; f1 end.
&lt;br&gt;&amp;nbsp; *)
&lt;br&gt;&lt;br&gt;I have no idea how this axiom compares to Streicher's K axiom. What JMeq 
&lt;br&gt;j1 j2 means (or should mean) outside the diagonal is unclear to me.
&lt;br&gt;&lt;br&gt;Bruno Barras.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/simple-problem-tp26527347p26530795.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26530697</id>
	<title>Re: simple problem</title>
	<published>2009-11-26T07:02:36Z</published>
	<updated>2009-11-26T07:02:36Z</updated>
	<author>
		<name>Adam Chlipala-3</name>
	</author>
	<content type="html">Chung Kil Hur wrote:
&lt;br&gt;&amp;gt; Can anyone prove the following simple proposition using any sensible
&lt;br&gt;&amp;gt; axioms like axiom_K or whatever?
&lt;br&gt;&amp;gt; ===========================
&lt;br&gt;&amp;gt; Require Import JMeq.
&lt;br&gt;&amp;gt; Inductive J : bool -&amp;gt; Type :=
&lt;br&gt;&amp;gt; C : J true
&lt;br&gt;&amp;gt; | D : J false.
&lt;br&gt;&amp;gt; Goal JMeq C D -&amp;gt; False.
&lt;br&gt;&amp;gt; ===========================
&lt;br&gt;&lt;br&gt;That's a tricky one. It might be easiest to define another judgment that
&lt;br&gt;refines [JMeq], such that your new judgment also asserts that the [J]
&lt;br&gt;indices of the two arguments are equal.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/simple-problem-tp26527347p26530697.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26527347</id>
	<title>simple problem</title>
	<published>2009-11-26T00:08:45Z</published>
	<updated>2009-11-26T00:08:45Z</updated>
	<author>
		<name>Chung Kil Hur</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;
&lt;HTML&gt;&lt;HEAD&gt;
&lt;META content=&quot;text/html; charset=ks_c_5601-1987&quot; http-equiv=Content-Type&gt;
&lt;META name=GENERATOR content=&quot;MSHTML 8.00.6001.18702&quot;&gt;

&lt;/HEAD&gt;
&lt;BODY bgColor=#ffffff&gt;
&lt;DIV&gt;&lt;FONT size=2&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Can anyone prove the following simple proposition 
using any sensible axioms like axiom_K or whatever?&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;===========================&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Require Import JMeq.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Inductive&amp;nbsp;J : bool -&amp;gt; Type := &lt;BR&gt;&amp;nbsp; C 
:&amp;nbsp;J true &lt;BR&gt;| D : J false.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Goal JMeq C D -&amp;gt; 
False.&lt;BR&gt;===========================&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;If the above is true, so is the following, which is 
what I really want to prove.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Goal forall b b' (x:J b) (y:J b'), JMeq x y -&amp;gt; b 
= b'.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;These propositions are proved in Agda just by 
dependent pattern match.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;But, I don't see how to prove it in Coq, or maybe 
it is not provable?&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Arial&gt;Thanks,&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Chung-Kil 
Hur&lt;/FONT&gt;&lt;/DIV&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/simple-problem-tp26527347p26527347.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26527314</id>
	<title>A simple quiz</title>
	<published>2009-11-25T14:09:49Z</published>
	<updated>2009-11-25T14:09:49Z</updated>
	<author>
		<name>Chung Kil Hur</name>
	</author>
	<content type="html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;
&lt;HTML&gt;&lt;HEAD&gt;
&lt;META content=&quot;text/html; charset=ks_c_5601-1987&quot; http-equiv=Content-Type&gt;
&lt;META name=GENERATOR content=&quot;MSHTML 8.00.6001.18702&quot;&gt;

&lt;/HEAD&gt;
&lt;BODY bgColor=#ffffff&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Can anybody prove the following simple proposition 
using any sensible axioms like axiom_K or whatever?&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;===========================&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Require Import JMeq.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Inductive&amp;nbsp;J : bool -&amp;gt; Type := &lt;BR&gt;&amp;nbsp; C 
:&amp;nbsp;J true &lt;BR&gt;| D : J false.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Goal JMeq C D -&amp;gt; 
False.&lt;BR&gt;===========================&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;If the above is true, so is the following, which is 
what I really want to prove.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Goal forall b b' (x:I b) (y:I b'), JMeq x y -&amp;gt; b 
= b'.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;These propositions are provable in Agda just by 
dependent pattern match.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;But, I don't see how to prove it in Coq, or maybe 
it is not provable?&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Cheers,&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT size=2 face=Arial&gt;Chung-Kil Hur&lt;/FONT&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/A-simple-quiz-tp26527314p26527314.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26516740</id>
	<title>Re: Problem with types</title>
	<published>2009-11-25T09:18:08Z</published>
	<updated>2009-11-25T09:18:08Z</updated>
	<author>
		<name>Bruno Barras</name>
	</author>
	<content type="html">Jeffrey Harris wrote:
&lt;br&gt;&amp;gt; I do not. After I did the dependent rewrite suggested by the previous 
&lt;br&gt;&amp;gt; poster, I got stuck on the sup F &amp;lt;= sup F case. I do not know of a 
&lt;br&gt;&amp;gt; paper proof, but the author seems confident that all the &amp;quot;standard&amp;quot; 
&lt;br&gt;&amp;gt; things are true.
&lt;br&gt;&amp;gt;
&lt;br&gt;Hint: prove
&lt;br&gt;Lemma le_LimO_r : forall a o n,
&lt;br&gt;&amp;nbsp; Omega_le a (o n) -&amp;gt;
&lt;br&gt;&amp;nbsp; Omega_le a (LimO o).
&lt;br&gt;by induction on a, then the &amp;quot;sup F &amp;lt;= sup F&amp;quot; case is trivial.
&lt;br&gt;&lt;br&gt;Bruno Barras.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Problem-with-types-tp26488959p26516740.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26515060</id>
	<title>Re: Problem with types</title>
	<published>2009-11-25T07:45:59Z</published>
	<updated>2009-11-25T07:45:59Z</updated>
	<author>
		<name>Jeffrey Harris-5</name>
	</author>
	<content type="html">I do not. After I did the dependent rewrite suggested by the previous poster, I got stuck on the sup F &amp;lt;= sup F case. I do not know of a paper proof, but the author seems confident that all the &amp;quot;standard&amp;quot; things are true.&lt;br&gt;
&lt;br&gt;Thanks,&lt;br&gt;Jeffrey.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Wed, Nov 25, 2009 at 8:51 AM, muad &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26515060&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;muad.dib.space@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
&lt;br&gt;
Hi, That Peter Hancock text is really interesting and I can show you my&lt;br&gt;
definitions for it, but I have no idea how to prove this test (&amp;lt;=&lt;br&gt;
reflexivity) theorem you were looking at (not because of type issues, just&lt;br&gt;
because it&amp;#39;s a hard theorem -- do you know an on-paper proof?).&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Inductive Nat : Set := ZeroN | SuccN (_:Nat).&lt;br&gt;
Inductive Omega : Set := ZeroO | SuccO (_:Omega) | LimO (_:Nat -&amp;gt; Omega).&lt;br&gt;
&lt;br&gt;
Definition Fam (A : Type) : Type := { I : Set &amp;amp; I -&amp;gt; A }.&lt;br&gt;
Definition Pow (A : Type) : Type := A -&amp;gt; Set.&lt;br&gt;
&lt;br&gt;
Fixpoint Pd (o : Omega) : Set :=&lt;br&gt;
  match o with&lt;br&gt;
    | ZeroO =&amp;gt; False&lt;br&gt;
    | SuccO a =&amp;gt; (unit + Pd a)%type&lt;br&gt;
    | LimO a_ =&amp;gt; { n : Nat &amp;amp; Pd (a_ n) }&lt;br&gt;
  end.&lt;br&gt;
&lt;br&gt;
Definition Zero z := Pd z -&amp;gt; False.&lt;br&gt;
&lt;br&gt;
Notation &amp;quot;!&amp;quot; := (False_rect _).&lt;br&gt;
&lt;br&gt;
Fixpoint Pd_pd (a : Omega) : Pd a -&amp;gt; Omega :=&lt;br&gt;
  match a with&lt;br&gt;
    | ZeroO =&amp;gt; !&lt;br&gt;
    | SuccO a =&amp;gt; fun i =&amp;gt;&lt;br&gt;
      match i with&lt;br&gt;
        | inl tt =&amp;gt; a&lt;br&gt;
        | inr t =&amp;gt; Pd_pd a t&lt;br&gt;
      end&lt;br&gt;
    | LimO a_ =&amp;gt; fun i =&amp;gt;&lt;br&gt;
      match i with&lt;br&gt;
        | existT n t =&amp;gt; Pd_pd (a_ n) t&lt;br&gt;
      end&lt;br&gt;
  end.&lt;br&gt;
&lt;br&gt;
Definition pd (a : Omega) : Fam Omega := existT _ (Pd a) (Pd_pd a).&lt;br&gt;
&lt;br&gt;
Fixpoint Omega_le (a b : Omega) : Set :=&lt;br&gt;
  match a with&lt;br&gt;
    | ZeroO =&amp;gt; unit&lt;br&gt;
    | SuccO a =&amp;gt; { t : Pd b &amp;amp; Omega_le a (Pd_pd b t) }&lt;br&gt;
    | LimO a_ =&amp;gt; forall n : Nat, Omega_le (a_ n) b&lt;br&gt;
  end.&lt;br&gt;
&lt;br&gt;
Definition Omega_eq (a b : Omega) := (Omega_le a b, Omega_le b a).&lt;br&gt;
&lt;br&gt;
Definition Omega_lt (a b : Omega) := { t : Pd b &amp;amp; Omega_le a (Pd_pd b t) }.&lt;br&gt;
&lt;font color=&quot;#888888&quot;&gt;&lt;br&gt;
--&lt;br&gt;
View this message in context: &lt;a href=&quot;http://old.nabble.com/Problem-with-types-tp26488959p26513879.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://old.nabble.com/Problem-with-types-tp26488959p26513879.html&lt;/a&gt;&lt;br&gt;
Sent from the Coq mailing list archive at Nabble.com.&lt;br&gt;
&lt;/font&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class=&quot;h5&quot;&gt;&lt;br&gt;
--------------------------------------------------------&lt;br&gt;
Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;
Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;
          &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;
Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Problem-with-types-tp26488959p26515060.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26514347</id>
	<title>Call for Participation: TLDI'10</title>
	<published>2009-11-25T07:07:31Z</published>
	<updated>2009-11-25T07:07:31Z</updated>
	<author>
		<name>Andrew Kennedy</name>
	</author>
	<content type="html">********************************************************************* 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CALL FOR PARTICIPATION 
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TLDI 2010 
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ACM SIGPLAN Workshop on 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Types in Language Design and Implementation 
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 23 January 2010 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Madrid, Spain
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;To be held in conjunction with POPL 2010
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/~akenn/tldi2010/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://research.microsoft.com/~akenn/tldi2010/&lt;/a&gt;&lt;br&gt;********************************************************************* 
&lt;br&gt;&lt;br&gt;IMPORTANT DATES 
&lt;br&gt;&lt;br&gt;Hotel reservation deadline: December 28, 2009 (Monday)
&lt;br&gt;&lt;br&gt;&lt;br&gt;VENUE 
&lt;br&gt;&lt;br&gt;TLDI'10 and all POPL'10 affiliated events will take place at the Melia Castilla Hotel, Madrid.
&lt;br&gt;&lt;br&gt;&lt;br&gt;REGISTRATION
&lt;br&gt;&lt;br&gt;To register for TLDI'10, follow the link from the POPL 2010 page, at
&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;a href=&quot;http://www.cse.psu.edu/popl/10/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.cse.psu.edu/popl/10/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;SCOPE 
&lt;br&gt;&lt;br&gt;The role of types and proofs in all aspects of language design,
&lt;br&gt;compiler construction, and software development has expanded greatly
&lt;br&gt;in recent years. Type systems, type-based analyses and type-theoretic
&lt;br&gt;deductive systems have been central to advances in compilation
&lt;br&gt;techniques for modern programming languages, verification of safety
&lt;br&gt;and security properties of programs, program transformation and
&lt;br&gt;optimization, and many other areas. The ACM SIGPLAN Workshop on Types
&lt;br&gt;in Language Design and Implementation brings researchers together to
&lt;br&gt;share new ideas and results concerning all aspects of types and
&lt;br&gt;programming, and is now an annual event.
&lt;br&gt;&lt;br&gt;&lt;br&gt;INVITED SPEAKER
&lt;br&gt;&lt;br&gt;Matthias Felleisen, Northeastern University, Boston
&lt;br&gt;&lt;br&gt;&lt;br&gt;PRELIMINARY PROGRAM 
&lt;br&gt;&lt;br&gt;---------------------- 
&lt;br&gt;Opening remarks: 9:20-9:30 
&lt;br&gt;&lt;br&gt;Invited talk &amp;nbsp;9:30-10:30 
&lt;br&gt;&lt;br&gt;*** Adding Types to Untyped Languages
&lt;br&gt;&amp;nbsp; &amp;nbsp;Matthias Felleisen, Northeastern University, Boston
&lt;br&gt;&lt;br&gt;---------------------- 
&lt;br&gt;** Session I &amp;nbsp; 11:00-12:30
&lt;br&gt;&lt;br&gt;*** Effects for Cooperable and Serializable Threads
&lt;br&gt;&amp;nbsp; &amp;nbsp;Jaeheon Yi and Cormac Flanagan
&lt;br&gt;&lt;br&gt;*** Race-free and Memory-safe Multithreading: Design and Implementation in Cyclone
&lt;br&gt;&amp;nbsp; &amp;nbsp;Prodromos Gerakios, Nikolaos Papaspyrou and Konstantinos Sagonas
&lt;br&gt;&lt;br&gt;*** Distributed programming with distributed authorization
&lt;br&gt;&amp;nbsp; &amp;nbsp;Kumar Avijit, Anupam Datta and Robert Harper 
&lt;br&gt;&lt;br&gt;---------------------- 
&lt;br&gt;** Session II &amp;nbsp; 2:30-4:00 
&lt;br&gt;&lt;br&gt;*** let should not be generalized
&lt;br&gt;&amp;nbsp; &amp;nbsp;Dimitrios Vytiniotis, Simon Peyton Jones and Tom Schrijvers 
&lt;br&gt;&lt;br&gt;*** Pointwise Generalized Algebraic Data Types
&lt;br&gt;&amp;nbsp; &amp;nbsp;Chuan-kai Lin and Tim Sheard
&lt;br&gt;&lt;br&gt;*** Verifying Event-Driven Programs using Ramified Frame Properties
&lt;br&gt;&amp;nbsp; &amp;nbsp;Neelakantan Krishnaswami, Lars Birkedal and Jonathan Aldrich 
&lt;br&gt;&lt;br&gt;---------------------- 
&lt;br&gt;** Session III &amp;nbsp; 4:30-5:30 
&lt;br&gt;&lt;br&gt;*** Lightweight Linear Types in System F^o
&lt;br&gt;&amp;nbsp; &amp;nbsp;Karl Mazurak, Jianzhou Zhao and Steve Zdancewic 
&lt;br&gt;&lt;br&gt;*** F-ing Modules
&lt;br&gt;&amp;nbsp; &amp;nbsp;Andreas Rossberg, Claudio Russo and Derek Dreyer
&lt;br&gt;&lt;br&gt;---------------------- 
&lt;br&gt;&lt;br&gt;&lt;br&gt;GENERAL CHAIR 
&lt;br&gt;&lt;br&gt;&amp;nbsp; Andrew Kennedy, Microsoft Research, Cambridge 
&lt;br&gt;&lt;br&gt;&lt;br&gt;PROGRAM CHAIR 
&lt;br&gt;&lt;br&gt;&amp;nbsp; Nick Benton, Microsoft Research, Cambridge
&lt;br&gt;&lt;br&gt;&lt;br&gt;PROGRAM COMMITTEE 
&lt;br&gt;&lt;br&gt;&amp;nbsp; Gilles Barthe, IMDEA Software, Spain
&lt;br&gt;&amp;nbsp; Viviana Bono, University of Torino, Italy
&lt;br&gt;&amp;nbsp; Giorgio Ghelli, University of Pisa, Italy
&lt;br&gt;&amp;nbsp; Dan Grossman, University of Washington, USA
&lt;br&gt;&amp;nbsp; Atsushi Igarashi, Kyoto University, Japan
&lt;br&gt;&amp;nbsp; Conor McBride, University of Strathclyde, UK
&lt;br&gt;&amp;nbsp; Jeremy Siek, University of Colorado at Boulder, USA
&lt;br&gt;&amp;nbsp; Zhong Shao, Yale University, USA
&lt;br&gt;&amp;nbsp; Matthieu Sozeau, Harvard University, USA
&lt;br&gt;&amp;nbsp; Chris Stone, Harvey Mudd College, USA
&lt;br&gt;&amp;nbsp; Kristian Støvring, ITU Copenhagen, Denmark
&lt;br&gt;&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Call-for-Participation%3A-TLDI%2710-tp26514347p26514347.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26513879</id>
	<title>Re: Problem with types</title>
	<published>2009-11-25T06:51:08Z</published>
	<updated>2009-11-25T06:51:08Z</updated>
	<author>
		<name>muad</name>
	</author>
	<content type="html">Hi, That Peter Hancock text is really interesting and I can show you my definitions for it, but I have no idea how to prove this test (&amp;lt;= reflexivity) theorem you were looking at (not because of type issues, just because it's a hard theorem -- do you know an on-paper proof?).
&lt;br&gt;&lt;br&gt;&lt;br&gt;Inductive Nat : Set := ZeroN | SuccN (_:Nat).
&lt;br&gt;Inductive Omega : Set := ZeroO | SuccO (_:Omega) | LimO (_:Nat -&amp;gt; Omega).
&lt;br&gt;&lt;br&gt;Definition Fam (A : Type) : Type := { I : Set &amp; I -&amp;gt; A }.
&lt;br&gt;Definition Pow (A : Type) : Type := A -&amp;gt; Set.
&lt;br&gt;&lt;br&gt;Fixpoint Pd (o : Omega) : Set :=
&lt;br&gt;&amp;nbsp; match o with
&lt;br&gt;&amp;nbsp; &amp;nbsp; | ZeroO =&amp;gt; False
&lt;br&gt;&amp;nbsp; &amp;nbsp; | SuccO a =&amp;gt; (unit + Pd a)%type
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LimO a_ =&amp;gt; { n : Nat &amp; Pd (a_ n) }
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;Definition Zero z := Pd z -&amp;gt; False.
&lt;br&gt;&lt;br&gt;Notation &amp;quot;!&amp;quot; := (False_rect _).
&lt;br&gt;&lt;br&gt;Fixpoint Pd_pd (a : Omega) : Pd a -&amp;gt; Omega :=
&lt;br&gt;&amp;nbsp; match a with
&lt;br&gt;&amp;nbsp; &amp;nbsp; | ZeroO =&amp;gt; !
&lt;br&gt;&amp;nbsp; &amp;nbsp; | SuccO a =&amp;gt; fun i =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | inl tt =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | inr t =&amp;gt; Pd_pd a t
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LimO a_ =&amp;gt; fun i =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | existT n t =&amp;gt; Pd_pd (a_ n) t
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;Definition pd (a : Omega) : Fam Omega := existT _ (Pd a) (Pd_pd a).
&lt;br&gt;&lt;br&gt;Fixpoint Omega_le (a b : Omega) : Set :=
&lt;br&gt;&amp;nbsp; match a with
&lt;br&gt;&amp;nbsp; &amp;nbsp; | ZeroO =&amp;gt; unit
&lt;br&gt;&amp;nbsp; &amp;nbsp; | SuccO a =&amp;gt; { t : Pd b &amp; Omega_le a (Pd_pd b t) }
&lt;br&gt;&amp;nbsp; &amp;nbsp; | LimO a_ =&amp;gt; forall n : Nat, Omega_le (a_ n) b
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;Definition Omega_eq (a b : Omega) := (Omega_le a b, Omega_le b a).
&lt;br&gt;&lt;br&gt;Definition Omega_lt (a b : Omega) := { t : Pd b &amp; Omega_le a (Pd_pd b t) }.
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Problem-with-types-tp26488959p26513879.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26501288</id>
	<title>Re: problem with xml output in 8.2</title>
	<published>2009-11-24T10:42:03Z</published>
	<updated>2009-11-24T10:42:03Z</updated>
	<author>
		<name>hugo.herbelin</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;&amp;gt; mv: cannot stat `/home/ben/coq/xml/.*.html': No such file or directory
&lt;br&gt;&amp;gt; Anomaly: Error executing &amp;quot;mv /home/ben/coq/xml/.*.html
&lt;br&gt;&amp;gt; /home/ben/coq/xml/apply.theory.xml &amp;quot;.
&lt;br&gt;&amp;gt; Please report.
&lt;br&gt;&lt;br&gt;This is solved in branch v8.2 and trunk of the svn repository.
&lt;br&gt;&lt;br&gt;Hugo Herbelin
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/problem-with-xml-output-in-8.2-tp26410810p26501288.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26489489</id>
	<title>Re: Problem with types</title>
	<published>2009-11-23T18:09:28Z</published>
	<updated>2009-11-23T18:09:28Z</updated>
	<author>
		<name>Adam Chlipala-3</name>
	</author>
	<content type="html">Jeffrey Harris wrote:
&lt;br&gt;&amp;gt; I've run into a snag involving two types which should be equal but 
&lt;br&gt;&amp;gt; somehow aren't
&lt;br&gt;&lt;br&gt;I wouldn't describe the problem that way. &amp;nbsp;The problem is that your 
&lt;br&gt;proposed rewrite leads to an ill-typed proof state. &amp;nbsp;Try running 
&lt;br&gt;[generalize dependent p] before the rewrite; you need to move all 
&lt;br&gt;occurrences of the term to rewrite into the goal, so that they can all 
&lt;br&gt;be changed at once. &amp;nbsp;I was able to finish that proof case pretty simply 
&lt;br&gt;after that.
&lt;br&gt;&lt;br&gt;&amp;gt; Another thing--how come even if I define Null as the empty Type, 
&lt;br&gt;&amp;gt; &amp;quot;Check Null&amp;quot; returns &amp;quot;Null:Prop&amp;quot;?
&lt;br&gt;&lt;br&gt;That's the fake universe polymorphism. &amp;nbsp;When possible, particular uses 
&lt;br&gt;of inductive definitions are replaced with references to specialized 
&lt;br&gt;definition clones that use lower-level universes. &amp;nbsp;[Prop] is the lowest 
&lt;br&gt;level universe that is legal here.
&lt;br&gt;&lt;br&gt;P.S.: I think it's a mistake to define [copath] with tactics. &amp;nbsp;You could 
&lt;br&gt;consult my draft book for information on writing dependently-typed 
&lt;br&gt;functions directly:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://adam.chlipala.net/cpdt/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://adam.chlipala.net/cpdt/&lt;/a&gt;&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Problem-with-types-tp26488959p26489489.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26488959</id>
	<title>Problem with types</title>
	<published>2009-11-23T17:05:57Z</published>
	<updated>2009-11-23T17:05:57Z</updated>
	<author>
		<name>Jeffrey Harris-5</name>
	</author>
	<content type="html">Hello all!&lt;br&gt;&lt;br&gt;I&amp;#39;m trying to implement in Coq the definition of ordering on Brouwer ordinals given in this paper: &lt;a href=&quot;http://events.cs.bham.ac.uk/mgs2008/notes/proofTheory.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://events.cs.bham.ac.uk/mgs2008/notes/proofTheory.pdf&lt;/a&gt;. I&amp;#39;ve run into a snag involving two types which should be equal but somehow aren&amp;#39;t--what I&amp;#39;d *like* to do is written in-between the lines of asterisks near the bottom of the code, but Coq isn&amp;#39;t letting me do that. Anyone know a way around this? (It&amp;#39;s possible that this definition of ordering is the same as a simpler definition I wrote a while back, but that one seemed suboptimal, so I don&amp;#39;t know). Another thing--how come even if I define Null as the empty Type, &amp;quot;Check Null&amp;quot; returns &amp;quot;Null:Prop&amp;quot;?&lt;br&gt;
&lt;br&gt;Thanks,&lt;br&gt;Jeffrey&lt;br&gt;&lt;br&gt;&lt;br&gt;Inductive ord_Br:Type :=&lt;br&gt;| ord_Br_O: ord_Br&lt;br&gt;| ord_Br_S: ord_Br -&amp;gt; ord_Br&lt;br&gt;| ord_Br_sup: (nat -&amp;gt; ord_Br) -&amp;gt; ord_Br.&lt;br&gt;&lt;br&gt;Inductive Null:Type :=.&lt;br&gt;&lt;br&gt;Inductive Unit:Type :=&lt;br&gt;
| One: Unit.&lt;br&gt;&lt;br&gt;Fixpoint pred_type (alpha:ord_Br):Type :=&lt;br&gt;match alpha with&lt;br&gt;| ord_Br_O =&amp;gt; Null&lt;br&gt;| ord_Br_S alpha&amp;#39; =&amp;gt; sum Unit (pred_type alpha&amp;#39;)&lt;br&gt;| ord_Br_sup F =&amp;gt; {n:nat &amp;amp; (pred_type (F n))}&lt;br&gt;
end.&lt;br&gt;&lt;br&gt;Definition copath (alpha:ord_Br) (p:pred_type alpha):ord_Br.&lt;br&gt;Proof.&lt;br&gt;induction alpha.&lt;br&gt;intro p; inversion p.&lt;br&gt;intro p; inversion p.&lt;br&gt;exact alpha.&lt;br&gt;apply IHalpha in X.&lt;br&gt;exact X.&lt;br&gt;intro p; inversion p.&lt;br&gt;
apply X in X0.&lt;br&gt;exact X0.&lt;br&gt;Defined.&lt;br&gt;&lt;br&gt;Inductive ord_Br_le: ord_Br -&amp;gt; ord_Br -&amp;gt; Prop :=&lt;br&gt;| ord_le_O: forall alpha:ord_Br, ord_Br_le ord_Br_O alpha&lt;br&gt;| ord_le_S: forall (alpha beta:ord_Br) (p:pred_type beta), &lt;br&gt;
    ord_Br_le alpha (copath beta p) -&amp;gt; ord_Br_le (ord_Br_S alpha) beta&lt;br&gt;| ord_le_sup: forall (F:nat -&amp;gt; ord_Br) (beta:ord_Br), &lt;br&gt;    (forall n:nat, ord_Br_le (F n) beta) -&amp;gt; ord_Br_le (ord_Br_sup F) beta.&lt;br&gt;&lt;br&gt;
(*&lt;br&gt;&lt;br&gt;Theorem test:forall alpha:ord_Br, ord_Br_le alpha alpha.&lt;br&gt;Proof.&lt;br&gt;induction alpha.&lt;br&gt;constructor.&lt;br&gt;inversion IHalpha; subst.&lt;br&gt;apply ord_le_S with (inl Null One).&lt;br&gt;simpl.&lt;br&gt;constructor.&lt;br&gt;apply ord_le_S with (inl (pred_type (ord_Br_S alpha0)) One).&lt;br&gt;
simpl.&lt;br&gt;assumption.&lt;br&gt;apply ord_le_S with (inl (pred_type (ord_Br_sup F)) One).&lt;br&gt;simpl.&lt;br&gt;assumption.&lt;br&gt;apply ord_le_sup.&lt;br&gt;intro m.&lt;br&gt;assert (ord_Br_le (o m) (o m)).&lt;br&gt;apply H.&lt;br&gt;inversion H0; subst.&lt;br&gt;constructor.&lt;br&gt;
&lt;br&gt;***********************************************&lt;br&gt;rewrite H1 in p.&lt;br&gt;apply ord_le_S with (existT pred_type (o m) p).&lt;br&gt;***********************************************&lt;br&gt;&lt;br&gt;*)&lt;br&gt;&lt;br&gt;&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Problem-with-types-tp26488959p26488959.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26482315</id>
	<title>Coq for Windows 7?</title>
	<published>2009-11-23T08:49:17Z</published>
	<updated>2009-11-23T08:49:17Z</updated>
	<author>
		<name>Thomas Thüm</name>
	</author>
	<content type="html">Hi Jeffrey,
&lt;br&gt;&lt;br&gt;I'm working with CoqIde under Windows 7 and it seems to work fine.
&lt;br&gt;&lt;br&gt;The only thing is that I cannot use the export functionality due to the
&lt;br&gt;error &amp;quot;The system cannot find the path specified.&amp;quot; But this might be a
&lt;br&gt;problem just with my installation. Unfortunately, the error message does not
&lt;br&gt;help me to locate the source of that error.
&lt;br&gt;&lt;br&gt;So long,
&lt;br&gt;Thomas
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Coq-for-Windows-7--tp26479321p26482315.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26479321</id>
	<title>Coq for Windows 7?</title>
	<published>2009-11-23T06:43:18Z</published>
	<updated>2009-11-23T06:43:18Z</updated>
	<author>
		<name>Jeffrey Harris-5</name>
	</author>
	<content type="html">Hello!&lt;br&gt;&lt;br&gt;I just got the new Windows operating system, and before I tried to install Coq onto it, I was wondering if anyone out there knew of any issues which might arise in doing so.&lt;br&gt;&lt;br&gt;Thanks!&lt;br&gt;Jeffrey&lt;br&gt;
</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Coq-for-Windows-7--tp26479321p26479321.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26482294</id>
	<title>Inductive relation is a function</title>
	<published>2009-11-22T22:00:49Z</published>
	<updated>2009-11-22T22:00:49Z</updated>
	<author>
		<name>Thomas Thüm</name>
	</author>
	<content type="html">Thanks for your help!
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Inductive-relation-is-a-function-tp26472767p26482294.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26473084</id>
	<title>Re: Inductive relation is a function</title>
	<published>2009-11-22T21:37:44Z</published>
	<updated>2009-11-22T21:37:44Z</updated>
	<author>
		<name>Pierre-Yves Strub-2</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;You have to generalize over l' so that your induction hypothesis is 
&lt;br&gt;quantified over l'.
&lt;br&gt;&lt;br&gt;Fact sub_unique : forall k l l',
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;sub k l -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;sub k l' -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;l = l'.
&lt;br&gt;Proof .
&lt;br&gt;&amp;nbsp; &amp;nbsp;intros k l l' H; revert l' .
&lt;br&gt;&amp;nbsp; &amp;nbsp;induction H; inversion 1; intuition (f_equal; eauto) .
&lt;br&gt;Qed .
&lt;br&gt;&lt;br&gt;Thomas Thüm wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi all,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I defined an inductive relation on lists. A list of pairs may or may not be
&lt;br&gt;&amp;gt; in relation with a list of numbers. I need to proof that the relation
&lt;br&gt;&amp;gt; expresses a function, i.e., for a given list of pairs there is at most one
&lt;br&gt;&amp;gt; list of numbers in the relation.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; My function cannot be expressed using Fixpoint, since the returned list
&lt;br&gt;&amp;gt; depends on a value [p] of type Prop:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Require Export List.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Inductive sub : list (Prop*nat) -&amp;gt; list nat -&amp;gt; Prop :=
&lt;br&gt;&amp;gt; | s_nil : sub nil nil
&lt;br&gt;&amp;gt; | s_cons : forall k l (p:Prop) n,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; sub k l -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; p -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; sub ((p,n)::k) (n::l)
&lt;br&gt;&amp;gt; | s_nocons : forall k l (p:Prop) n,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; sub k l -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; ~p -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; sub ((p,n)::k) l.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Fact sub_unique : forall k l l',
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; sub k l -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; sub k l' -&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; l = l'.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I tried induction over [k], over [l], and over [sub k l] without success.
&lt;br&gt;&amp;gt; The reason is, that the induction hypothesis in all these cases is useless.
&lt;br&gt;&amp;gt; How can I proof this in Coq?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt; Thomas
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt; Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;&amp;gt; Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Inductive-relation-is-a-function-tp26472767p26473084.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26472869</id>
	<title>Benchmarking a permutation-solving tactic</title>
	<published>2009-11-22T21:02:18Z</published>
	<updated>2009-11-22T21:02:18Z</updated>
	<author>
		<name>Jesse Tov</name>
	</author>
	<content type="html">I've been trying to speed up some of my tactics, so I did some
&lt;br&gt;benchmarking. &amp;nbsp;I thought the results might be worth sharing.
&lt;br&gt;&lt;br&gt;I'm writing a tactic to solve goals involving permutations of lists,
&lt;br&gt;where some of the information is available in premises, for example:
&lt;br&gt;&lt;br&gt;&amp;nbsp; forall E F G H: list A,
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (G ++ H) F -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (E ++ F) (G ++ E ++ H).
&lt;br&gt;&lt;br&gt;(This is slightly more involved than the permutation tactic example
&lt;br&gt;in the reference manual.) &amp;nbsp;As a subroutine to the main tactic, I have a
&lt;br&gt;tactic that &amp;quot;reduces&amp;quot; a permutation by removing common components until
&lt;br&gt;either none remains or the two sides are equal. &amp;nbsp;Three examples:
&lt;br&gt;&lt;br&gt;(bench1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (A ++ B ++ C ++ D) (E ++ F ++ A ++ G ++ H)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(removes A, and finds nothing else to remove:)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (B ++ C ++ D) (E ++ F ++ G ++ H)
&lt;br&gt;&lt;br&gt;(bench2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (E ++ D ++ B ++ C ++ A) (A ++ B ++ C ++ D ++ E).
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(removes components until it is trivial by reflexivity:)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation A A
&lt;br&gt;&lt;br&gt;(bench3)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (A ++ B ++ C ++ D) (E ++ F ++ G ++ H).
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(can't remove anything)
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (A ++ B ++ C ++ D) (E ++ F ++ G ++ H).
&lt;br&gt;&lt;br&gt;The main tactic calls the subroutine several times, depending on the
&lt;br&gt;size of the goal, and given the amount of waiting I'm doing, it seemed
&lt;br&gt;worth optimizing. &amp;nbsp;To this end, I wrote six versions of the permutation
&lt;br&gt;reduction tactic (code below), and timed them on the above three
&lt;br&gt;examples:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; Time in seconds for 25 iterations, minus start-up time,
&lt;br&gt;&amp;nbsp; &amp;nbsp; on my two-year-old MacBook
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bench1 &amp;nbsp;bench2 &amp;nbsp;bench3 &amp;nbsp;total
&lt;br&gt;&amp;nbsp; &amp;nbsp; permut1 &amp;nbsp; &amp;nbsp;1.13 &amp;nbsp; &amp;nbsp;1.42 &amp;nbsp; &amp;nbsp;0.50 &amp;nbsp; &amp;nbsp;3.05
&lt;br&gt;&amp;nbsp; &amp;nbsp; permut2 &amp;nbsp; &amp;nbsp;0.75 &amp;nbsp; &amp;nbsp;1.09 &amp;nbsp; *0.23 &amp;nbsp; &amp;nbsp;2.07
&lt;br&gt;&amp;nbsp; &amp;nbsp; permut3 &amp;nbsp; &amp;nbsp;1.60 &amp;nbsp; &amp;nbsp;1.15 &amp;nbsp; &amp;nbsp;1.94 &amp;nbsp; &amp;nbsp;4.69
&lt;br&gt;&amp;nbsp; &amp;nbsp; permut4 &amp;nbsp; *0.47 &amp;nbsp; *0.79 &amp;nbsp; &amp;nbsp;0.42 &amp;nbsp; *1.68
&lt;br&gt;&amp;nbsp; &amp;nbsp; permut5 &amp;nbsp; &amp;nbsp;0.83 &amp;nbsp; &amp;nbsp;1.31 &amp;nbsp; &amp;nbsp;0.78 &amp;nbsp; &amp;nbsp;2.92
&lt;br&gt;&amp;nbsp; &amp;nbsp; permut6 &amp;nbsp; &amp;nbsp;2.78 &amp;nbsp; &amp;nbsp;2.27 &amp;nbsp; &amp;nbsp;2.31 &amp;nbsp; &amp;nbsp;7.36
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; (* = best)
&lt;br&gt;&lt;br&gt;I'm not sure what conclusions to draw from this. &amp;nbsp;I'd expect the
&lt;br&gt;built-in search done by &amp;quot;match&amp;quot; to do better than search coded in Ltac,
&lt;br&gt;in general. &amp;nbsp;This is almost true, except that the hybrid approach in
&lt;br&gt;permut4, with some search done by an outer Ltac loop, beats permut2. &amp;nbsp;As
&lt;br&gt;far as I can tell, permut2 should be O(n m k) and permut4 should be O(n
&lt;br&gt;m), where n and m are the lengths of the lists and k is the number of
&lt;br&gt;common components. &amp;nbsp;That would explain why permut2 pulls ahead for bench
&lt;br&gt;3, where there are no common components.
&lt;br&gt;&lt;br&gt;I've been using Coq for only a month or so, so please forgive me and let
&lt;br&gt;me know if I've done this strangely.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Jesse
&lt;br&gt;&lt;br&gt;[permut_benchmark.v]
&lt;br&gt;&lt;br&gt;Require Import Coq.Lists.List.
&lt;br&gt;Require Import Coq.Program.Equality.
&lt;br&gt;Require Import Coq.Setoids.Setoid.
&lt;br&gt;&lt;br&gt;Hint Constructors Permutation : permut.
&lt;br&gt;Hint Resolve Permutation_sym Permutation_trans Permutation_refl
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Permutation_app
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Permutation_app_swap Permutation_app_inv
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Permutation_cons_inv Permutation_cons_app_inv
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Permutation_app_inv_l Permutation_app_inv_r : permut.
&lt;br&gt;&lt;br&gt;(** Permutations form an equivalence relation *)
&lt;br&gt;Add Parametric Relation {A} : (list A) (@Permutation A)
&lt;br&gt;&amp;nbsp; reflexivity &amp;nbsp;proved by (@Permutation_refl A)
&lt;br&gt;&amp;nbsp; symmetry &amp;nbsp; &amp;nbsp; proved by (@Permutation_sym A)
&lt;br&gt;&amp;nbsp; transitivity proved by (@Permutation_trans A)
&lt;br&gt;&amp;nbsp; &amp;nbsp; as Permutation_Equiv.
&lt;br&gt;&lt;br&gt;Lemma app_nil_start {A: Set} {E: list A} : nil ++ E = E.
&lt;br&gt;Proof. reflexivity. Qed.
&lt;br&gt;&lt;br&gt;Hint Rewrite @app_ass &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: simpl_list.
&lt;br&gt;Hint Rewrite &amp;lt;- @app_nil_end : simpl_list.
&lt;br&gt;Hint Rewrite @app_nil_start &amp;nbsp;: simpl_list.
&lt;br&gt;&lt;br&gt;(** ** Some extra, helpful permutation lemmas. *)
&lt;br&gt;&lt;br&gt;Lemma Permutation_rem_mid {A: Set} {G E1 E2 F1 F2: list A} :
&lt;br&gt;&amp;nbsp; Permutation (E1 ++ G ++ E2) (F1 ++ G ++ F2) -&amp;gt;
&lt;br&gt;&amp;nbsp; Permutation (E1 ++ E2) (F1 ++ F2).
&lt;br&gt;Proof.
&lt;br&gt;&amp;nbsp; induction G; eauto using Permutation_app_inv.
&lt;br&gt;Qed.
&lt;br&gt;&lt;br&gt;Lemma Permutation_add_mid {A: Set} {G E1 E2 F1 F2: list A} :
&lt;br&gt;&amp;nbsp; Permutation (E1 ++ E2) (F1 ++ F2) -&amp;gt;
&lt;br&gt;&amp;nbsp; Permutation (E1 ++ G ++ E2) (F1 ++ G ++ F2).
&lt;br&gt;Proof.
&lt;br&gt;&amp;nbsp; intros.
&lt;br&gt;&amp;nbsp; do 2 (symmetry; rewrite Permutation_app_swap).
&lt;br&gt;&amp;nbsp; autorewrite with simpl_list.
&lt;br&gt;&amp;nbsp; apply Permutation_app_head.
&lt;br&gt;&amp;nbsp; eauto with permut.
&lt;br&gt;Qed.
&lt;br&gt;&lt;br&gt;Lemma Permutation_swap_left {A: Set} {E1 E2 F: list A} :
&lt;br&gt;&amp;nbsp; Permutation (E1 ++ E2) F -&amp;gt;
&lt;br&gt;&amp;nbsp; Permutation (E2 ++ E1) F.
&lt;br&gt;Proof. eauto with permut. Qed.
&lt;br&gt;&lt;br&gt;Lemma Permutation_swap_right {A: Set} {E F1 F2: list A} :
&lt;br&gt;&amp;nbsp; Permutation E (F1 ++ F2) -&amp;gt;
&lt;br&gt;&amp;nbsp; Permutation E (F2 ++ F1).
&lt;br&gt;Proof. eauto with permut. Qed.
&lt;br&gt;&lt;br&gt;Lemma Permutation_add_front_mid {A: Set} {C E F1 F2: list A} :
&lt;br&gt;&amp;nbsp; Permutation E (F1 ++ F2) -&amp;gt;
&lt;br&gt;&amp;nbsp; Permutation (C ++ E) (F1 ++ C ++ F2).
&lt;br&gt;Proof.
&lt;br&gt;&amp;nbsp; induction C; simpl; eauto using Permutation_cons_app.
&lt;br&gt;Qed.
&lt;br&gt;&lt;br&gt;Lemma Permutation_add_front_back {A: Set} {C E F: list A} :
&lt;br&gt;&amp;nbsp; Permutation E F -&amp;gt;
&lt;br&gt;&amp;nbsp; Permutation (C ++ E) (F ++ C).
&lt;br&gt;Proof.
&lt;br&gt;&amp;nbsp; intros.
&lt;br&gt;&amp;nbsp; induction C; autorewrite with simpl_list; simpl;
&lt;br&gt;&amp;nbsp; &amp;nbsp; eauto using Permutation_cons_app.
&lt;br&gt;Qed.
&lt;br&gt;&lt;br&gt;(** ** Auxiliary tactics *)
&lt;br&gt;&lt;br&gt;(** Given a sublist X of a list L, re-associates L to the form
&lt;br&gt;&amp;nbsp; &amp;nbsp; L1 ++ X ++ L2. *)
&lt;br&gt;Ltac focus_env_rec X L :=
&lt;br&gt;&amp;nbsp; match L with
&lt;br&gt;&amp;nbsp; &amp;nbsp; | X &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; constr:(nil ++ L ++ nil)
&lt;br&gt;&amp;nbsp; &amp;nbsp; | X ++ ?L2 &amp;nbsp; &amp;nbsp;=&amp;gt; constr:(nil ++ X ++ L2)
&lt;br&gt;&amp;nbsp; &amp;nbsp; | ?L1 ++ X &amp;nbsp; &amp;nbsp;=&amp;gt; constr:(L1 ++ X ++ nil)
&lt;br&gt;&amp;nbsp; &amp;nbsp; | _ ++ X ++ _ =&amp;gt; L
&lt;br&gt;&amp;nbsp; &amp;nbsp; | ?L1 ++ ?L2 &amp;nbsp;=&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; match L1 with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | context [X] =&amp;gt; match focus_env_rec X L1 with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;?L11 ++ X ++ ?L12 =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;constr:(L11 ++ X ++ (L12 ++ L2))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | _ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; match focus_env_rec X L2 with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;?L21 ++ X ++ ?L22 =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;constr:((L1 ++ L21) ++ X ++ L22)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** Re-associates a list in the conclusion to focus on some sublist X. *)
&lt;br&gt;Tactic Notation &amp;quot;focus_env&amp;quot; constr(X) :=
&lt;br&gt;&amp;nbsp; match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ |- context [?L] ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; let L' := focus_env_rec X L in
&lt;br&gt;&amp;nbsp; &amp;nbsp; replace L with L' by (autorewrite with simpl_list; reflexivity)
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** The number of appended components in a (right-associated) list. *)
&lt;br&gt;Ltac app_length L :=
&lt;br&gt;&amp;nbsp; match L with
&lt;br&gt;&amp;nbsp; &amp;nbsp; | _ ++ ?L' =&amp;gt; let len' := app_length L' in constr:(S len')
&lt;br&gt;&amp;nbsp; &amp;nbsp; | _ =&amp;gt; constr:1
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** Rotate a list to the right or left. *)
&lt;br&gt;Ltac rotate_left &amp;nbsp;:= apply Permutation_swap_left; repeat rewrite app_ass.
&lt;br&gt;Ltac rotate_right := apply Permutation_swap_right; repeat rewrite app_ass.
&lt;br&gt;&lt;br&gt;(** Temporarily hide some subterm of the conclusion while performing
&lt;br&gt;&amp;nbsp; &amp;nbsp; the given tactic. *)
&lt;br&gt;Tactic Notation &amp;quot;hiding&amp;quot; constr(C) &amp;quot;[&amp;quot; tactic(tac) &amp;quot;]&amp;quot; :=
&lt;br&gt;&amp;nbsp; let temp := fresh &amp;quot;temp&amp;quot; in
&lt;br&gt;&amp;nbsp; &amp;nbsp; set (temp := C); tac; subst temp.
&lt;br&gt;&lt;br&gt;Tactic Notation &amp;quot;hiding&amp;quot; &amp;quot;left&amp;quot; &amp;quot;[&amp;quot; tactic(tac) &amp;quot;]&amp;quot; :=
&lt;br&gt;&amp;nbsp; match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ |- Permutation ?E _ ] =&amp;gt; hiding E [ tac ]
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;Tactic Notation &amp;quot;hiding&amp;quot; &amp;quot;right&amp;quot; &amp;quot;[&amp;quot; tactic(tac) &amp;quot;]&amp;quot; :=
&lt;br&gt;&amp;nbsp; match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ |- Permutation _ ?F ] =&amp;gt; hiding F [ tac ]
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** First attempt: Relies mostly on pattern matching and backtracking. *)
&lt;br&gt;Ltac permut1 :=
&lt;br&gt;&amp;nbsp; repeat match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ |- Permutation ?E ?F ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; match E with context [?X] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; match F with context [X] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; hiding E [ focus_env X ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; focus_env X;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; apply Permutation_add_mid;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; autorewrite with simpl_list
&lt;br&gt;&amp;nbsp; &amp;nbsp; end end end.
&lt;br&gt;&lt;br&gt;(** Like first attempt, but doesn't check whether X appears in F
&lt;br&gt;&amp;nbsp; &amp;nbsp; before attempting to focus on it. *)
&lt;br&gt;Ltac permut2 :=
&lt;br&gt;&amp;nbsp; repeat match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; [ |- Permutation ?E _ ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; match E with context [?X] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; hiding E [ focus_env X ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; focus_env X;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; apply Permutation_add_mid;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; autorewrite with simpl_list
&lt;br&gt;&amp;nbsp; &amp;nbsp; end end.
&lt;br&gt;&lt;br&gt;(** Using explicit iteration as in section 10.9.2 of the reference manual.
&lt;br&gt;&amp;nbsp; &amp;nbsp; Tracking the length of left list in the third parameter to loop saves
&lt;br&gt;&amp;nbsp; &amp;nbsp; about 12%. &amp;nbsp;Matching the goal to decide what to do, rather than trying
&lt;br&gt;&amp;nbsp; &amp;nbsp; to apply Permutation_app_head and rotating on failure saves another
&lt;br&gt;&amp;nbsp; &amp;nbsp; 6%. *)
&lt;br&gt;Ltac permut3 :=
&lt;br&gt;&amp;nbsp; let rec loop i j m :=
&lt;br&gt;&amp;nbsp; &amp;nbsp; match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | [ |- Permutation (?C ++ _) (?C ++ _) ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; apply Permutation_app_head;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match constr:(i, m) with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | (S ?i', S ?m') =&amp;gt; loop i' m' m'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | _ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | [ |- Permutation (_ ++ _) (_ ++ _) ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match j with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | S ?j' =&amp;gt; rotate_right; loop i j' m
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | _ &amp;nbsp; &amp;nbsp; =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | S ?i' =&amp;gt; rotate_left; loop i' m m
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | _ &amp;nbsp; &amp;nbsp; =&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | _ =&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; end in
&lt;br&gt;&amp;nbsp; match goal with [ |- Permutation ?E ?F ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; let n := app_length E in
&lt;br&gt;&amp;nbsp; &amp;nbsp; let m := app_length F in
&lt;br&gt;&amp;nbsp; &amp;nbsp; loop n m m
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** Uses explicit iteration for left list as in the previous
&lt;br&gt;&amp;nbsp; &amp;nbsp; attempt, but uses pattern matching a la permut1 to try to
&lt;br&gt;&amp;nbsp; &amp;nbsp; locate a matching component in the right list. *)
&lt;br&gt;Ltac permut4 :=
&lt;br&gt;&amp;nbsp; let rec loop i &amp;nbsp;:=
&lt;br&gt;&amp;nbsp; &amp;nbsp; match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | [ |- Permutation (?C ++ ?E) ?F ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; first
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [ hiding (C ++ E) [ focus_env C ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; apply Permutation_add_front_mid
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | rotate_left ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | S ?i' =&amp;gt; loop i'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | _ &amp;nbsp; &amp;nbsp; =&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | _ =&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; end in
&lt;br&gt;&amp;nbsp; match goal with [ |- Permutation ?E _ ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; let n := app_length E in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; loop n
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** Similar to the previous attempt, but relies on type-checking failure
&lt;br&gt;&amp;nbsp; &amp;nbsp; more than explicit pattern matching. *)
&lt;br&gt;Ltac permut5 :=
&lt;br&gt;&amp;nbsp; let rec loop i :=
&lt;br&gt;&amp;nbsp; &amp;nbsp; match goal with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | [ |- Permutation ?E _ ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hiding E [ repeat rewrite &amp;lt;- app_ass ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try apply Permutation_add_front_back;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; repeat (rewrite app_ass; try apply Permutation_add_front_mid);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try apply Permutation_app_head;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | S ?i' =&amp;gt; loop i'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | _ &amp;nbsp; &amp;nbsp; =&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; | _ =&amp;gt; idtac
&lt;br&gt;&amp;nbsp; &amp;nbsp; end in
&lt;br&gt;&amp;nbsp; match goal with [ |- Permutation ?E _ ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; let n := app_length E in
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; loop n
&lt;br&gt;&amp;nbsp; end.
&lt;br&gt;&lt;br&gt;(** The previous approach taken to its logical conclusion:
&lt;br&gt;&amp;nbsp; &amp;nbsp; no explicit pattern matching. *)
&lt;br&gt;Ltac permut6 :=
&lt;br&gt;&amp;nbsp; match goal with [ |- Permutation ?E ?F ] =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; replace E with (nil ++ E ++ nil)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; by (autorewrite with simpl_list; reflexivity);
&lt;br&gt;&amp;nbsp; &amp;nbsp; replace F with (nil ++ F ++ nil)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; by (autorewrite with simpl_list; reflexivity)
&lt;br&gt;&amp;nbsp; end;
&lt;br&gt;&amp;nbsp; repeat rewrite &amp;lt;- app_ass;
&lt;br&gt;&amp;nbsp; repeat
&lt;br&gt;&amp;nbsp; &amp;nbsp; (hiding right [ rewrite app_ass ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;hiding left &amp;nbsp;[ repeat rewrite &amp;lt;- app_ass ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;repeat
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(hiding left [ rewrite app_ass ];
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; repeat apply Permutation_add_mid));
&lt;br&gt;&amp;nbsp; autorewrite with simpl_list.
&lt;br&gt;&lt;br&gt;Definition bench1 :=
&lt;br&gt;&amp;nbsp; forall S : Set,
&lt;br&gt;&amp;nbsp; forall A B C D E F G H : list S,
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (A ++ B ++ C ++ D) (E ++ F ++ A ++ G ++ H).
&lt;br&gt;&lt;br&gt;Definition bench2 :=
&lt;br&gt;&amp;nbsp; forall S : Set,
&lt;br&gt;&amp;nbsp; forall A B C D E : list S,
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (E ++ D ++ B ++ C ++ A) (A ++ B ++ C ++ D ++ A).
&lt;br&gt;&lt;br&gt;Definition bench3 :=
&lt;br&gt;&amp;nbsp; forall S : Set,
&lt;br&gt;&amp;nbsp; forall A B C D E F G H : list S,
&lt;br&gt;&amp;nbsp; &amp;nbsp; Permutation (A ++ B ++ C ++ D) (E ++ F ++ G ++ H).
&lt;br&gt;&lt;br&gt;[permut_benchmark.sh]
&lt;br&gt;&lt;br&gt;#!/bin/sh
&lt;br&gt;&lt;br&gt;src=permut_benchmark
&lt;br&gt;tmp=benchmark_tmp
&lt;br&gt;&lt;br&gt;benchs=3
&lt;br&gt;tactics=6
&lt;br&gt;&lt;br&gt;trial () {
&lt;br&gt;&amp;nbsp; iters=$1
&lt;br&gt;&amp;nbsp; bench=$2
&lt;br&gt;&amp;nbsp; tactic=$3
&lt;br&gt;&lt;br&gt;&amp;nbsp; echo &amp;quot;Require Import $src.&amp;quot; &amp;gt; $tmp.v
&lt;br&gt;&lt;br&gt;&amp;nbsp; iter=0
&lt;br&gt;&amp;nbsp; while [ $iter -lt $iters ]; do
&lt;br&gt;&amp;nbsp; &amp;nbsp; echo &amp;quot;Goal $bench. unfold $bench; intros; $tactic. Abort.&amp;quot;
&lt;br&gt;&amp;nbsp; &amp;nbsp; iter=`expr $iter + 1`
&lt;br&gt;&amp;nbsp; done &amp;gt;&amp;gt; $tmp.v
&lt;br&gt;&lt;br&gt;&amp;nbsp; echo &amp;quot;iters=$iters bench=$bench tactic=$tactic&amp;quot;
&lt;br&gt;&amp;nbsp; /usr/bin/time coqc $tmp 2&amp;gt;&amp;1
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;coqc $src
&lt;br&gt;&lt;br&gt;i=1; while [ $i -le $benchs ]; do
&lt;br&gt;&amp;nbsp; trial $1 bench$i idtac
&lt;br&gt;&lt;br&gt;&amp;nbsp; j=1; while [ $j -le $tactics ]; do
&lt;br&gt;&amp;nbsp; &amp;nbsp; trial $1 bench$i permut$j
&lt;br&gt;&amp;nbsp; &amp;nbsp; j=`expr $j + 1`
&lt;br&gt;&amp;nbsp; done
&lt;br&gt;&lt;br&gt;&amp;nbsp; i=`expr $i + 1`
&lt;br&gt;done
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Benchmarking-a-permutation-solving-tactic-tp26472869p26472869.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26472767</id>
	<title>Inductive relation is a function</title>
	<published>2009-11-21T06:58:55Z</published>
	<updated>2009-11-21T06:58:55Z</updated>
	<author>
		<name>Thomas Thüm</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;I defined an inductive relation on lists. A list of pairs may or may not be
&lt;br&gt;in relation with a list of numbers. I need to proof that the relation
&lt;br&gt;expresses a function, i.e., for a given list of pairs there is at most one
&lt;br&gt;list of numbers in the relation.
&lt;br&gt;&lt;br&gt;My function cannot be expressed using Fixpoint, since the returned list
&lt;br&gt;depends on a value [p] of type Prop:
&lt;br&gt;&lt;br&gt;Require Export List.
&lt;br&gt;&lt;br&gt;Inductive sub : list (Prop*nat) -&amp;gt; list nat -&amp;gt; Prop :=
&lt;br&gt;| s_nil : sub nil nil
&lt;br&gt;| s_cons : forall k l (p:Prop) n,
&lt;br&gt;&amp;nbsp; &amp;nbsp; sub k l -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; p -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; sub ((p,n)::k) (n::l)
&lt;br&gt;| s_nocons : forall k l (p:Prop) n,
&lt;br&gt;&amp;nbsp; &amp;nbsp; sub k l -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; ~p -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; sub ((p,n)::k) l.
&lt;br&gt;&lt;br&gt;Fact sub_unique : forall k l l',
&lt;br&gt;&amp;nbsp; &amp;nbsp; sub k l -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; sub k l' -&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; l = l'.
&lt;br&gt;&lt;br&gt;I tried induction over [k], over [l], and over [sub k l] without success.
&lt;br&gt;The reason is, that the induction hypothesis in all these cases is useless.
&lt;br&gt;How can I proof this in Coq?
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;Thomas
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Inductive-relation-is-a-function-tp26472767p26472767.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26482265</id>
	<title>ITP 2010 - Second Call for Papers</title>
	<published>2009-11-20T06:35:12Z</published>
	<updated>2009-11-20T06:35:12Z</updated>
	<author>
		<name>Matt Kaufmann</name>
	</author>
	<content type="html">&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Call for Papers
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ITP 2010: Conference on Interactive Theorem Proving
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 11-14 July 2010, Edinburgh, Scotland
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.floc-conference.org/ITP-cfp.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.floc-conference.org/ITP-cfp.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-----
&lt;br&gt;&lt;br&gt;ITP brings together researchers working in all areas of interactive
&lt;br&gt;theorem proving. &amp;nbsp;It combines the communities of two venerable
&lt;br&gt;meetings: the TPHOLs conference and the ACL2 workshop. &amp;nbsp;The inaugural
&lt;br&gt;meeting of ITP will be held on 11-14 July 2010 in Edinburgh, Scotland,
&lt;br&gt;as part of the Federated Logic Conference (FLoC, 9-21 July 2010),
&lt;br&gt;co-located with the other FLoC conferences (CAV, ICLP, IJCAR, LICS,
&lt;br&gt;RTA, SAT) and workshops.
&lt;br&gt;&lt;br&gt;The program committee welcomes submissions on all aspects of
&lt;br&gt;interactive theorem proving and its applications. &amp;nbsp;Examples of typical
&lt;br&gt;topics include formal aspects of hardware or software (specification,
&lt;br&gt;verification, semantics, synthesis, refinement, compilation, etc.);
&lt;br&gt;formalization of significant bodies of mathematics; advances in
&lt;br&gt;theorem prover technology (automation, decision procedures, induction,
&lt;br&gt;combinations of systems and tools, etc.); other topics including those
&lt;br&gt;relating to user interfaces, education, comparisons of systems, and
&lt;br&gt;mechanizable logics; and concise and elegant worked examples (&amp;quot;Proof
&lt;br&gt;Pearls&amp;quot;).
&lt;br&gt;&lt;br&gt;Submission details:
&lt;br&gt;&lt;br&gt;All papers must be submitted electronically, via EasyChair:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://www.easychair.org/conferences/?conf=itp10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.easychair.org/conferences/?conf=itp10&lt;/a&gt;&lt;br&gt;&lt;br&gt;Papers may be no longer than 16 pages and are to be submitted in PDF
&lt;br&gt;using the Springer &amp;quot;llncs&amp;quot; format. &amp;nbsp;Instructions may be found at
&lt;br&gt;ftp://ftp.springer.de/pub/tex/latex/llncs/latex2e/instruct/authors/typeinst.pdf
&lt;br&gt;with Latex source file typeinst.tex in the same directory.
&lt;br&gt;Submissions must describe original unpublished work not submitted for
&lt;br&gt;publication elsewhere, presented in a way that users of other systems
&lt;br&gt;can understand. &amp;nbsp;The proceedings will be published as a volume in the
&lt;br&gt;Lecture Notes in Computer Science series and will be available to
&lt;br&gt;participants at the conference.
&lt;br&gt;&lt;br&gt;In addition to regular submissions, described above, there will be a
&lt;br&gt;&amp;quot;rough diamonds&amp;quot; section. &amp;nbsp;Rough diamond submissions are limited to
&lt;br&gt;four pages and may consist of an extended abstract. &amp;nbsp;They will be
&lt;br&gt;refereed: they will be expected to present innovative and promising
&lt;br&gt;ideas, possibly in an early form and without supporting evidence.
&lt;br&gt;Accepted diamonds will be published in the main proceedings. &amp;nbsp;They
&lt;br&gt;will be presented at the conference venue in a poster session.
&lt;br&gt;&lt;br&gt;Authors of accepted papers are expected to present their papers at the
&lt;br&gt;conference, and will be required to sign copyright release forms. 
&lt;br&gt;All submissions must be written in English.
&lt;br&gt;&lt;br&gt;Important dates (midnight GMT):
&lt;br&gt;&lt;br&gt;&amp;nbsp;Abstract submission deadline: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 15 January 2010
&lt;br&gt;&amp;nbsp;Paper submission deadline: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;22 January 2010
&lt;br&gt;&amp;nbsp;Notification of paper decisions: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;15 March 2010
&lt;br&gt;&amp;nbsp;Camera-ready papers due from authors: &amp;nbsp; &amp;nbsp;9 April 2010
&lt;br&gt;&amp;nbsp;Conference dates: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 11-14 July 2010
&lt;br&gt;&lt;br&gt;Web page:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://www.floc-conference.org/ITP-cfp.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.floc-conference.org/ITP-cfp.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Conference co-chairs:
&lt;br&gt;&lt;br&gt;&amp;nbsp;Matt Kaufmann, University of Texas at Austin, USA
&lt;br&gt;&amp;nbsp;Larry Paulson, University of Cambridge, United Kingdom
&lt;br&gt;&lt;br&gt;Program Committee:
&lt;br&gt;&lt;br&gt;&amp;nbsp;Thorsten Altenkirch, Nottingham University, United Kingdom
&lt;br&gt;&amp;nbsp;David Aspinall, Edinburgh University, United Kingdom
&lt;br&gt;&amp;nbsp;Jeremy Avigad, Carnegie Mellon University, USA
&lt;br&gt;&amp;nbsp;Gilles Barthe, IMDEA, Spain
&lt;br&gt;&amp;nbsp;Jens Brandt, University of Kaiserslautern, Germany
&lt;br&gt;&amp;nbsp;Thierry Coquand, Chalmers University, Sweden
&lt;br&gt;&amp;nbsp;Ruben Gamboa, University of Wyoming, USA
&lt;br&gt;&amp;nbsp;Georges Gonthier, Microsoft Research, United Kingdom
&lt;br&gt;&amp;nbsp;David Greve, Rockwell Collins Inc., USA
&lt;br&gt;&amp;nbsp;Elsa Gunter, University of Illinois at Urbana-Champaign, USA
&lt;br&gt;&amp;nbsp;John Harrison, Intel Corporation, USA
&lt;br&gt;&amp;nbsp;Joe Hurd, Galois Inc., USA
&lt;br&gt;&amp;nbsp;Matt Kaufmann, University of Texas at Austin, USA
&lt;br&gt;&amp;nbsp;Gerwin Klein, NICTA, Australia
&lt;br&gt;&amp;nbsp;Xavier Leroy, INRIA, France
&lt;br&gt;&amp;nbsp;Assia Mahboubi, INRIA, France
&lt;br&gt;&amp;nbsp;Panagiotis Manolios, Northeastern University, USA
&lt;br&gt;&amp;nbsp;John Matthews, Galois Inc., USA
&lt;br&gt;&amp;nbsp;J Moore, University of Texas at Austin, USA
&lt;br&gt;&amp;nbsp;Cesar Munoz, NASA, USA
&lt;br&gt;&amp;nbsp;Tobias Nipkow, TU Muenchen, Germany
&lt;br&gt;&amp;nbsp;Michael Norrish, NICTA, Australia
&lt;br&gt;&amp;nbsp;David Pichardie, INRIA Rennes, France
&lt;br&gt;&amp;nbsp;Brigitte Pientka, McGill University, Canada
&lt;br&gt;&amp;nbsp;Lee Pike, Galois Inc., USA
&lt;br&gt;&amp;nbsp;Sandip Ray, University of Texas at Austin, USA
&lt;br&gt;&amp;nbsp;Jose Luis Ruiz-Reina, Universidad de Sevilla, Spain
&lt;br&gt;&amp;nbsp;Larry Paulson, University of Cambridge, United Kingdom
&lt;br&gt;&amp;nbsp;David Russinoff, Advanced Micro Devices Inc., USA
&lt;br&gt;&amp;nbsp;Peter Sewell, University of Cambridge, United Kingdom
&lt;br&gt;&amp;nbsp;Konrad Slind, Rockwell Collins Inc., USA
&lt;br&gt;&amp;nbsp;Sofiene Tahar, Concordia University, Canada
&lt;br&gt;&amp;nbsp;Christian Urban, TU Muenchen, Germany
&lt;br&gt;&lt;br&gt;Workshop Chair:
&lt;br&gt;&lt;br&gt;&amp;nbsp;Michael Norrish, NICTA, Australia
&lt;br&gt;&lt;br&gt;Local Arrangements:
&lt;br&gt;&lt;br&gt;&amp;nbsp;David Aspinall, Edinburgh University, United Kingdom
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/ITP-2010---Second-Call-for-Papers-tp26482265p26482265.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26425591</id>
	<title>breaking mutual induction with records</title>
	<published>2009-11-19T04:44:28Z</published>
	<updated>2009-11-19T04:44:28Z</updated>
	<author>
		<name>AUGER Cédric</name>
	</author>
	<content type="html">(** How to break induction with records **)
&lt;br&gt;(* &amp;nbsp; &amp;nbsp;I just thought of a way to have recursive records,
&lt;br&gt;&amp;nbsp; * &amp;nbsp;but I found some error, which surprises me a little bit.
&lt;br&gt;&amp;nbsp; * &amp;nbsp;I won't be surprised it is a well known error, but
&lt;br&gt;&amp;nbsp; * &amp;nbsp;as far as I remember, I didn't find it on the club list.
&lt;br&gt;&amp;nbsp; * &amp;nbsp;In fact, I think the error message should be different,
&lt;br&gt;&amp;nbsp; * &amp;nbsp;and I am not sure if it is the kernel which rejects it
&lt;br&gt;&amp;nbsp; * &amp;nbsp;or the constrinterns...
&lt;br&gt;&amp;nbsp; *)
&lt;br&gt;&lt;br&gt;&lt;br&gt;(* How to break induction with records *)
&lt;br&gt;(*
&lt;br&gt;Record unit_labelled_list_record (L : Type) := Build_list
&lt;br&gt;{ head : unit;
&lt;br&gt;&amp;nbsp; &amp;nbsp;tail : L
&lt;br&gt;}.
&lt;br&gt;*)
&lt;br&gt;Inductive unit_labelled_list_record (L : Type) :=
&lt;br&gt;&amp;nbsp; Build_list : unit -&amp;gt; L -&amp;gt; unit_labelled_list_record L.
&lt;br&gt;&lt;br&gt;Inductive unit_labelled_list :=
&lt;br&gt;| Nil : unit_labelled_list
&lt;br&gt;| Cons : unit_labelled_list_record unit_labelled_list -&amp;gt; &amp;nbsp;
&lt;br&gt;unit_labelled_list.
&lt;br&gt;&lt;br&gt;(* for trunkists *)
&lt;br&gt;(*
&lt;br&gt;Fixpoint length l :=
&lt;br&gt;match l with
&lt;br&gt;| Nil =&amp;gt; O
&lt;br&gt;| Cons {|tail := l|} =&amp;gt; S (length l)
&lt;br&gt;end.
&lt;br&gt;&lt;br&gt;Fixpoint length2 l :=
&lt;br&gt;match l with
&lt;br&gt;| Nil =&amp;gt; O
&lt;br&gt;| Cons u =&amp;gt; ulength u
&lt;br&gt;end
&lt;br&gt;with ulength u :=
&lt;br&gt;match u with
&lt;br&gt;&amp;nbsp; &amp;nbsp;{|tail := l|} =&amp;gt; S (length2 l)
&lt;br&gt;end.
&lt;br&gt;*)
&lt;br&gt;(* for standardists *)
&lt;br&gt;&lt;br&gt;Fixpoint length l :=
&lt;br&gt;match l with
&lt;br&gt;| Nil =&amp;gt; O
&lt;br&gt;| Cons (Build_list _ l) =&amp;gt; S (length l)
&lt;br&gt;end.
&lt;br&gt;&lt;br&gt;Fixpoint length2 (l : unit_labelled_list) :=
&lt;br&gt;match l with
&lt;br&gt;| Nil =&amp;gt; O
&lt;br&gt;| Cons u =&amp;gt; ulength u
&lt;br&gt;end
&lt;br&gt;with ulength (u : unit_labelled_list_record unit_labelled_list) :=
&lt;br&gt;match u with
&lt;br&gt;&amp;nbsp; &amp;nbsp;Build_list _ l =&amp;gt; S (length2 l)
&lt;br&gt;end.
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Cédric AUGER
&lt;br&gt;&lt;br&gt;Univ Paris-Sud, Laboratoire LRI, UMR 8623, F-91405, Orsay
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Match_subterm--tp26419832p26425591.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26424474</id>
	<title>Re: Match_subterm?</title>
	<published>2009-11-19T03:08:30Z</published>
	<updated>2009-11-19T03:08:30Z</updated>
	<author>
		<name>Evgeny Makarov-2</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;I don't know why Coq does not give a more descriptive message. I can 
&lt;br&gt;only show how this example can be done.
&lt;br&gt;&lt;br&gt;First, when the type of P is not specified in the goal, by default it 
&lt;br&gt;becomes A -&amp;gt; Type. So either its type should be set explicitly to A -&amp;gt; 
&lt;br&gt;Set, or egal_rec should be replaced with egal_rect.
&lt;br&gt;&lt;br&gt;It is also understandable why unification fails. egal_rect ends with (Q 
&lt;br&gt;y y0 e) (I renamed the bound variable). Before &amp;quot;apply egal_rec&amp;quot; the goal 
&lt;br&gt;is P y. These two things can only be unified through higher-order 
&lt;br&gt;unification, e.g., Q = fun x y e =&amp;gt; P x. As far as I know, Coq generally 
&lt;br&gt;needs some user hints to deal with higher-order unification.
&lt;br&gt;&lt;br&gt;The following works:
&lt;br&gt;&lt;br&gt;Goal forall (A:Set) (x y:A) P, (egal A x y) -&amp;gt; P x -&amp;gt; P y.
&lt;br&gt;intros A x y P H.
&lt;br&gt;apply egal_rect with (A := A) (P := fun (x : A) (y : A) _ =&amp;gt; P x -&amp;gt; P y).
&lt;br&gt;&lt;br&gt;The same error occurs in this example:
&lt;br&gt;&lt;br&gt;Axiom a : forall (A : Set) (Q : A -&amp;gt; A -&amp;gt; Set) (x y : A), Q x y.
&lt;br&gt;Goal forall (A : Set) (P : A -&amp;gt; Set) (x : A), P x.
&lt;br&gt;intros A P x.
&lt;br&gt;apply a.
&lt;br&gt;&lt;br&gt;This does not work, but &amp;quot;apply a with (A := A) (Q := fun (x y : A) =&amp;gt; P 
&lt;br&gt;x)&amp;quot; works.
&lt;br&gt;&lt;br&gt;Evgeny
&lt;br&gt;&lt;br&gt;Cody Roux a écrit :
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hello,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;I was playing with the following code:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Inductive egal (A:Set):A-&amp;gt;A-&amp;gt;Set:=
&lt;br&gt;&amp;gt; |reflexivite : forall x:A, egal A x x.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Goal forall (A:Set) (x y:A) P, (egal A x y) -&amp;gt;P x -&amp;gt;P y.
&lt;br&gt;&amp;gt; intros.
&lt;br&gt;&amp;gt; apply egal_rec.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; And I got the following error:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Error: Match_subterm
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Which seems a bit mysterious. What does it mean? Please note that I am
&lt;br&gt;&amp;gt; not attempting to prove the above goal, so I guess this is more like a
&lt;br&gt;&amp;gt; bug report :)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; thanks,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Cody
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; --------------------------------------------------------
&lt;br&gt;&amp;gt; Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;&amp;gt; Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;&amp;gt; Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;/div&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Match_subterm--tp26419832p26424474.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26419832</id>
	<title>Match_subterm?</title>
	<published>2009-11-18T19:25:17Z</published>
	<updated>2009-11-18T19:25:17Z</updated>
	<author>
		<name>Cody Roux</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;I was playing with the following code:
&lt;br&gt;&lt;br&gt;Inductive egal (A:Set):A-&amp;gt;A-&amp;gt;Set:=
&lt;br&gt;|reflexivite : forall x:A, egal A x x.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Goal forall (A:Set) (x y:A) P, (egal A x y) -&amp;gt;P x -&amp;gt;P y.
&lt;br&gt;intros.
&lt;br&gt;apply egal_rec.
&lt;br&gt;&lt;br&gt;And I got the following error:
&lt;br&gt;&lt;br&gt;Error: Match_subterm
&lt;br&gt;&lt;br&gt;Which seems a bit mysterious. What does it mean? Please note that I am
&lt;br&gt;not attempting to prove the above goal, so I guess this is more like a
&lt;br&gt;bug report :)
&lt;br&gt;&lt;br&gt;thanks,
&lt;br&gt;&lt;br&gt;Cody
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Match_subterm--tp26419832p26419832.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26482352</id>
	<title>Call for Participation - PEPM'10 (co-located with POPL'10)</title>
	<published>2009-11-18T09:49:47Z</published>
	<updated>2009-11-18T09:49:47Z</updated>
	<author>
		<name>Janis Voigtlaender-2</name>
	</author>
	<content type="html">===============================================================
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CALL FOR PARTICIPATION
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ACM SIGPLAN 2010 Workshop on
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Partial Evaluation and Program Manipulation (PEPM'10)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Madrid, January 18-19, 2010
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (Affiliated with POPL'10)
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://www.program-transformation.org/PEPM10&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.program-transformation.org/PEPM10&lt;/a&gt;&lt;br&gt;===============================================================
&lt;br&gt;&lt;br&gt;Abstracts of all papers and presentations are available from the
&lt;br&gt;above web site.
&lt;br&gt;&lt;br&gt;&lt;br&gt;INVITED TALKS:
&lt;br&gt;&lt;br&gt;* Lennart Augustsson (Standard Chartered Bank, UK)
&lt;br&gt;&amp;nbsp; &amp;nbsp;Title: O, Partial Evaluator, Where Art Thou?
&lt;br&gt;&lt;br&gt;* Jeremy Siek (University of Colorado at Boulder, USA)
&lt;br&gt;&amp;nbsp; &amp;nbsp;Title: General Purpose Languages Should be Metalanguages.
&lt;br&gt;&lt;br&gt;&lt;br&gt;CONTRIBUTED TALKS:
&lt;br&gt;&lt;br&gt;* Nabil el Boustani and Jurriaan Hage.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Corrective Hints for Type Incorrect Generic Java Programs.
&lt;br&gt;&lt;br&gt;* Johannes Rudolph and Peter Thiemann.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Mnemonics: Type-safe Bytecode Generation at Run Time.
&lt;br&gt;&lt;br&gt;* Elvira Albert, Miguel Gomez-Zamalloa and German Puebla.
&lt;br&gt;&amp;nbsp; &amp;nbsp;PET: A Partial Evaluation-based Test Case Generation Tool for Java 
&lt;br&gt;Bytecode.
&lt;br&gt;&lt;br&gt;* Martin Hofmann.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Igor2 - an Analytical Inductive Functional Programming System.
&lt;br&gt;&lt;br&gt;* José Pedro Magalhães, Stefan Holdermans, Johan Jeuring and Andres Löh.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Optimizing Generics Is Easy!
&lt;br&gt;&lt;br&gt;* Michele Baggi, María Alpuente, Demis Ballis and Moreno Falaschi.
&lt;br&gt;&amp;nbsp; &amp;nbsp;A Fold/Unfold Transformation Framework for Rewrite Theories extended 
&lt;br&gt;to CCT.
&lt;br&gt;&lt;br&gt;* Hugh Anderson and Siau-Cheng KHOO.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Regular Approximation and Bounded Domains for Size-Change Termination.
&lt;br&gt;&lt;br&gt;* Évelyne Contejean, Pierre Courtieu, Julien Forest, Andrei Paskevich, 
&lt;br&gt;Olivier Pons and Xavier Urbain.
&lt;br&gt;&amp;nbsp; &amp;nbsp;A3PAT, an Approach for Certified Automated Termination Proofs.
&lt;br&gt;&lt;br&gt;* Fritz Henglein.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Optimizing Relational Algebra Operations Using Generic Equivalence 
&lt;br&gt;Discriminators and Lazy Products.
&lt;br&gt;&lt;br&gt;* Adrian Riesco and Juan Rodriguez-Hortala.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Programming with Singular and Plural Non-deterministic Functions.
&lt;br&gt;&lt;br&gt;* Martin Hofmann and Emanuel Kitzelmann.
&lt;br&gt;&amp;nbsp; &amp;nbsp;I/O Guided Detection of List Catamorphisms.
&lt;br&gt;&lt;br&gt;* Andrew Moss and Dan Page.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Bridging the Gap Between Symbolic and Efficient AES Implementations.
&lt;br&gt;&lt;br&gt;* Christopher Brown and Simon Thompson.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Clone Detection and Elimination for Haskell.
&lt;br&gt;&lt;br&gt;* Stefan Holdermans and Jurriaan Hage.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Making Stricterness More Relevant.
&lt;br&gt;&lt;br&gt;* Arun Lakhotia, Davidson Boccardo, Anshuman Singh and Aleardo Manacero 
&lt;br&gt;Júnior.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Context-Sensitive Analysis of Obfuscated x86 Executables.
&lt;br&gt;&lt;br&gt;* Xin Li and Mizuhito Ogawa.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Conditional Weighted Pushdown Systems and Applications.
&lt;br&gt;&lt;br&gt;* Ivan Lazar Miljenovic.
&lt;br&gt;&amp;nbsp; &amp;nbsp;The SourceGraph Program.
&lt;br&gt;&lt;br&gt;* Florian Haftmann.
&lt;br&gt;&amp;nbsp; &amp;nbsp;From Higher-Order Logic to Haskell: There and Back Again.
&lt;br&gt;&lt;br&gt;&lt;br&gt;SPECIAL FEATURE:
&lt;br&gt;&lt;br&gt;* Andy Gill, Garrin Kimmell and Kevin Matlage.
&lt;br&gt;&amp;nbsp; &amp;nbsp;Capturing Functions and Catching Satellites.
&lt;br&gt;&lt;br&gt;&lt;br&gt;IMPORTANT DATES:
&lt;br&gt;&lt;br&gt;* Early registration deadline: December 22, 2009
&lt;br&gt;* Hotel registration deadline: December 28, 2009
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Call-for-Participation---PEPM%2710-%28co-located-with-POPL%2710%29-tp26482352p26482352.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26410810</id>
	<title>problem with xml output in 8.2</title>
	<published>2009-11-18T06:46:21Z</published>
	<updated>2009-11-18T06:46:21Z</updated>
	<author>
		<name>Benedikt.AHRENS</name>
	</author>
	<content type="html">Hello,
&lt;br&gt;&lt;br&gt;I compiled Coq 8.2pl1 from source without any errors during compilation.
&lt;br&gt;However, coqc -xml file.v does not work properly. The XML files are 
&lt;br&gt;produced without problems, but the theory file with the table of 
&lt;br&gt;contents is not:
&lt;br&gt;&lt;br&gt;ben@bigfoot:~/coq$ coqc -xml apply.v
&lt;br&gt;&lt;br&gt;Writing on file &amp;quot;/home/ben/coq/xml/apply/apply.con.xml&amp;quot; was succesful
&lt;br&gt;&lt;br&gt;Writing on file &amp;quot;/home/ben/coq/xml/apply/apply.con.body.xml&amp;quot; was succesful
&lt;br&gt;&lt;br&gt;Writing on file &amp;quot;/home/ben/coq/xml/apply/apply.con.types.xml&amp;quot; was succesful
&lt;br&gt;Warning: file /home/ben/coq/xml/apply.theory.glob cannot be used; links
&lt;br&gt;will not be available: Sys_error(&amp;quot;/home/ben/coq/xml/apply.theory.glob:
&lt;br&gt;No such file or directory&amp;quot;)
&lt;br&gt;mv: cannot stat `/home/ben/coq/xml/.*.html': No such file or directory
&lt;br&gt;Anomaly: Error executing &amp;quot;mv /home/ben/coq/xml/.*.html
&lt;br&gt;/home/ben/coq/xml/apply.theory.xml &amp;quot;.
&lt;br&gt;Please report.
&lt;br&gt;&lt;br&gt;The following files are produced during the coqc run (for the example 
&lt;br&gt;from above):
&lt;br&gt;- apply.glob
&lt;br&gt;- apply.theory.v
&lt;br&gt;- xml.apply.theory.html
&lt;br&gt;- the gzipped xml files
&lt;br&gt;&lt;br&gt;The same happens with the latest coq from SVN, and on the OS Ubuntu 
&lt;br&gt;8.04, 9.10 and - as I was told - on Mac.
&lt;br&gt;&lt;br&gt;On Coq 8.1pl5 it was reported to work.
&lt;br&gt;&lt;br&gt;What would I have to change to fix this problem?
&lt;br&gt;&lt;br&gt;Greetings
&lt;br&gt;ben
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/problem-with-xml-output-in-8.2-tp26410810p26410810.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26407606</id>
	<title>Re: more on vectors</title>
	<published>2009-11-18T05:19:29Z</published>
	<updated>2009-11-18T05:19:29Z</updated>
	<author>
		<name>Adam Chlipala-3</name>
	</author>
	<content type="html">Dimitri Hendriks wrote:
&lt;br&gt;&amp;gt; I still wonder, though, why [size] is accepted and [size'] not (see my 
&lt;br&gt;&amp;gt; previous mail).
&lt;br&gt;&lt;br&gt;Coq uses a pretty primitive termination-checking algorithm. It has 
&lt;br&gt;special-case handling of nested inductive types, which you used for 
&lt;br&gt;[size] but not [size'].
&lt;br&gt;&lt;br&gt;&amp;gt; It seems hard (again risking to be refuted within 20 minutes :) to 
&lt;br&gt;&amp;gt; destruct an object of type [Fin (S n)]. Instead we have to use 
&lt;br&gt;&amp;gt; inversion / complicated return types.
&lt;br&gt;&lt;br&gt;Well, it's taken more than 20 minutes, but only because of how early you 
&lt;br&gt;posted the question, in my time zone. ;) Here's a simple way to define 
&lt;br&gt;what you want.
&lt;br&gt;&lt;br&gt;Definition vcons (x : A) n (v : vector n) : vector (S n) :=
&lt;br&gt;fun i =&amp;gt;
&lt;br&gt;match i in Fin Sn return match Sn with
&lt;br&gt;| O =&amp;gt; Empty_set
&lt;br&gt;| S n =&amp;gt; vector n -&amp;gt; A
&lt;br&gt;end with
&lt;br&gt;| First _ =&amp;gt; fun _ =&amp;gt; x
&lt;br&gt;| Next _ i' =&amp;gt; fun v =&amp;gt; v i'
&lt;br&gt;end v.
&lt;br&gt;&lt;br&gt;My answer to your more general question of how to choose dependent 
&lt;br&gt;datatype encodings can be found at the end of the chapter on &amp;quot;Dependent 
&lt;br&gt;Data Structures&amp;quot; in my draft textbook:
&lt;br&gt;&lt;a href=&quot;http://adam.chlipala.net/cpdt/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://adam.chlipala.net/cpdt/&lt;/a&gt;&lt;br&gt;The design patterns I've been using in this list thread are also covered 
&lt;br&gt;in that chapter and elsewhere in the book.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/guardedness-hidden-by-induction-tp26372905p26407606.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26407100</id>
	<title>Re: more on vectors (was: guardedness hidden by induction)</title>
	<published>2009-11-18T04:43:39Z</published>
	<updated>2009-11-18T04:43:39Z</updated>
	<author>
		<name>muad</name>
	</author>
	<content type="html">&lt;br&gt;&lt;blockquote class=&quot;quote light-black dark-border-color&quot;&gt;&lt;div class=&quot;quote light-border-color&quot;&gt;
&lt;div class=&quot;quote-author&quot; style=&quot;font-weight: bold;&quot;&gt;Dimitri Hendriks-2 wrote:&lt;/div&gt;
&lt;div class=&quot;quote-message shrinkable-quote&quot;&gt;Thanks again Adam!
&lt;br&gt;&lt;br&gt;Indeed, a little reorganization, and fold is defined just like that. I &amp;nbsp;
&lt;br&gt;am impressed by the simplicity of the use of this representation of &amp;nbsp;
&lt;br&gt;vectors, as opposed to the one of the standard library. I still &amp;nbsp;
&lt;br&gt;wonder, though, why [size] is accepted and [size'] not (see my &amp;nbsp;
&lt;br&gt;previous mail).
&lt;br&gt;&lt;br&gt;It seems hard (again risking to be refuted within 20 minutes :) to &amp;nbsp;
&lt;br&gt;destruct an object of type [Fin (S n)]. Instead we have to use &amp;nbsp;
&lt;br&gt;inversion / complicated return types.
&lt;br&gt;&lt;br&gt;If, instead of the inductive definition, we define [Fin2 n] as the sum &amp;nbsp;
&lt;br&gt;[unit + ... + unit + empty], we have the advantage that the type [Fin2 &amp;nbsp;
&lt;br&gt;(S n)] reduces to [unit + Fin2 n], and an object of that type is easy &amp;nbsp;
&lt;br&gt;to destruct.
&lt;br&gt;&lt;br&gt;As an example, below you find two versions of prepending an element to &amp;nbsp;
&lt;br&gt;a vector: [vcons] and [vcons2] for both versions of vectors.
&lt;br&gt;&lt;br&gt;Do you agree that [Fin2] is easier to work with than [Fin] ?
&lt;br&gt;&lt;br&gt;Best,
&lt;br&gt;Dimitri
&lt;br&gt;&lt;br&gt;Inductive empty : Set := .
&lt;br&gt;&lt;br&gt;Inductive Fin : nat -&amp;gt; Type :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;| First : forall n, Fin (S n)
&lt;br&gt;&amp;nbsp; &amp;nbsp;| Next &amp;nbsp;: forall n, Fin n -&amp;gt; Fin (S n).
&lt;br&gt;&lt;br&gt;Fixpoint Fin2 (n : nat) : Type :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;match n with
&lt;br&gt;&amp;nbsp; &amp;nbsp;| O &amp;nbsp; =&amp;gt; empty
&lt;br&gt;&amp;nbsp; &amp;nbsp;| S n =&amp;gt; (unit + Fin2 n) % type
&lt;br&gt;&amp;nbsp; &amp;nbsp;end.
&lt;br&gt;&lt;br&gt;Section vectors.
&lt;br&gt;&lt;br&gt;Variable A : Type.
&lt;br&gt;&lt;br&gt;Definition vector (n : nat) := Fin n -&amp;gt; A.
&lt;br&gt;&lt;br&gt;Definition vector2 (n : nat) := Fin2 n -&amp;gt; A.
&lt;br&gt;&lt;br&gt;Definition vnil : vector 0.
&lt;br&gt;intro i; inversion i.
&lt;br&gt;Defined.
&lt;br&gt;&lt;br&gt;Definition vnil2 : vector2 0 :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;fun e =&amp;gt; match e with end.
&lt;br&gt;&lt;br&gt;(*
&lt;br&gt;Definition vcons : A -&amp;gt; forall n, vector n -&amp;gt; vector (S n).
&lt;br&gt;intros a [|n]; intros v i.
&lt;br&gt;exact a.
&lt;br&gt;inversion_clear i as [| n' i' H].
&lt;br&gt;exact a.
&lt;br&gt;exact (v i').
&lt;br&gt;Defined.
&lt;br&gt;&lt;br&gt;Print vcons.
&lt;br&gt;*)
&lt;br&gt;&lt;br&gt;Definition vcons : A -&amp;gt; forall n, vector n -&amp;gt; vector (S n) :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;fun a n =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;match n return vector n -&amp;gt; vector (S n) with
&lt;br&gt;&amp;nbsp; &amp;nbsp;| O &amp;nbsp; =&amp;gt; fun _ _ =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp;| S n =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fun (v : vector (S n)) (i : Fin (S (S n))) =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let X :=
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;match i in Fin m return S (S n) = m -&amp;gt; A with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| First _ &amp;nbsp; =&amp;gt; fun _ =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Next m i' =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fun (H : S (S n) = S m) =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eq_rect (S n) (fun n1 =&amp;gt; Fin n1 -&amp;gt; A) v m
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(f_equal (fun e =&amp;gt; match e with 0 =&amp;gt; m | S n1 =&amp;gt; n1 &amp;nbsp;
&lt;br&gt;end) H) i'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;in X (refl_equal (S (S n)))
&lt;br&gt;&amp;nbsp; &amp;nbsp;end.
&lt;br&gt;&lt;br&gt;Definition vcons2 : A -&amp;gt; forall n, vector2 n -&amp;gt; vector2 (S n) :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;fun a n v i =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp;| inl tt =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp;| inr i' =&amp;gt; v i'
&lt;br&gt;&amp;nbsp; &amp;nbsp;end.
&lt;br&gt;&lt;br&gt;End vectors.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/blockquote&gt;
I was just thinking that it might be nice to reuse the old code by making use of the isomorphism between the inductive and the recursive definitions of vector, but actually it's not really possible to say that v1 = v2 for the recursive case, we need to use forall i, v1 i = v2 i (So it's really some kind of setoid) and having to prove things respect that equality might be more trouble than it's worth.. then again it might not? I'm not sure but maybe someone could shed some light on it?
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/guardedness-hidden-by-induction-tp26372905p26407100.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26405923</id>
	<title>Re: more on vectors (was: guardedness hidden by induction)</title>
	<published>2009-11-18T02:56:36Z</published>
	<updated>2009-11-18T02:56:36Z</updated>
	<author>
		<name>Dimitri Hendriks-2</name>
	</author>
	<content type="html">Thanks again Adam!
&lt;br&gt;&lt;br&gt;Indeed, a little reorganization, and fold is defined just like that. I &amp;nbsp;
&lt;br&gt;am impressed by the simplicity of the use of this representation of &amp;nbsp;
&lt;br&gt;vectors, as opposed to the one of the standard library. I still &amp;nbsp;
&lt;br&gt;wonder, though, why [size] is accepted and [size'] not (see my &amp;nbsp;
&lt;br&gt;previous mail).
&lt;br&gt;&lt;br&gt;It seems hard (again risking to be refuted within 20 minutes :) to &amp;nbsp;
&lt;br&gt;destruct an object of type [Fin (S n)]. Instead we have to use &amp;nbsp;
&lt;br&gt;inversion / complicated return types.
&lt;br&gt;&lt;br&gt;If, instead of the inductive definition, we define [Fin2 n] as the sum &amp;nbsp;
&lt;br&gt;[unit + ... + unit + empty], we have the advantage that the type [Fin2 &amp;nbsp;
&lt;br&gt;(S n)] reduces to [unit + Fin2 n], and an object of that type is easy &amp;nbsp;
&lt;br&gt;to destruct.
&lt;br&gt;&lt;br&gt;As an example, below you find two versions of prepending an element to &amp;nbsp;
&lt;br&gt;a vector: [vcons] and [vcons2] for both versions of vectors.
&lt;br&gt;&lt;br&gt;Do you agree that [Fin2] is easier to work with than [Fin] ?
&lt;br&gt;&lt;br&gt;Best,
&lt;br&gt;Dimitri
&lt;br&gt;&lt;br&gt;Inductive empty : Set := .
&lt;br&gt;&lt;br&gt;Inductive Fin : nat -&amp;gt; Type :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;| First : forall n, Fin (S n)
&lt;br&gt;&amp;nbsp; &amp;nbsp;| Next &amp;nbsp;: forall n, Fin n -&amp;gt; Fin (S n).
&lt;br&gt;&lt;br&gt;Fixpoint Fin2 (n : nat) : Type :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;match n with
&lt;br&gt;&amp;nbsp; &amp;nbsp;| O &amp;nbsp; =&amp;gt; empty
&lt;br&gt;&amp;nbsp; &amp;nbsp;| S n =&amp;gt; (unit + Fin2 n) % type
&lt;br&gt;&amp;nbsp; &amp;nbsp;end.
&lt;br&gt;&lt;br&gt;Section vectors.
&lt;br&gt;&lt;br&gt;Variable A : Type.
&lt;br&gt;&lt;br&gt;Definition vector (n : nat) := Fin n -&amp;gt; A.
&lt;br&gt;&lt;br&gt;Definition vector2 (n : nat) := Fin2 n -&amp;gt; A.
&lt;br&gt;&lt;br&gt;Definition vnil : vector 0.
&lt;br&gt;intro i; inversion i.
&lt;br&gt;Defined.
&lt;br&gt;&lt;br&gt;Definition vnil2 : vector2 0 :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;fun e =&amp;gt; match e with end.
&lt;br&gt;&lt;br&gt;(*
&lt;br&gt;Definition vcons : A -&amp;gt; forall n, vector n -&amp;gt; vector (S n).
&lt;br&gt;intros a [|n]; intros v i.
&lt;br&gt;exact a.
&lt;br&gt;inversion_clear i as [| n' i' H].
&lt;br&gt;exact a.
&lt;br&gt;exact (v i').
&lt;br&gt;Defined.
&lt;br&gt;&lt;br&gt;Print vcons.
&lt;br&gt;*)
&lt;br&gt;&lt;br&gt;Definition vcons : A -&amp;gt; forall n, vector n -&amp;gt; vector (S n) :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;fun a n =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;match n return vector n -&amp;gt; vector (S n) with
&lt;br&gt;&amp;nbsp; &amp;nbsp;| O &amp;nbsp; =&amp;gt; fun _ _ =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp;| S n =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fun (v : vector (S n)) (i : Fin (S (S n))) =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;let X :=
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;match i in Fin m return S (S n) = m -&amp;gt; A with
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| First _ &amp;nbsp; =&amp;gt; fun _ =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Next m i' =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fun (H : S (S n) = S m) =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;eq_rect (S n) (fun n1 =&amp;gt; Fin n1 -&amp;gt; A) v m
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(f_equal (fun e =&amp;gt; match e with 0 =&amp;gt; m | S n1 =&amp;gt; n1 &amp;nbsp;
&lt;br&gt;end) H) i'
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;in X (refl_equal (S (S n)))
&lt;br&gt;&amp;nbsp; &amp;nbsp;end.
&lt;br&gt;&lt;br&gt;Definition vcons2 : A -&amp;gt; forall n, vector2 n -&amp;gt; vector2 (S n) :=
&lt;br&gt;&amp;nbsp; &amp;nbsp;fun a n v i =&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;match i with
&lt;br&gt;&amp;nbsp; &amp;nbsp;| inl tt =&amp;gt; a
&lt;br&gt;&amp;nbsp; &amp;nbsp;| inr i' =&amp;gt; v i'
&lt;br&gt;&amp;nbsp; &amp;nbsp;end.
&lt;br&gt;&lt;br&gt;End vectors.
&lt;br&gt;&lt;br&gt;--------------------------------------------------------
&lt;br&gt;Bug reports: &lt;a href=&quot;http://logical.saclay.inria.fr/coq-bugs&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://logical.saclay.inria.fr/coq-bugs&lt;/a&gt;&lt;br&gt;Archives: &lt;a href=&quot;http://pauillac.inria.fr/pipermail/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/pipermail/coq-club&lt;/a&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://pauillac.inria.fr/bin/wilma/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/bin/wilma/coq-club&lt;/a&gt;&lt;br&gt;Info: &lt;a href=&quot;http://pauillac.inria.fr/mailman/listinfo/coq-club&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://pauillac.inria.fr/mailman/listinfo/coq-club&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/guardedness-hidden-by-induction-tp26372905p26405923.html" />
</entry>

</feed>
