Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] unable to set up rewriting upto mod equivalence

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] unable to set up rewriting upto mod equivalence


Chronological Thread 
  • From: Cao Qinxiang <caoqinxiang AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] unable to set up rewriting upto mod equivalence
  • Date: Wed, 6 Nov 2019 00:46:29 +0800
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=caoqinxiang AT gmail.com; spf=Pass smtp.mailfrom=caoqinxiang AT gmail.com; spf=None smtp.helo=postmaster AT mail-ot1-f50.google.com
  • Ironport-phdr: 9a23:JHNVqhK3Few348UmLdmcpTZWNBhigK39O0sv0rFitYgRL/zxwZ3uMQTl6Ol3ixeRBMOHsqkC0rOL+PG5EUU7or+5+EgYd5JNUxJXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCezbL9oMRm6sAXcusYSjId/N6081gbHrnxUdupM2GhmP0iTnxHy5sex+J5s7SFdsO8/+sBDTKv3Yb02QaRXAzo6PW814tbrtQTYQguU+nQcSGQWnQFWDAXD8Rr3Q43+sir+tup6xSmaIcj7Rq06VDi+86tmTgLjhSEaPDA77W7XkNR9g61VoB2jpxJxzY3abpyLOvViZa7SZ88WSHBbU8pNSyBMAIWxZJYPAeobOuZYqpHwqkUUohu5GAKiH+LvyjlHh3/3x6I61eshGhzB0QM8Bd0Ot23UrNTzNKYdUOC61q/IzTrYYvNZ3Dfy8onIchQ7rf6QWrJwdNPcxE8yHA3LiVWQrJbqPzKT1ukVr2eb6PBgVeSxhG4jrwF9uCagydoxioTPm4kbyUjE+D1nzIopIdC0Uk12bN6+HJdOqi2WK5F6T8M+T2xupS000KcJuYShcygP0JknxwDQa/iAc4WQ5xLsTueRITNhiHJiZLKzmg++8Uagx+HgTMW031FKri1KktnIqH8BzQDc6s+CSvdl/0eh3yiA1xzL5+1aPUw5kbDXJp0hz7IqiJYfrFjPEjX2lUnqlKOWc18r+ums6+TpeLXmoZqcOpdohQ7kNaQug82/AeI3MwgPRWeb/+u82abs/U38WrpKj/k2nrPFv5DdIMQXvrS5DBNN0oY/9xa/CC+r38gfnXkeNV5KZBaHj5XyNFzVO/D5DfK/g0y2nztxxvDGOKfhApTXIXTZnrfhZ+U110kJww0qiNtb+ph8C7cbIfu1VFWimsbfC0oSOgv8+ufhGNR00IxWDWmGBbaYNrPTuFmHzu0qKuiIIoQSvWCueLAe+/fygCphyhcmdq6z0M5PMS3qLrFdO0ycJEHUrJIBHGMN5FdsSeXrjBiFTWcWaSvqGa074T4/BcStCoKRHtn80ozE5z+yG9htXk4DD1mNFXnycIDdAqUDbSuTJolqlTlWDOH9Gb9k7gmnsUrB85QiNvDdo3RKupfq1dwz7OrWx0k/

Dear Abhishek,

If rewrite (modEq0 d), it is to replace "d" in : "(fun d0 => modEq d0 (d0 + a - b) ?1) d", which cannot succeed.

Best,

Qinxiang Cao
Shanghai Jiao Tong University, John Hopcroft Center
Room 1110-2, SJTUSE Building
800 Dongchuan Road, Shanghai, China, 200240



On Tue, Nov 5, 2019 at 11:27 PM Abhishek Anand <abhishek.anand.iitg AT gmail.com> wrote:
Thanks. That worked. 
Is it a bug that  `rewrite (modEq0 d) at 2` succeeds but `rewrite (modEq0 d)` doesn't? I thought the "at ..." suffix was used to prevent rewriting at unneeded places, not to make the rewrite succeed.

On Mon, Nov 4, 2019 at 10:30 PM Cao Qinxiang <caoqinxiang AT gmail.com> wrote:
The following line should work:

rewrite (modEq0 d) at 2.

Qinxiang Cao
Shanghai Jiao Tong University, John Hopcroft Center
Room 1110-2, SJTUSE Building
800 Dongchuan Road, Shanghai, China, 200240



On Tue, Nov 5, 2019 at 1:32 PM Abhishek Anand <abhishek.anand.iitg AT gmail.com> wrote:
I tried to set up rewriting up to mod equivalence (see modEq below).
`rewrite` does not seem to work in the last lemma below even though I can prove it manually using only the declared instances.

Require Import ZArith.
Open Scope Z_scope.
Require Import Morphisms.
Definition modEq (d:Z) := fun (a b :Z)=> a mod d = b mod d.

Global Instance modProperAdd (d:Z) :
  Proper ((modEq d) ==> (modEq d) ==>(modEq d)) Z.add.
Proof using.
  intros a b Hx e f Hy.
  unfold modEq in *.
  rewrite Zplus_mod.
  symmetry.
  rewrite Zplus_mod.
  f_equal.
  congruence.
Qed.

Global Instance modProperSub (d:Z) :
  Proper ((modEq d) ==> (modEq d) ==>(modEq d)) Z.sub.
Proof using.
  intros a b Hx e f Hy.
  unfold modEq in *.
  rewrite Zminus_mod.
  symmetry.
  rewrite Zminus_mod.
  f_equal.
  congruence.
Qed.

Lemma modEqRw (d a b:Z) :
  modEq d a b -> a mod d = b mod d.
Proof using.
  tauto.
Qed.

Global Instance modEqR (d:Z): Reflexive (modEq d).
Proof using.
  hnf. intros. unfold modEq in *. congruence.
Qed.
Global Instance modEqS (d:Z): Symmetric (modEq d).
Proof using.
  hnf. intros. unfold modEq in *. congruence.
Qed.
Global Instance modEqT (d:Z): Transitive (modEq d).
Proof using.
  hnf. intros. unfold modEq in *. congruence.
Qed.

Lemma modEq0 (d:Z): modEq d d 0.
Proof using.
  hnf. rewrite Z_mod_same_full.
  reflexivity.
Qed.

Global Instance modProperOpp (d:Z) :
  Proper ((modEq d) ==> (modEq d)) Z.opp.
Admitted.

Lemma rwTest (d a b:Z):
  (d+a-b) mod d  = (a-b) mod d.
Proof using.
  erewrite modEqRw.
  2:{
    Fail rewrite modEq0. (* help! why does this fail? *)
    apply modProperAdd;[ | reflexivity].
    apply modProperAdd;[ | reflexivity].
    apply modEq0.
  }
  reflexivity.
Qed.    


Thanks.



Archive powered by MHonArc 2.6.18.

Top of Page