Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(* -*- coding: utf-8 -*- *)
(************************************************************************)
(* * The Coq Proof Assistant / The Coq Development Team *)
(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Binary Integers (Pierre Crégut, CNET, Lannion, France)
Require Export Arith_base. Require Import BinInt. Require Import Zorder. Require Import Decidable. Require Import Peano_dec. Require Export Compare_dec. Local Open Scope Z_scope. (***************************************************************)
n, m:ZZne n m -> Zne (n + - m) 0n, m:ZZne n m -> Zne (n + - m) 0now rewrite <- Z.sub_move_0_r. Qed.n, m:Zn <> m -> n + - m <> 0n, m:Zn = m -> n + - m = 0apply Z.sub_move_0_r. Qed.n, m:Zn = m -> n + - m = 0n, m:Zn <= m -> 0 <= m + - napply Z.le_0_sub. Qed.n, m:Zn <= m -> 0 <= m + - nn, m:Z0 <= m + - n -> n <= mapply Z.le_0_sub. Qed.n, m:Z0 <= m + - n -> n <= mn, m:Z0 < m + - n -> n < mapply Z.lt_0_sub. Qed.n, m:Z0 < m + - n -> n < mn, m:Zn < m -> 0 < m + - napply Z.lt_0_sub. Qed.n, m:Zn < m -> 0 < m + - nn, m:Zn < m -> 0 <= m + -1 + - nn, m:Zn < m -> 0 <= m + -1 + - nn, m:ZH:n < m0 <= m + -1 + - nn, m:ZH:n < m0 <= m + - n + -1now apply Z.le_0_sub, Z.le_succ_l, Z.lt_0_sub. Qed.n, m:ZH:n < m0 <= m + - n + - Z.succ 0n, m:Zn >= m -> 0 <= n + - mn, m:Zn >= m -> 0 <= n + - mapply Z.le_0_sub. Qed.n, m:Zm <= n -> 0 <= n + - mn, m:Zn > m -> 0 <= n + -1 + - mn, m:Zn > m -> 0 <= n + -1 + - mapply Zlt_left. Qed.n, m:Zm < n -> 0 <= n + -1 + - mn, m:Zn > m -> n + - m > 0n, m:Zn > m -> n + - m > 0apply Z.lt_0_sub. Qed.n, m:Zm < n -> 0 < n + - mn, m:Zn + - m > 0 -> n > mn, m:Zn + - m > 0 -> n > mapply Z.lt_0_sub. Qed.n, m:Z0 < n + - m -> m < nn, m, p:Zn > 0 -> p > 0 -> 0 <= m -> 0 <= m * n + pn, m, p:Zn > 0 -> p > 0 -> 0 <= m -> 0 <= m * n + pn, m, p:Z0 < n -> 0 < p -> 0 <= m -> 0 <= m * n + pZ.order_pos. Qed.n, m, p:ZH:0 < nH0:0 < pH1:0 <= m0 <= m * n + pn, m, p:Zn > 0 -> n > p -> 0 <= m * n + p -> 0 <= mn, m, p:Zn > 0 -> n > p -> 0 <= m * n + p -> 0 <= mn, m, p:Z0 < n -> p < n -> 0 <= m * n + p -> 0 <= mn, m, p:ZH:0 < nH0:p < nH1:0 <= m * n + p0 <= mn, m, p:ZH:0 < nH0:p < nH1:0 <= m * n + p0 < Z.succ mn, m, p:ZH:0 < nH0:p < nH1:0 <= m * n + p0 < Z.succ m * nn, m, p:ZH:0 < nH0:p < nH1:0 <= m * n + p0 < m * n + nnow apply Z.add_lt_mono_l. Qed. Register Zegal_left as plugins.omega.Zegal_left. Register Zne_left as plugins.omega.Zne_left. Register Zlt_left as plugins.omega.Zlt_left. Register Zgt_left as plugins.omega.Zgt_left. Register Zle_left as plugins.omega.Zle_left. Register Zge_left as plugins.omega.Zge_left. Register Zmult_le_approx as plugins.omega.Zmult_le_approx.n, m, p:ZH:0 < nH0:p < nH1:0 <= m * n + pm * n + p < m * n + n