Skip to content

Commit 5e0e4da

Browse files
authored
Permutations Improvement, Kronecker Commutation (#45)
1 parent ec1987d commit 5e0e4da

24 files changed

+15328
-3910
lines changed

Bits.v

Lines changed: 178 additions & 161 deletions
Large diffs are not rendered by default.

CauchySchwarz.v

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,40 @@ Qed.
362362

363363
Local Close Scope nat_scope.
364364

365+
Lemma subnormal_matrix_le_1 {n m : nat} (A : Matrix n m) {i j}
366+
(Hi : (i < n)%nat) (Hj : (j < m)%nat)
367+
(Hnorm : forall i, (i < m)%nat -> norm (get_col A i) <= 1) :
368+
Cmod (A i j) <= 1.
369+
Proof.
370+
apply Rle_pow_le_nonneg with 1%nat; try lra; [apply Cmod_ge_0|].
371+
rewrite pow1.
372+
specialize (Hnorm j Hj).
373+
revert Hnorm.
374+
unfold get_col, norm, inner_product.
375+
autounfold with U_db.
376+
rewrite Nat.eqb_refl.
377+
rewrite (big_sum_eq_bounded _ (fun k => RtoC (Cmod (A k j) ^ 2)))
378+
by (intros; rewrite <- Cmod_sqr, RtoC_pow; easy).
379+
rewrite Rsum_big_sum.
380+
intros H.
381+
rewrite <- sqrt_1 in H.
382+
apply sqrt_le_0 in H;
383+
[|apply Rsum_ge_0_on;intros;apply pow2_ge_0|lra].
384+
refine (Rle_trans _ _ _ _ H).
385+
apply (Rsum_nonneg_ge_any n (fun k => Cmod (A k j) ^ 2)%R i); [easy|].
386+
intros; apply pow2_ge_0.
387+
Qed.
388+
389+
Lemma normal_matrix_le_1 {n m : nat} (A : Matrix n m) {i j}
390+
(Hi : (i < n)%nat) (Hj : (j < m)%nat)
391+
(Hnorm : forall i, (i < m)%nat -> norm (get_col A i) = 1) :
392+
Cmod (A i j) <= 1.
393+
Proof.
394+
apply subnormal_matrix_le_1; [easy..|].
395+
intros.
396+
rewrite Hnorm; easy + lra.
397+
Qed.
398+
365399
(* We can now prove Cauchy-Schwartz for vectors with inner_product *)
366400
Lemma CS_key_lemma : forall {n} (u v : Vector n),
367401
fst ⟨ (⟨v,v⟩ .* u .+ -1 * ⟨v,u⟩ .* v), (⟨v,v⟩ .* u .+ -1 * ⟨v,u⟩ .* v) ⟩ =

0 commit comments

Comments
 (0)