Theorem: Int.Matrix.card_S_lt_card_T
File: Mathlib/NumberTheory/SiegelsLemma.lean

tactic: zify
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ S.card < T.card
state_after: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ↑S.card < ↑T.card

tactic: rw [card_T_eq, card_S_eq]
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ↑S.card < ↑T.card
state_after: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ∏ i : Fin m, (P i - N i + 1) < ↑((B + 1) ^ n)

tactic: rify
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ∏ i : Fin m, (P i - N i + 1) < ↑((B + 1) ^ n)
state_after: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ∏ x : Fin m, (∑ x_1 : Fin n, ↑B * ↑(A x x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A x x_1)⁻ + 1) < (↑B + 1) ^ n

tactic: rw [← Fin.prod_const m (n * ‖A‖ * B + 1)]
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ∏ x : Fin m, (∑ x_1 : Fin n, ↑B * ↑(A x x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A x x_1)⁻ + 1) ≤ (↑n * ‖A‖ * ↑B + 1) ^ m
state_after: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ∏ x : Fin m, (∑ x_1 : Fin n, ↑B * ↑(A x x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A x x_1)⁻ + 1) ≤
    ∏ _i : Fin m, (↑n * ‖A‖ * ↑B + 1)

tactic: refine Finset.prod_le_prod (fun i _ ↦ ?_) (fun i _ ↦ ?_)
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ∏ x : Fin m, (∑ x_1 : Fin n, ↑B * ↑(A x x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A x x_1)⁻ + 1) ≤
    ∏ _i : Fin m, (↑n * ‖A‖ * ↑B + 1)
state_after: case refine_1
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ 0 ≤ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1

case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1 ≤ ↑n * ‖A‖ * ↑B + 1

tactic: have h := N_le_P_add_one m n A i
state_before: case refine_1
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ 0 ≤ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1
state_after: case refine_1
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h : N i ≤ P i + 1
⊢ 0 ≤ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1

tactic: rify at h
state_before: case refine_1
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h : N i ≤ P i + 1
⊢ 0 ≤ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1
state_after: case refine_1
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h : ∑ x : Fin n, ↑B * -↑(A i x)⁻ ≤ ∑ x : Fin n, ↑B * ↑(A i x)⁺ + 1
⊢ 0 ≤ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1

tactic: linarith only [h]
state_before: case refine_1
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h : ∑ x : Fin n, ↑B * -↑(A i x)⁻ ≤ ∑ x : Fin n, ↑B * ↑(A i x)⁺ + 1
⊢ 0 ≤ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1
state_after: no goals

tactic: simp only [mul_neg, sum_neg_distrib, sub_neg_eq_add, add_le_add_iff_right]
state_before: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ - ∑ x_1 : Fin n, ↑B * -↑(A i x_1)⁻ + 1 ≤ ↑n * ‖A‖ * ↑B + 1
state_after: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ + ∑ x : Fin n, ↑B * ↑(A i x)⁻ ≤ ↑n * ‖A‖ * ↑B

tactic: have h1 : n * ‖A‖ * B = ∑ _ : Fin n, ‖A‖ * B := by
  simp only [sum_const, card_univ, Fintype.card_fin, nsmul_eq_mul, mul_assoc ↑n ‖A‖ ↑B]
state_before: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ + ∑ x : Fin n, ↑B * ↑(A i x)⁻ ≤ ↑n * ‖A‖ * ↑B
state_after: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
⊢ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ + ∑ x : Fin n, ↑B * ↑(A i x)⁻ ≤ ↑n * ‖A‖ * ↑B

tactic: simp_rw [h1, ← Finset.sum_add_distrib, ← mul_add, mul_comm ‖A‖, ← Int.cast_add]
state_before: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
⊢ ∑ x_1 : Fin n, ↑B * ↑(A i x_1)⁺ + ∑ x : Fin n, ↑B * ↑(A i x)⁻ ≤ ↑n * ‖A‖ * ↑B
state_after: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
⊢ ∑ x : Fin n, ↑B * ↑((A i x)⁺ + (A i x)⁻) ≤ ∑ x : Fin n, ↑B * ‖A‖

tactic: gcongr with j _
state_before: case refine_2
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
⊢ ∑ x : Fin n, ↑B * ↑((A i x)⁺ + (A i x)⁻) ≤ ∑ x : Fin n, ↑B * ‖A‖
state_after: case refine_2.h.h
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
j : Fin n
a✝ : j ∈ univ
⊢ ↑((A i j)⁺ + (A i j)⁻) ≤ ‖A‖

tactic: rw [posPart_add_negPart (A i j), Int.cast_abs]
state_before: case refine_2.h.h
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
j : Fin n
a✝ : j ∈ univ
⊢ ↑((A i j)⁺ + (A i j)⁻) ≤ ‖A‖
state_after: case refine_2.h.h
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
j : Fin n
a✝ : j ∈ univ
⊢ |↑(A i j)| ≤ ‖A‖

tactic: exact norm_entry_le_entrywise_sup_norm A
state_before: case refine_2.h.h
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
h1 : ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
j : Fin n
a✝ : j ∈ univ
⊢ |↑(A i j)| ≤ ‖A‖
state_after: no goals

tactic: simp only [sum_const, card_univ, Fintype.card_fin, nsmul_eq_mul, mul_assoc ↑n ‖A‖ ↑B]
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
i : Fin m
x✝ : i ∈ univ
⊢ ↑n * ‖A‖ * ↑B = ∑ x : Fin n, ‖A‖ * ↑B
state_after: no goals

tactic: rw [← mul_pow, mul_add, mul_one]
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖ * ↑B + 1) ^ m ≤ (↑n * ‖A‖) ^ m * (↑B + 1) ^ m
state_after: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖ * ↑B + 1) ^ m ≤ (↑n * ‖A‖ * ↑B + ↑n * ‖A‖) ^ m

tactic: gcongr
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖ * ↑B + 1) ^ m ≤ (↑n * ‖A‖ * ↑B + ↑n * ‖A‖) ^ m
state_after: case hab.bc
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ 1 ≤ ↑n * ‖A‖

tactic: have H : 1 ≤ (n : ℝ) := mod_cast (hm.trans hn)
state_before: case hab.bc
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ 1 ≤ ↑n * ‖A‖
state_after: case hab.bc
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
H : 1 ≤ ↑n
⊢ 1 ≤ ↑n * ‖A‖

tactic: exact one_le_mul_of_one_le_of_one_le H <| one_le_norm_A_of_ne_zero m n A hA
state_before: case hab.bc
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
H : 1 ≤ ↑n
⊢ 1 ≤ ↑n * ‖A‖
state_after: no goals

tactic: congr 1
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖) ^ m * (↑B + 1) ^ m = ((↑n * ‖A‖) ^ e) ^ (↑n - ↑m) * (↑B + 1) ^ m
state_after: case e_a
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖) ^ m = ((↑n * ‖A‖) ^ e) ^ (↑n - ↑m)

tactic: rw [← rpow_mul (mul_nonneg n.cast_nonneg (norm_nonneg A)), ← Real.rpow_natCast,
  div_mul_cancel₀]
state_before: case e_a
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖) ^ m = ((↑n * ‖A‖) ^ e) ^ (↑n - ↑m)
state_after: case e_a.h
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ↑n - ↑m ≠ 0

tactic: exact sub_ne_zero_of_ne (mod_cast hn.ne')
state_before: case e_a.h
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ↑n - ↑m ≠ 0
state_after: no goals

tactic: gcongr
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ ((↑n * ‖A‖) ^ e) ^ (↑n - ↑m) * (↑B + 1) ^ m < (↑B + 1) ^ (↑n - ↑m) * (↑B + 1) ^ m
state_after: case bc.hz
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ 0 < ↑n - ↑m

case bc.hxy
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖) ^ e < ↑B + 1

tactic: exact sub_pos.mpr (mod_cast hn)
state_before: case bc.hz
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ 0 < ↑n - ↑m
state_after: no goals

tactic: exact Nat.lt_floor_add_one ((n * ‖A‖) ^ e)
state_before: case bc.hxy
m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑n * ‖A‖) ^ e < ↑B + 1
state_after: no goals

tactic: rw [← rpow_natCast, ← rpow_add (Nat.cast_add_one_pos B), ← rpow_natCast, sub_add_cancel]
state_before: m n : ℕ
A : Matrix (Fin m) (Fin n) ℤ
v : Fin n → ℤ
hn : m < n
hm : 0 < m
hA : A ≠ 0
⊢ (↑B + 1) ^ (↑n - ↑m) * (↑B + 1) ^ m = (↑B + 1) ^ n
state_after: no goals