<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coq/test-suite/ideal-features/complexity, branch master</title>
<subtitle>The formal proof system</subtitle>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/'/>
<entry>
<title>Moving bug numbers to BZ# format in the test-suite.</title>
<updated>2017-10-19T14:11:49+00:00</updated>
<author>
<name>Théo Zimmermann</name>
</author>
<published>2017-10-19T14:04:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=fb1478d2cd59991e8d2fc2e07dacad505ef110b7'/>
<id>fb1478d2cd59991e8d2fc2e07dacad505ef110b7</id>
<content type='text'>
Compared to the original proposition (59a594b in #960), this commit
only changes files containing bug numbers that are also PR numbers.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Compared to the original proposition (59a594b in #960), this commit
only changes files containing bug numbers that are also PR numbers.
</pre>
</div>
</content>
</entry>
<entry>
<title>Delete trailing whitespaces in all *.{v,ml*} files</title>
<updated>2009-09-17T15:58:14+00:00</updated>
<author>
<name>glondu</name>
</author>
<published>2009-09-17T15:58:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=61ccbc81a2f3b4662ed4a2bad9d07d2003dda3a2'/>
<id>61ccbc81a2f3b4662ed4a2bad9d07d2003dda3a2</id>
<content type='text'>
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12337 85f007b7-540e-0410-9357-904b9bb8a0f7
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12337 85f007b7-540e-0410-9357-904b9bb8a0f7
</pre>
</div>
</content>
</entry>
<entry>
<title>Mise en place d'un algorithme d'inversion des contraintes de type lors</title>
<updated>2008-05-05T13:55:24+00:00</updated>
<author>
<name>herbelin</name>
</author>
<published>2008-05-05T13:55:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.0x7felf.com/coq/commit/?id=af8e8176a6ca63c59621e4775d50faf51627b4cc'/>
<id>af8e8176a6ca63c59621e4775d50faf51627b4cc</id>
<content type='text'>
du filtrage. Cela permet de détecter les cas impossibles et de simuler
les contraintes d'inversion exprimables sous la forme d'un assignement
des arguments du constructeurs (cf le cas de Vtail dans Bvector.v).

Si l'on filtre sur t:I u1 .. un, et que chaque ui a la forme vi(wi)
avec vi composé uniquement de constructeurs, et que le résultat final
est P(w1,...,wn) (qui est éventuellement lui-même une evar) alors on
construit le prédicat

Q:=fun x1 .. xn y =&gt;
   match x1    .. xn    y with
   |     v1(z) .. vn(z) t =&gt; P(z)       
   |     _     .. _     _ =&gt; ?evar-speciale-cas-impossible
   end

qui vérifiera bien que Q u1 .. un = P(w1,..,wp).

En raison de limitations de l'unification (on aurait besoin d'eta
conversion pour résoudre des problèmes du genre 
"terme rigide == match x with _ =&gt; ?evar end", et besoin d'instanciation par
constructeurs pour des cas comme "A(y) = match ?evar with C x =&gt; A(x) end"),
je n'ai pas réussi à traiter le cas général.

Aussi, on adopte une stratégie pragmatique consistant à tester
plusieurs prédicats possibles :
- si un type final est donné, on essaie d'abord l'algorithme de
  Matthieu et sinon le nouvel algorithme (permet par exemple de traiter
  certains cas d'élimination dépendante de Bvector.v),
- s'il n'y a pas de type final, on essaie d'abord le nouvel algo et
  sinon, on essaie avec un prédicat sans dépendance (permet de traiter 
  des cas compliqués comme celui de par cas sur I' dans le fichier
  Case13.v de la test-suite).

Dans la pratique, il y a beaucoup de changement dans le code de compile_case.
- Par exemple, la compilation est maintenant toujours appelé avec un
  prédicat (là où l'on pouvait avoir None, on a maintenant toujours au
  moins une evar).
- En revanche, le membre droit des clauses est maintenant
  optionnel. Si c'est None, c'est qu'on se trouve dans le cas d'une
  branche impossible au moment du calcul du prédicat de retour.
- Aussi, on renonce aux PrLetIn et PrProd dans l'expression du
  predicat de retour mais il faut savoir que c'est maintenant la liste
  des tomatchs qui spécifie le contexte exact dans lequel le prédicat
  de retour est bien typé.
- Et d'autres...



git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10883 85f007b7-540e-0410-9357-904b9bb8a0f7
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
du filtrage. Cela permet de détecter les cas impossibles et de simuler
les contraintes d'inversion exprimables sous la forme d'un assignement
des arguments du constructeurs (cf le cas de Vtail dans Bvector.v).

Si l'on filtre sur t:I u1 .. un, et que chaque ui a la forme vi(wi)
avec vi composé uniquement de constructeurs, et que le résultat final
est P(w1,...,wn) (qui est éventuellement lui-même une evar) alors on
construit le prédicat

Q:=fun x1 .. xn y =&gt;
   match x1    .. xn    y with
   |     v1(z) .. vn(z) t =&gt; P(z)       
   |     _     .. _     _ =&gt; ?evar-speciale-cas-impossible
   end

qui vérifiera bien que Q u1 .. un = P(w1,..,wp).

En raison de limitations de l'unification (on aurait besoin d'eta
conversion pour résoudre des problèmes du genre 
"terme rigide == match x with _ =&gt; ?evar end", et besoin d'instanciation par
constructeurs pour des cas comme "A(y) = match ?evar with C x =&gt; A(x) end"),
je n'ai pas réussi à traiter le cas général.

Aussi, on adopte une stratégie pragmatique consistant à tester
plusieurs prédicats possibles :
- si un type final est donné, on essaie d'abord l'algorithme de
  Matthieu et sinon le nouvel algorithme (permet par exemple de traiter
  certains cas d'élimination dépendante de Bvector.v),
- s'il n'y a pas de type final, on essaie d'abord le nouvel algo et
  sinon, on essaie avec un prédicat sans dépendance (permet de traiter 
  des cas compliqués comme celui de par cas sur I' dans le fichier
  Case13.v de la test-suite).

Dans la pratique, il y a beaucoup de changement dans le code de compile_case.
- Par exemple, la compilation est maintenant toujours appelé avec un
  prédicat (là où l'on pouvait avoir None, on a maintenant toujours au
  moins une evar).
- En revanche, le membre droit des clauses est maintenant
  optionnel. Si c'est None, c'est qu'on se trouve dans le cas d'une
  branche impossible au moment du calcul du prédicat de retour.
- Aussi, on renonce aux PrLetIn et PrProd dans l'expression du
  predicat de retour mais il faut savoir que c'est maintenant la liste
  des tomatchs qui spécifie le contexte exact dans lequel le prédicat
  de retour est bien typé.
- Et d'autres...



git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10883 85f007b7-540e-0410-9357-904b9bb8a0f7
</pre>
</div>
</content>
</entry>
</feed>
