Skip to Content.
Sympa Menu

ssreflect - Re: [ssreflect] Adding ring tactic to integers

Subject: Ssreflect Users Discussion List

List archive

Re: [ssreflect] Adding ring tactic to integers


Chronological Thread 
  • From: Erik Martin-Dorel <>
  • To: Benjamin Salling Hvass <>
  • Cc: "" <>
  • Subject: Re: [ssreflect] Adding ring tactic to integers
  • Date: Mon, 23 Sep 2019 22:56:23 +0200
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-phdr: 9a23:omXsNhNlM1rbLnQSl5ol6mtUPXoX/o7sNwtQ0KIMzox0Ivj+rarrMEGX3/hxlliBBdydt6sfzbCG+Pm9BSQp2tWoiDg6aptCVhsI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFRrhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagb75+Ngu6oAbeusULgYZvJbs6xwfUrHdPZ+lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2465MvwtRneVgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVzmu87tnRRn1gygAKzA38H/ahtVpgK9Guh2uugByzJPSYI+JKPV+YL7Scc0HTmZFXstdSilND4WhZIUNEuUBJ/5VoYf9qVUQsBWwBgesC+zzxTBViXH536M13v89EQzFxgEsA84CvW7WodjzKawcUfq1zK7NzTjbYP1Wwzb96IvVeR4mu/6MR65wccvXyUU2GQ3FiU+QppLhPziI0ekCrXKb7+tjVe61jm4osRtxoiSuxscqk4XGm4UVykra+iV924s1JMe4SE9nYdK+HptQrTiXOo1rSc0sRGFovTw1yrwAuZOjfSgKzo4nxx/FZPCdfYiI+ArvVOeLITd5mHJpYry/hwy0/EO9yeP8TtG53EtFoyZYiNXAq20B2hzJ5sSZRfZx5Fmt1DCS3A7J8O5EO1o7la/DJp4h3LEwkp0TvFzYHi/zhEX2lLKael8l+uiy6uTnfq/qppGGN4NsiwH+NLohmtCnDOglPQUCQnKX9fmh2LDj50H1XrpHguconqXBtZDVP8Ubpqq3Aw9P1YYj7g6yACm80NQZnnkLNldFdwidj4j1OlHOJun0Auq4g1S2jjhrw+vLPrz7ApXMMnjPirnhfaxl505G1AUz1cxf545TCrwZO/LzQVXxu8LWDh89LQO73/rnBc5m1oIeXGKPGrWWPLnTsV+O/OIvIvODaJUbuDbneLAZ4KvEgHk7kFoce+GS1J8TaXa3VtR4Kl6CKS7mmdcpHGEF+AMjCuDp3g6sSzlWMluoXqF0wzghFIOgSKvEXI2pyOiMxia4WJhffHxHDBWAFm3lc62FQfYQLiyIdJwy2gcYXKSsHtdynSqlsxX3nuc+d7aGymgjrZvmkeNNyajLjxhjpz1uDtjb3XvfFzglzFNNfCc/2eVEmWI4z16C1aZihPkJR91J5u8PXB1obMeBndw/MMj7X0f6RvnMSFuiRYz7Uyo0Uspohd4UYlo7Fc/w1h0=

Dear Benjamin,

I had noticed a similar behavior when doing some experiments with
ssrint and "cring"
(http://tamadi.gforge.inria.fr/CoqHensel/coqhensel-2.1.0-coqdoc/CoqHensel.ssr_tactics.html)

The issue you observe is due to the fact that the ring_theory implicit
argument is automatically inferred to
"(GRing.Zmodule.sort (GRing.Ring.zmodType int_Ring))"
(which is unfortunate in this case, as it should be "int")

You can address this issue just by using the "@" prefix to make this
type parameter choice explicit. See complete excerpt below.

--8<---------------cut here---------------start------------->8---
From mathcomp Require Export all_ssreflect.
From mathcomp Require Export all_algebra.

Open Scope ring_scope.
Open Scope int_scope.

Export intRing.
Export intZmod.

Lemma int_ring : ring_theory 0 1 addz mulz (fun n m => n - m) oppz (@eq _).
Set Printing All.
(* @ring_theory (GRing.Zmodule.sort (GRing.Ring.zmodType int_Ring))
(GRing.zero (GRing.Ring.zmodType int_Ring)) (GRing.one int_Ring) addz mulz
(fun n m : GRing.Zmodule.sort (GRing.Ring.zmodType int_Ring) =>
@GRing.add (GRing.Ring.zmodType int_Ring) n (@GRing.opp
(GRing.Ring.zmodType int_Ring) m)) oppz
(@eq (GRing.Zmodule.sort (GRing.Ring.zmodType int_Ring)))
*)
Abort.
Unset Printing All.

Lemma int_ring : @ring_theory int 0 1 addz mulz (fun n m => n - m) oppz (@eq
_).
Proof. split.
exact add0z.
exact addzC.
exact addzA.
exact mul1z.
exact mulzC.
exact mulzA.
exact mulz_addl.
by [].
move=> x. rewrite addzC. apply addNz. Qed.

Add Ring int_ring_ssr : int_ring.

Lemma test (n m : int) : addz n m = addz m n.
Proof. ring. Qed.
--8<---------------cut here---------------end--------------->8---

But I let the mathcomp devs comment on whether a similar "Add Ring"
invocation should be directly added to core coq-mathcomp-algebra?

Best regards,
Erik

Le lundi 23 septembre 2019 à 16:01 +0000, Benjamin Salling Hvass a écrit :
> I tried making the ring tactic work for the int type by running the
> following code
>
> From mathcomp Require Export all_ssreflect.
> From mathcomp Require Export all_algebra.
>
> Open Scope ring_scope.
> Open Scope int_scope.
>
> Export intRing.
> Export intZmod.
>
> Lemma int_ring : ring_theory 0 1 addz mulz (fun n m => n - m) oppz (@eq _).
> Proof. split.
> exact add0z.
> exact addzC.
> exact addzA.
> exact mul1z.
> exact mulzC.
> exact mulzA.
> exact mulz_addl.
> by [].
> move=> x. rewrite addzC. apply addNz. Qed.
>
> Add Ring int_ring_ssr : int_ring.
>
> Lemma test (n m : int) : addz n m = addz m n.
> Proof. ring.
>
> But it complains that it cannot find a declared ring structure for int?
> According to the documentation for Add Ring this should work. What have I
> missed?
>
> Best regards,
> Benjamin

--
Érik Martin-Dorel, PhD
Maître de Conférences, Lab. IRIT, Univ. Toulouse 3


https://www.irit.fr/~Erik.Martin-Dorel



Archive powered by MHonArc 2.6.18.

Top of Page