Skip to Content.
Sympa Menu

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

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

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


Chronological Thread 
  • 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.    


Thanks.



Archive powered by MHonArc 2.6.18.

Top of Page