Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+πŸ–±οΈto focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2016 Jeremy Avigad. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad

! This file was ported from Lean 3 source module data.int.div
! leanprover-community/mathlib commit ee0c179cd3c8a45aa5bffbf1b41d8dbede452865
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Int.Dvd.Basic
import Mathlib.Data.Nat.Order.Lemmas
import Mathlib.Algebra.Ring.Regular

/-!
# Lemmas relating `/` in `β„€` with the ordering.
-/


open Nat

namespace Int

theorem 
eq_mul_div_of_mul_eq_mul_of_dvd_left: βˆ€ {a b c d : β„€}, b β‰  0 β†’ b ∣ c β†’ b * a = c * d β†’ a = c / b * d
eq_mul_div_of_mul_eq_mul_of_dvd_left
{a b c d :
β„€: Type
β„€
} (
hb: b β‰  0
hb
: b β‰ 
0: ?m.13
0
) (
hbc: b ∣ c
hbc
: b ∣ c) (
h: b * a = c * d
h
: b * a = c * d) : a = c / b * d :=

Goals accomplished! πŸ™
a, b, c, d: β„€

hb: b β‰  0

hbc: b ∣ c

h: b * a = c * d


a = c / b * d
a, b, c, d: β„€

hb: b β‰  0

h: b * a = c * d

k: β„€

hk: c = b * k


intro
a = c / b * d
a, b, c, d: β„€

hb: b β‰  0

hbc: b ∣ c

h: b * a = c * d


a = c / b * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * k * d


intro
a = b * k / b * d
a, b, c, d: β„€

hb: b β‰  0

hbc: b ∣ c

h: b * a = c * d


a = c / b * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * k * d


intro
a = b * k / b * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * k * d


intro
a = k * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * k * d


intro
a = k * d
a, b, c, d: β„€

hb: b β‰  0

hbc: b ∣ c

h: b * a = c * d


a = c / b * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * k * d


intro
a = k * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * (k * d)


intro
a = k * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * (k * d)


intro
a = k * d
a, b, d: β„€

hb: b β‰  0

k: β„€

h: b * a = b * (k * d)


intro
a = k * d
a, b, c, d: β„€

hb: b β‰  0

hbc: b ∣ c

h: b * a = c * d


a = c / b * d

Goals accomplished! πŸ™
#align int.eq_mul_div_of_mul_eq_mul_of_dvd_left
Int.eq_mul_div_of_mul_eq_mul_of_dvd_left: βˆ€ {a b c d : β„€}, b β‰  0 β†’ b ∣ c β†’ b * a = c * d β†’ a = c / b * d
Int.eq_mul_div_of_mul_eq_mul_of_dvd_left
/-- If an integer with larger absolute value divides an integer, it is zero. -/ theorem
eq_zero_of_dvd_of_natAbs_lt_natAbs: βˆ€ {a b : β„€}, a ∣ b β†’ natAbs b < natAbs a β†’ b = 0
eq_zero_of_dvd_of_natAbs_lt_natAbs
{a b :
β„€: Type
β„€
} (
w: a ∣ b
w
: a ∣ b) (
h: natAbs b < natAbs a
h
:
natAbs: β„€ β†’ β„•
natAbs
b <
natAbs: β„€ β†’ β„•
natAbs
a) : b =
0: ?m.567
0
:=

Goals accomplished! πŸ™
a, b: β„€

w: a ∣ b

h: natAbs b < natAbs a


b = 0
a, b: β„€

w: a ∣ b

h: natAbs b < natAbs a


b = 0
a, b: β„€

w: ↑(natAbs a) ∣ b

h: natAbs b < natAbs a


b = 0
a, b: β„€

w: a ∣ b

h: natAbs b < natAbs a


b = 0
a, b: β„€

w: ↑(natAbs a) ∣ ↑(natAbs b)

h: natAbs b < natAbs a


b = 0
a, b: β„€

w: a ∣ b

h: natAbs b < natAbs a


b = 0

b = 0

b = 0

b = 0
a, b: β„€

w: a ∣ b

h: natAbs b < natAbs a


b = 0

b = 0
a, b: β„€

w: a ∣ b

h: natAbs b < natAbs a


b = 0

Goals accomplished! πŸ™
#align int.eq_zero_of_dvd_of_nat_abs_lt_nat_abs
Int.eq_zero_of_dvd_of_natAbs_lt_natAbs: βˆ€ {a b : β„€}, a ∣ b β†’ natAbs b < natAbs a β†’ b = 0
Int.eq_zero_of_dvd_of_natAbs_lt_natAbs
theorem
eq_zero_of_dvd_of_nonneg_of_lt: βˆ€ {a b : β„€}, 0 ≀ a β†’ a < b β†’ b ∣ a β†’ a = 0
eq_zero_of_dvd_of_nonneg_of_lt
{a b :
β„€: Type
β„€
} (
w₁: 0 ≀ a
w₁
:
0: ?m.724
0
≀ a) (
wβ‚‚: a < b
wβ‚‚
: a < b) (
h: b ∣ a
h
: b ∣ a) : a =
0: ?m.780
0
:=
eq_zero_of_dvd_of_natAbs_lt_natAbs: βˆ€ {a b : β„€}, a ∣ b β†’ natAbs b < natAbs a β†’ b = 0
eq_zero_of_dvd_of_natAbs_lt_natAbs
h: b ∣ a
h
(
natAbs_lt_natAbs_of_nonneg_of_lt: βˆ€ {a b : β„€}, 0 ≀ a β†’ a < b β†’ natAbs a < natAbs b
natAbs_lt_natAbs_of_nonneg_of_lt
w₁: 0 ≀ a
w₁
wβ‚‚: a < b
wβ‚‚
) #align int.eq_zero_of_dvd_of_nonneg_of_lt
Int.eq_zero_of_dvd_of_nonneg_of_lt: βˆ€ {a b : β„€}, 0 ≀ a β†’ a < b β†’ b ∣ a β†’ a = 0
Int.eq_zero_of_dvd_of_nonneg_of_lt
/-- If two integers are congruent to a sufficiently large modulus, they are equal. -/ theorem
eq_of_mod_eq_of_natAbs_sub_lt_natAbs: βˆ€ {a b c : β„€}, a % b = c β†’ natAbs (a - c) < natAbs b β†’ a = c
eq_of_mod_eq_of_natAbs_sub_lt_natAbs
{a b c :
β„€: Type
β„€
} (
h1: a % b = c
h1
: a % b = c) (
h2: natAbs (a - c) < natAbs b
h2
:
natAbs: β„€ β†’ β„•
natAbs
(a - c) <
natAbs: β„€ β†’ β„•
natAbs
b) : a = c :=
eq_of_sub_eq_zero: βˆ€ {Ξ± : Type ?u.927} [inst : SubtractionMonoid Ξ±] {a b : Ξ±}, a - b = 0 β†’ a = b
eq_of_sub_eq_zero
(
eq_zero_of_dvd_of_natAbs_lt_natAbs: βˆ€ {a b : β„€}, a ∣ b β†’ natAbs b < natAbs a β†’ b = 0
eq_zero_of_dvd_of_natAbs_lt_natAbs
(
dvd_sub_of_emod_eq: βˆ€ {a b c : β„€}, a % b = c β†’ b ∣ a - c
dvd_sub_of_emod_eq
h1: a % b = c
h1
)
h2: natAbs (a - c) < natAbs b
h2
) #align int.eq_of_mod_eq_of_nat_abs_sub_lt_nat_abs
Int.eq_of_mod_eq_of_natAbs_sub_lt_natAbs: βˆ€ {a b c : β„€}, a % b = c β†’ natAbs (a - c) < natAbs b β†’ a = c
Int.eq_of_mod_eq_of_natAbs_sub_lt_natAbs
theorem
ofNat_add_negSucc_of_ge: βˆ€ {m n : β„•}, Nat.succ n ≀ m β†’ ofNat m + -[n+1] = ofNat (m - Nat.succ n)
ofNat_add_negSucc_of_ge
{m n :
β„•: Type
β„•
} (h : n.
succ: β„• β†’ β„•
succ
≀ m) :
ofNat: β„• β†’ β„€
ofNat
m + -[n+1] =
ofNat: β„• β†’ β„€
ofNat
(m - n.
succ: β„• β†’ β„•
succ
) :=

Goals accomplished! πŸ™
m, n: β„•

h: Nat.succ n ≀ m


ofNat m + -(↑n + 1) = ofNat (m - Nat.succ n)
m, n: β„•

h: Nat.succ n ≀ m


↑m + -(↑n + 1) = ofNat (m - Nat.succ n)
m, n: β„•

h: Nat.succ n ≀ m


↑m + -(↑n + 1) = ↑(m - Nat.succ n)
m, n: β„•

h: Nat.succ n ≀ m


↑m + -(↑n + ↑1) = ↑(m - Nat.succ n)
m, n: β„•

h: Nat.succ n ≀ m


↑m + -↑(n + 1) = ↑(m - Nat.succ n)
m, n: β„•

h: Nat.succ n ≀ m


↑m - ↑(n + 1) = ↑(m - Nat.succ n)
m, n: β„•

h: Nat.succ n ≀ m


↑(m - Nat.succ n) = ↑(m - Nat.succ n)

Goals accomplished! πŸ™
#align int.of_nat_add_neg_succ_of_nat_of_ge
Int.ofNat_add_negSucc_of_ge: βˆ€ {m n : β„•}, Nat.succ n ≀ m β†’ ofNat m + -[n+1] = ofNat (m - Nat.succ n)
Int.ofNat_add_negSucc_of_ge
theorem
natAbs_le_of_dvd_ne_zero: βˆ€ {s t : β„€}, s ∣ t β†’ t β‰  0 β†’ natAbs s ≀ natAbs t
natAbs_le_of_dvd_ne_zero
{s t :
β„€: Type
β„€
} (
hst: s ∣ t
hst
: s ∣ t) (
ht: t β‰  0
ht
: t β‰ 
0: ?m.1356
0
) :
natAbs: β„€ β†’ β„•
natAbs
s ≀
natAbs: β„€ β†’ β„•
natAbs
t :=
not_lt: βˆ€ {Ξ± : Type ?u.1383} [inst : LinearOrder Ξ±] {a b : Ξ±}, Β¬a < b ↔ b ≀ a
not_lt
.
mp: βˆ€ {a b : Prop}, (a ↔ b) β†’ a β†’ b
mp
(
mt: βˆ€ {a b : Prop}, (a β†’ b) β†’ Β¬b β†’ Β¬a
mt
(
eq_zero_of_dvd_of_natAbs_lt_natAbs: βˆ€ {a b : β„€}, a ∣ b β†’ natAbs b < natAbs a β†’ b = 0
eq_zero_of_dvd_of_natAbs_lt_natAbs
hst: s ∣ t
hst
)
ht: t β‰  0
ht
) #align int.nat_abs_le_of_dvd_ne_zero
Int.natAbs_le_of_dvd_ne_zero: βˆ€ {s t : β„€}, s ∣ t β†’ t β‰  0 β†’ natAbs s ≀ natAbs t
Int.natAbs_le_of_dvd_ne_zero
end Int