@@ -362,6 +362,40 @@ Qed.
362
362
363
363
Local Close Scope nat_scope.
364
364
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
+
365
399
(* We can now prove Cauchy-Schwartz for vectors with inner_product *)
366
400
Lemma CS_key_lemma : forall {n} (u v : Vector n),
367
401
fst ⟨ (⟨v,v⟩ .* u .+ -1 * ⟨v,u⟩ .* v), (⟨v,v⟩ .* u .+ -1 * ⟨v,u⟩ .* v) ⟩ =
0 commit comments