Je testais Coq réécriture tactiques modulo associativité et commutativité (aac_tactics
). L'exemple suivant fonctionne pour entier (Z
), mais génère une erreur lorsque les entiers sont remplacés par rationnels (Q
).réécriture fonctionne pour nombre entier mais pas pour rationnel pour Coq aac_tactics
Require Import ZArith.
Import Instances.Z.
Goal (forall x:Z, x + (-x) = 0)
-> forall a b c:Z, a + b + c + (-(c+a)) = b.
intros H ? ? ?.
aac_rewrite H.
Lors du remplacement Require Import ZArith.
avec Require Import QArith.
etc., il y a une erreur:
Error: Tactic failure: No matching occurence modulo AC found.
à aac_rewrite H.
Il y avait un problème d'incohérence semblable entre Z
et Q
, qui se est avéré être lié si l'étendue Z
/Q
est ouverte.
Mais je ne comprends pas pourquoi la réécriture d'aac n'a pas fonctionné ici. Quelle est la cause de l'incohérence, et comment peut-on le faire se comporter de la même manière pour Z
et Q
?