Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Automation for division over nat

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Automation for division over nat


Chronological Thread 
  • From: Bas Spitters <b.a.w.spitters AT gmail.com>
  • To: Coq Club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Automation for division over nat
  • Date: Sat, 9 Feb 2019 18:45:21 +0100
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=b.a.w.spitters AT gmail.com; spf=Pass smtp.mailfrom=b.a.w.spitters AT gmail.com; spf=None smtp.helo=postmaster AT mail-yb1-f176.google.com
  • Ironport-phdr: 9a23:EUAhDxSwebBJVoZLhADWaIQPWdpsv+yvbD5Q0YIujvd0So/mwa69YxWN2/xhgRfzUJnB7Loc0qyK6/CmATRIyK3CmUhKSIZLWR4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+KPjrFY7OlcS30P2594HObwlSizexfbB/IA+qoQnNq8IbnZZsJqEtxxXTv3BGYf5WxWRmJVKSmxbz+MK994N9/ipTpvws6ddOXb31cKokQ7NYCi8mM30u683wqRbDVwqP6WACXWgQjxFFHhLK7BD+Xpf2ryv6qu9w0zSUMMHqUbw5Xymp4rx1QxH0ligIKz858HnWisNuiqJbvAmhrAF7z4LNfY2ZKOZycqbbcNgHR2ROQ9xRWjRODYOybYQBD+QPM+VFoYfju1QDtge+CRW2Ce/z1jNEmn370Ksn2OohCwHG2wkgEsoTvXvOt9X+KbocUfi0zKnU0TXMcelW2Szg44XPaR8tu+uDUah+cMbL0kkvDwLFjkmMqYP7JTOVzf8As2ee7+V6VOKvj3QrpB12ojiq38ohjJTCiIENyl3c6yl13II4Kce7RUN7e9KoDoZcuiWAO4drQM4vQmdlszsgxLIco560Zi0KxYwnxxHBb/yHdJCF4hf5W+aQJTd0nXJkd6miixqr/0is1+/xW8iu3FZFqSpFldbMtnQT2BDJ9seHTf598l+g2TaJyQ/T9vlJLV4omaffMZIswb49moANvUjeGiL6glj6ga2Xe0k8/+in8eXnYrHopp+GMI90jxnzPb80lsOlG+g5PBICX3OD+eS9yL3j4VP2QK9RjvAtnanZtYrVJcUfpqKjHwBV1YMj5w6lDzi6yNQYgWUHLFVddR2biIjpIkjCL+z8DfeimFuhiyxrxvDDPr35GJrBNHnDkLH7fbZ88UFQ0gQzzcoMr65TX5oGObrYXlL7/IjTCQZ8OAipyc7mDs9838UQQzTcLLWeNfb4uETA3fouP/WBfpRd7Dy7Ir46oeX2jGMllEUGVaas1JoTLnu/G6I1cA2ifXPwj4JZQi8xtQ0kQbmv0QXaCG8BVzOJR6s5owoDJsejBIbHSJqqheXYjii+F5xSIGtBDwLVSCu6R8C/Q/4JLRmqDIp5iDVdDOquToYg0Velswqok+M6fNqRwTURsNfY7PYw5+DXkktspzl9DsDYwmvUCm8twT1OSDgx06Ry50d6zwXb3A==

Have you tried coqhammer? It might be helpful in these cases.

On Sat, Feb 9, 2019 at 6:20 PM Laurent Thery
<Laurent.Thery AT inria.fr>
wrote:
>
>
>
> On 2/9/19 3:43 PM, Gert Smolka wrote:
> > Is there tactic support for proving lemmas involving division over nat,
> > for instance
>
>
> Unfortunately, it seems you need to populate the assumptions with
> instances of Nat.div_mod and Nat.mod_upper_bound for nia to do
> something.
>
> Here is how you can solve "automatically" your 3 examples:
>
> =================================================================
>
> Require Import Psatz.
> Require Import Arith.
>
> Lemma bound_nat a b :
> (b = 0 /\ a / b = 0) \/ (0 < b /\ a = b * (a / b) + a mod b /\ a mod b
> < b).
> Proof.
> destruct b; [left | right].
> now destruct a; simpl; lia.
> repeat split; try lia.
> apply Nat.div_mod; lia.
> apply Nat.mod_upper_bound; lia.
> Qed.
>
> Ltac rm_div :=
> match goal with
> |- context [ ?a / ?b] =>
> let tmp := fresh "Hl" in
> let u := fresh "dd" in
> let v := fresh "mm" in
> assert (tmp := bound_nat a b);
> set (u := a / b) in *;
> set (v := a mod b) in *
> |
> |- context [ ?a mod ?b] =>
> let tmp := fresh "Hl" in
> let u := fresh "dd" in
> let v := fresh "mm" in
> assert (tmp := bound_nat a b);
> set (u := a / b) in *;
> set (v := a mod b) in *
> end.
>
> Ltac dnia := repeat rm_div; nia.
>
> Goal forall k x, 1 <= k <= x -> x / k >= 1.
> intros.
> dnia.
> Qed.
>
> Goal forall k x y, x <= y -> k >= 1 -> x / k <= y / k.
> intros.
> dnia.
> Qed.
>
> Goal forall k x, k >= 1 -> (k * x) / k = x.
> intros.
> dnia.
> Qed.
>
> ===============================================================



Archive powered by MHonArc 2.6.18.

Top of Page