Skip to Content.
Sympa Menu

coq-club - [Coq-Club] morphism option of ring tactic

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

[Coq-Club] morphism option of ring tactic


Chronological Thread 
  • From: Samuel Gruetter <gruetter AT mit.edu>
  • To: "coq-club AT inria.fr" <coq-club AT inria.fr>
  • Subject: [Coq-Club] morphism option of ring tactic
  • Date: Mon, 6 Aug 2018 19:56:51 +0000
  • Accept-language: en-US
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=gruetter AT mit.edu; spf=Pass smtp.mailfrom=gruetter AT mit.edu; spf=None smtp.helo=postmaster AT dmz-mailsec-scanner-1.mit.edu
  • Ironport-phdr: 9a23:QnVlgRXt6WNcGiQqVVCYhO419EvV8LGtZVwlr6E/grcLSJyIuqrYbBSFt8tkgFKBZ4jH8fUM07OQ7/i+HzRYqb+681k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAAjwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba9zIRmssQndqtQdjJd/JKo21hbHuGZDdf5MxWNvK1KTnhL86dm18ZV+7SleuO8v+tBZX6nicKs2UbJXDDI9M2Ao/8LrrgXMTRGO5nQHTGoblAdDDhXf4xH7WpfxtTb6tvZ41SKHM8D6Uaw4VDK/5KptVRTmijoINyQh/W/XlMJ+kb5brhyiqRx+34Hab46aOeFifqzGZ94WWXZNUtpTWiFHH4iyb5EPD+0EPetAsofyvV4OrQagCgmoGejhyyVIhmLo0q0mz+QuDxvG1xEnEtIBqnTUscv6NLsOUe+r1qnF1jDDb/JK2Tvn9ofHbw0hrOiKULltf8TRzkwvGBnEjlWWsYHkPima1v4Ms2iH7+psT+Wvi3Y5pAF3pDWk28QiipHRi44IyV3I7yF0zJwrKdC4UkJ3fMCoHINSuiyULYd6X98uT31ytConyLALuIS3cDYWxJg/2hLSaviKf5KW7h/jW+udOyp0iGh4dL6hmxq/91WrxPfmWcmuyllKqzJIktnSuXAJ0Bze8tWISv58/0u43DaAzQHT6uVfIU8qiaXXMoUhzaIqmZoVt0TMADX2lFzrgKOMc0Uk+/So5/75bbr7u5+QL450igfgPaQygsGzHOc1PhIKUmSB5+ix1Kfv8VDnTLlSi/05iKjZsJTUJcQBoa65BhdY0ok56xaiETimzMgYkmcdLF9efRKHjpTpN0vQL//lEPezm06snytzx/DaIr3hBY3AIWTEkLf4ZLpy90pcyBcowt1E/JJVCrQBIOrpVUPrtdzYCAU5Mw2uzOr9BtV9zNBWZWXaSKSeKebZtUKCzuMpOeiFIoEP8n6pIP88ovXqkHURmFkHfKDv04FBO16iGfEzGEycfHfoyvgbDGoWogckBLjlkkCPTSJefV63Xr566z0mXtH1RbzfT5yg1eTSlBywGYdbMzgfWwK8VEzwfoDBYM8iLSebI8tviDsBBOqkSpNn2B2z5lajl+hXa9HM8yhdjqrNkcBv7ryBkBAuszF4EpbFijzffyRPhmoNAgQO8uV/rEh6kQ7R3a1qxvlRFNhI6vgMSQwzM5jR1akjTdXzRkTMcsrbEFs=

Dear Coq-club,

I'm trying to figure out how to use the "morphism" option of of the
"Add Ring" command.
I have the following:


Require Import Coq.ZArith.ZArith.

Open Scope Z_scope.

Class Reg(t: Set) := mkReg {
add: t -> t -> t;
sub: t -> t -> t;
mul: t -> t -> t;

ZToReg: Z -> t;

regRing: @ring_theory t (ZToReg 0) (ZToReg 1) add mul sub
(fun x => sub (ZToReg 0) x) (@eq t);
ZToReg_morphism:
@ring_morph t (ZToReg 0) (ZToReg 1) add mul sub
(fun x => sub (ZToReg 0) x) (@eq t)
Z 0 1 Z.add Z.mul Z.sub Z.opp Z.eqb
ZToReg;
}.

Section FlatToRiscv.

Context {mword: Set}.
Context {MW: Reg mword}.

Add Ring mword_ring :
(@regRing mword MW) (morphism (@ZToReg_morphism mword MW)).

(* I'd like to solve the following goal automatically using "ring": *)
Goal forall (x y: Z),
add (ZToReg x) (ZToReg y) = ZToReg (x + y).
Proof.
intros.
(* but it fails! *)
Fail ring.
(* however, the morphism I provided to "Add Ring" does contain a
lemma which can solve this goal: *)
rewrite (ZToReg_morphism.(morph_add)).
reflexivity.
Qed.
(* So, am I expecting too much of "ring"? Or am I not using it properly? *)

(* And for reference, here's a more realistic example of what kind of
goal I'd like to solve with "ring": *)
Goal forall (P : mword) (L : Z),
add (add P (mul (ZToReg 4) (ZToReg L))) (ZToReg 4) =
add P (mul (ZToReg 4) (ZToReg (L + 1))).
Proof.
intros.
rewrite (ZToReg_morphism.(morph_add)).
ring.
Qed.

(* My question is:
Can I get rid of the "rewrite (ZToReg_morphism.(morph_add))"? *)

End FlatToRiscv.


Thanks!

Sam



Archive powered by MHonArc 2.6.18.

Top of Page