@@ -362,6 +362,40 @@ Qed.
362362
363363Local 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 *)
366400Lemma 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