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: Abhishek Anand <abhishek.anand.iitg AT gmail.com>
  • To: coq-club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] unable to set up rewriting upto mod equivalence
  • Date: Tue, 5 Nov 2019 07:25:32 -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-f54.google.com
  • Ironport-phdr: 9a23:Iaq/VxzZ6B+HwkHXCy+O+j09IxM/srCxBDY+r6Qd2+oRIJqq85mqBkHD//Il1AaPAdyArasd1qGJ7ejJYi8p2d65qncMcZhBBVcuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx7xKRR6JvjvGo7Vks+7y/2+94fcbglVijexe65+IAi2oAnetMQbgJZpJ7osxBfOvnZGYfldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2Yu5M32rhbDVheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RSiu4qF2QxLulSwJNSM28HvPh8N/gqJUohKvqRJ8zYDJfo+aKOFzcbnBcd4AX2dNQtpdWi5HD4ihb4UPFe0BPeNAooThvFQOrRq+BRKsBOzxyT9Dm2P73asg3OQnDA7NwQstEMgVv3TUrdX1L6cSXv62zKXS1zrDaelZ2THg54TScxAhoO2MXb1rfMrezEkgDQLFjlGKpYP5ODOV0/0Avm6G5ORuUuKvjnQoqwB3ojW32sgsjZPJhoQLxVDA8SV12pg6KsClSEN9fNWqE4NQujmEO4dqRs4uWWJltSYgxrEbuJO2fTIGxZQoyhPZdveJaZKH4gj5W+aUOTp4hGxqeLa4hxuq9Eiv0Oz8Vs2t3FZLqSpJj8DAtn4N2hHc8MSHRfx9/kCu2TaLyQ/f8P1LIUcxlabDKp4hxKA/loYLvEjdAiP7nF/6gayWe0k+5+Sl6uXqbq/mq5KTL4N0jxvxMqUqmsyxG+Q4NQ0OUnCB9uun1L3j/Fb5QLVUgf01iKXWqpbaKt4dpqGkGQNV04cj6wqwDzq939QYmGMILFNBeB6dk4fpPFTOLOjiDfijm1SsjCtrx/feM7L9BZXNN2HPn6vlfbZg8EFR0xEzzNBa55JMEL4NOvPzWknrtNzZFBA1KQK0w/y0QOl6g4gZQCeEBrKTePfZtkbN7eYyKcGNYpUUsXDzMa52yeTpiCoQk18cZqmk3tM+bnm+ErwyKk+ZYGHsj9RHGGEDuAZ4Te32h3WNVDdSYzC5WKdqtWJzM56vEYqWHtPlu7eGxiruRsQLNFADMUiFFDLTT6vBW/oIb3jPcMpokzhBVL/4DoF8iVehswj1z7chJe3RqHVB6cDTkeNt7uiWrikcsCRuBp3EgW6IRmBw2GgPQm1uhfEtkQlG0l6GlJNArbldHN1X6elOV15jZ5HZxu1+Tdv1X1CYcw==

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