]> matita.cs.unibo.it Git - helm.git/commit
Delift used to produce not well typed substitutions. In turn, this
authorClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Wed, 1 Jun 2011 16:36:13 +0000 (16:36 +0000)
committerClaudio Sacerdoti Coen <claudio.sacerdoticoen@unibo.it>
Wed, 1 Jun 2011 16:36:13 +0000 (16:36 +0000)
commit7aeec317f639936095e10f88cc0b2710262082d0
tree0731bcbbb0c8d9829e7037ccac327ded70fcae78
parente28e86e04bb5b8b98f5e2f86555347a280c49983
Delift used to produce not well typed substitutions. In turn, this
led to tactics that were not failing immediately, but only at Qed.

Fixed by adding the appropriate check to the delift function.

Note:
 - pass the metavariable number (-1) to avoid the check when you know what
   you are doing (e.g. when delift is just used to restrict a term or to
   replace a term with a convertible one). This used to be 0 (not -1).
 - in some cases (algebraic universes and implicits used to stop chains of
   metavariables) the check is relaxed
 - to make the CerCo script pass (in very "reasonable" and "frequent" cases),
   the algorithm needs to solve the following unification problem:
     S (?[n]) == ?[(S n)]
   Our algorithm used to delift S(?[n]) w.r.t. (S n), yielding x |- ? := x.
   By chance, this was the right solution since S (?[n]) becomes (S n) and
   also ?[(S n)] becomes (S n). However, the two solutions were both added
   to the subst (first bug) and they could even be different (second bug).
   We fix this by checking that they are not different.
   However, at the moment, the solution still occurs twice in the subst....
matita/components/ng_refiner/nCicMetaSubst.ml
matita/components/ng_refiner/nCicRefiner.ml
matita/components/ng_refiner/nCicUnification.ml
matita/components/ng_tactics/nTacStatus.ml