-
Notifications
You must be signed in to change notification settings - Fork 720
Open
Labels
kind: performanceImprovements to performance and efficiency.Improvements to performance and efficiency.part: micromegaThe lia, nia, lra, nra and psatz tactics. Also the legacy omega tactic.The lia, nia, lra, nra and psatz tactics. Also the legacy omega tactic.
Description
Here's a goal on which lia (and omega as well) is very slow:
Require Import Coq.ZArith.ZArith.
Require Import Coq.micromega.Lia.
Require Import Coq.omega.Omega.
Open Scope Z_scope.
Goal
forall (r2 : Z) (L : nat),
r2 = 8 * Z.of_nat L ->
r2 <> 0 ->
0 <= Z.of_nat L ->
forall q r r1 : Z,
(2 ^ r1 <> 0 -> r2 = 2 ^ r1 * q + r) ->
(0 < 2 ^ r1 -> 0 <= r < 2 ^ r1) ->
(2 ^ r1 < 0 -> 2 ^ r1 < r <= 0) ->
(2 ^ r1 = 0 -> q = 0) ->
(2 ^ r1 = 0 -> r = 0) ->
forall q0 r0 M : Z,
(M <> 0 -> 3 = M * q0 + r0) ->
(0 < M -> 0 <= r0 < M) ->
(M < 0 -> M < r0 <= 0) ->
(M = 0 -> q0 = 0) ->
(M = 0 -> r0 = 0) ->
forall q1 : Z,
(M <> 0 -> 4 = M * q1 + r1) ->
(0 < M -> 0 <= r1 < M) ->
(M < 0 -> M < r1 <= 0) ->
(M = 0 -> q1 = 0) ->
(M = 0 -> r1 = 0) ->
forall q2 y1 y2 : Z,
(M <> 0 -> y2 - y1 = M * q2 + r2) ->
(0 < M -> 0 <= r2 < M) ->
(M < 0 -> M < r2 <= 0) ->
(M = 0 -> q2 = 0) -> (M = 0 -> r2 = 0) ->
0 <= y2 - (y1 + q * 2 ^ r0 + 8) < M.
Proof.
intros.
Time lia.
Note that lia can't solve this, and that's fine, but I would like lia to fail faster, so that I can write proof scripts which try many things.
In Coq 8.9.0, this takes 80s, and in Coq master, this takes 15s using coqc from the command line, and interestingly, it takes 40s-50s in Proof General.
/cc @andres-erbsen @fajb
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
kind: performanceImprovements to performance and efficiency.Improvements to performance and efficiency.part: micromegaThe lia, nia, lra, nra and psatz tactics. Also the legacy omega tactic.The lia, nia, lra, nra and psatz tactics. Also the legacy omega tactic.