19.7 History of Ring
19.7 History of Ring
First Samuel Boutin designed the tactic ACDSimpl.
This tactic did intensive use of rewriting. But the proofs
terms generated by rewriting are big and the proof-checker of Coqexplodes on big examples of ACDSimpl, even on a fast
workstation with a big amount of RAM. Let us see why:
Coq < Goal (x,y,z:Z)`x + 3 + y + y*z = x + 3 + y + z*y`.
1 subgoal
============================
(x,y,z:Z)`x+3+y+y*z = x+3+y+z*y`
Coq < Intros; Rewrite (Zmult_sym y z); Reflexivity.
Coq < Save toto.
Coq < Print toto.
toto =
[x,y,z:Z]
(eq_ind_r Z `z*y` [z0:Z]`x+3+y+z0 = x+3+y+z*y`
(refl_equal Z `x+3+y+z*y`) `y*z` (Zmult_sym y z))
: (x,y,z:Z)`x+3+y+y*z = x+3+y+z*y`
At each step of rewriting, the whole context is copied in the proof
term. So tactics that do hundreds of rewriting generate huge proof
terms. Since ACDSimpl was too slow, Samuel Boutin rewrite it
using reflexion. Later, the stuff was completely rewritten by Patrick
Loiseleur: the new tactic does not any more require ACDSimpl
to compile and it integrates the notion of constants. He also writes a
few ML code for the Add Ring command, that allow to register
new rings dynamically.
Poofs terms
generated by Ring are quite small, they are linear in the number
of Å and Ä operations in the normalized terms.
Type-checking those terms requires certain time because it
makes a large use of the conversion rule, but
memory requirements are much smaller.
Retrieved by Memoweb from http://pauillac.inria.fr/coq/doc/node.3.8.6.html at 8/10/98