coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Abhishek Anand <abhishek.anand.iitg AT gmail.com>
- To: coq-club <coq-club AT inria.fr>
- Subject: [Coq-Club] unable to set up rewriting upto mod equivalence
- Date: Mon, 4 Nov 2019 21:31:26 -0800
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=abhishek.anand.iitg AT gmail.com; spf=Pass smtp.mailfrom=abhishek.anand.iitg AT gmail.com; spf=None smtp.helo=postmaster AT mail-io1-f52.google.com
- Ironport-phdr: 9a23:M/JQJxXv+B5+YSdtJu8D2GTy9nnV8LGtZVwlr6E/grcLSJyIuqrYbBSEt8tkgFKBZ4jH8fUM07OQ7/m7HzVZvd3R6zgrS99lb1c9k8IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUhrwOhBoKevrB4Xck9q41/yo+53Ufg5EmCexbal9IRmrowjdrNQajZZtJ6o+yRbErGZDdvhLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PWwt68LlqRfMTQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WSin4qx2RhLklDsLOjgk+2zRl8d+jr9UoAi5qhNww4DaboKbOudgcKzBZt4VX3ZNU9xLWiBdHo+xbY0CBPcBM+ZCqIn9okMDoAelCgmsBePv0T9IiWH13aYnz+khFxvJ3Ao9ENkTt3nbts76NKcTUeCuzKnH0zbDY+lM1jf78ofIdA0ureuNXbJxbcrRxlIiFwzAjlqKqIzlOymZ2fgKs2ie9udtU/+khWAgqwF0uDevx8Esh5HViYIS0FDE8zt2wIIxJdGiVkF0fMOkHZ1NvC+ZL4t7Wt0uT31stSogybALuYS3cDULxZkm3RLSa+KLfo6V6Rz5TumROy13hHd9dbK/mRmy9U+gx/X5Vsau0VZKqjNJktjLtnwQzhDT5MiKRuVn8keu3jaP0A/T6uVaLkwuiaXbLJshzqYxlpoVr0vDAjf7lFvqgKKSbEkp+eil5/76brjnp5KQLY95hh/mPqQrgMO/AOA4MgYUX2ic/OSxzKfs8lb5QLVLlf02krfWsJPAKcsBoK62GQlV3Zs55xa+DjemzNsYkGIILFJAYh2HjozpN0vSL/D/CPezm06snytzx/DaIr3hBY3AIWTEkLf4ZLpy90pcyBcowt1E/JJVCrQBIOrpVUPrtdzYCAU5Mw2uzOr9BtV9zNBWZWXaCaiAdajWrFXAsukoOqyHYJIfkDf7MfksofD02ywXg1gYKICj3ZoMaH27Vt1gKkOVKS7liNcACmcHvUw3SuXshBuDUCJcT3m3VqM4oDo8DdT1Xs/4WomxjenZj2+AFZpMazUeUwHeITLTb4yBHsw0RmeXK85lnCYDUOH4GYAk3BCq8gT9zug+d7eGymgjrZvmkeNNyajTmBU1r2EmCs2c1ySMSDgxkD5SATAx2697rAp2zVLRifEk0cwdLsRa4rZyail/LYTVlrUoBNX7WwaHddCMGg6r
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.
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.
-- Abhishek
http://www.cs.cornell.edu/~aa755/- [Coq-Club] unable to set up rewriting upto mod equivalence, Abhishek Anand, 11/05/2019
- Re: [Coq-Club] unable to set up rewriting upto mod equivalence, Cao Qinxiang, 11/05/2019
- Re: [Coq-Club] unable to set up rewriting upto mod equivalence, Abhishek Anand, 11/05/2019
- Re: [Coq-Club] unable to set up rewriting upto mod equivalence, Cao Qinxiang, 11/05/2019
- Re: [Coq-Club] unable to set up rewriting upto mod equivalence, Abhishek Anand, 11/05/2019
- Re: [Coq-Club] unable to set up rewriting upto mod equivalence, Cao Qinxiang, 11/05/2019
Archive powered by MHonArc 2.6.18.