|
| 1 | +/- |
| 2 | +Copyright (c) 2021 Anne Baanen. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Anne Baanen |
| 5 | +-/ |
| 6 | +import data.int.absolute_value |
| 7 | +import linear_algebra.matrix.determinant |
| 8 | + |
| 9 | +/-! |
| 10 | +# Absolute values and matrices |
| 11 | +
|
| 12 | +This file proves some bounds on matrices involving absolute values. |
| 13 | +
|
| 14 | +## Main results |
| 15 | +
|
| 16 | + * `matrix.det_le`: if the entries of an `n × n` matrix are bounded by `x`, |
| 17 | + then the determinant is bounded by `n! x^n` |
| 18 | + * `matrix.det_sum_le`: if we have `s` `n × n` matrices and the entries of each |
| 19 | + matrix are bounded by `x`, then the determinant of their sum is bounded by `n! (s * x)^n` |
| 20 | + * `matrix.det_sum_smul_le`: if we have `s` `n × n` matrices each multiplied by |
| 21 | + a constant bounded by `y`, and the entries of each matrix are bounded by `x`, |
| 22 | + then the determinant of the linear combination is bounded by `n! (s * y * x)^n` |
| 23 | +-/ |
| 24 | + |
| 25 | +open_locale big_operators |
| 26 | +open_locale matrix |
| 27 | + |
| 28 | +namespace matrix |
| 29 | + |
| 30 | +open equiv finset |
| 31 | + |
| 32 | +variables {R S : Type*} [comm_ring R] [nontrivial R] [linear_ordered_comm_ring S] |
| 33 | +variables {n : Type*} [fintype n] [decidable_eq n] |
| 34 | + |
| 35 | +lemma det_le {A : matrix n n R} {abv : absolute_value R S} |
| 36 | + {x : S} (hx : ∀ i j, abv (A i j) ≤ x) : |
| 37 | + abv A.det ≤ nat.factorial (fintype.card n) • x ^ (fintype.card n) := |
| 38 | +calc abv A.det |
| 39 | + = abv (∑ σ : perm n, _) : congr_arg abv (det_apply _) |
| 40 | +... ≤ ∑ σ : perm n, abv _ : abv.sum_le _ _ |
| 41 | +... = ∑ σ : perm n, (∏ i, abv (A (σ i) i)) : sum_congr rfl (λ σ hσ, |
| 42 | + by rw [abv.map_units_int_smul, abv.map_prod]) |
| 43 | +... ≤ ∑ σ : perm n, (∏ (i : n), x) : |
| 44 | + sum_le_sum (λ _ _, prod_le_prod (λ _ _, abv.nonneg _) (λ _ _, hx _ _)) |
| 45 | +... = ∑ σ : perm n, x ^ (fintype.card n) : sum_congr rfl (λ _ _, |
| 46 | + by rw [prod_const, finset.card_univ]) |
| 47 | +... = nat.factorial (fintype.card n) • x ^ (fintype.card n) : |
| 48 | + by rw [sum_const, finset.card_univ, fintype.card_perm] |
| 49 | + |
| 50 | +lemma det_sum_le {ι : Type*} (s : finset ι) {A : ι → matrix n n R} |
| 51 | + {abv : absolute_value R S} {x : S} (hx : ∀ k i j, abv (A k i j) ≤ x) : |
| 52 | + abv (det (∑ k in s, A k)) ≤ |
| 53 | + nat.factorial (fintype.card n) • (finset.card s • x) ^ (fintype.card n) := |
| 54 | +det_le $ λ i j, |
| 55 | +calc abv ((∑ k in s, A k) i j) |
| 56 | + = abv (∑ k in s, A k i j) : by simp only [sum_apply] |
| 57 | +... ≤ ∑ k in s, abv (A k i j) : abv.sum_le _ _ |
| 58 | +... ≤ ∑ k in s, x : sum_le_sum (λ k _, hx k i j) |
| 59 | +... = s.card • x : sum_const _ |
| 60 | + |
| 61 | +lemma det_sum_smul_le {ι : Type*} (s : finset ι) {c : ι → R} {A : ι → matrix n n R} |
| 62 | + {abv : absolute_value R S} |
| 63 | + {x : S} (hx : ∀ k i j, abv (A k i j) ≤ x) {y : S} (hy : ∀ k, abv (c k) ≤ y) : |
| 64 | + abv (det (∑ k in s, c k • A k)) ≤ |
| 65 | + nat.factorial (fintype.card n) • (finset.card s • y * x) ^ (fintype.card n) := |
| 66 | +by simpa only [smul_mul_assoc] using |
| 67 | +det_sum_le s (λ k i j, |
| 68 | +calc abv (c k * A k i j) |
| 69 | + = abv (c k) * abv (A k i j) : abv.map_mul _ _ |
| 70 | +... ≤ y * x : mul_le_mul (hy k) (hx k i j) (abv.nonneg _) ((abv.nonneg _).trans (hy k))) |
| 71 | + |
| 72 | +end matrix |
0 commit comments