Skip to content

Commit 7117d5a

Browse files
affeldt-aistHolger Thies
andcommitted
shorten proofs
Co-authored-by: Holger Thies <thies.holger.5c@kyoto-u.ac.jp>
1 parent 9aed9f2 commit 7117d5a

3 files changed

Lines changed: 37 additions & 24 deletions

File tree

CHANGELOG_UNRELEASED.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@
110110
`differentiable_row_mx`
111111
+ instance `is_diff_row_mx`
112112

113+
- in `unstable.v`:
114+
+ lemma `big_split_ord_idem`
115+
113116
### Changed
114117

115118
- moved from `measurable_structure.v` to `classical_sets.v`:

classical/unstable.v

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -651,3 +651,21 @@ End Theory.
651651
Module Import Exports. HB.reexport. End Exports.
652652
End Norm.
653653
Export Norm.Exports.
654+
655+
(* NB: big_split_org in bigop.v requires Monoid.law idx,
656+
big_split_ord_idem will be made available from MathComp
657+
via PR https://github.com/math-comp/math-comp/pull/1608
658+
(MathComp 2.7.0) *)
659+
Lemma big_split_ord_idem [R : Type] [idx : R] (op : SemiGroup.com_law R) m n
660+
(P : pred 'I_(m + n)) F :
661+
op idx idx = idx ->
662+
\big[op/idx]_(i | P i) F i =
663+
op (\big[op/idx]_(i | P (lshift n i)) F (lshift n i))
664+
(\big[op/idx]_(i | P (rshift m i)) F (rshift m i)).
665+
Proof.
666+
move=> opxx.
667+
rewrite -(big_map (lshift n) P F) -(big_map (@rshift m _) P F).
668+
rewrite -big_cat_idem//; congr bigop; apply: (inj_map val_inj).
669+
rewrite map_cat -!map_comp (map_comp (addn m)) /=.
670+
by rewrite ![index_enum _]unlock unlock !val_ord_enum -iotaDl addn0 iotaD.
671+
Qed.

theories/normedtype_theory/matrix_normedtype.v

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
From HB Require Import structures.
33
From mathcomp Require Import all_ssreflect_compat finmap ssralg ssrnum matrix.
44
From mathcomp Require Import interval interval_inference.
5+
#[warning="-warn-library-file-internal-analysis"]
6+
From mathcomp Require Import unstable.
57
From mathcomp Require Import boolp contra classical_sets reals topology.
68
From mathcomp Require Import prodnormedzmodule tvs pseudometric_normed_Zmodule.
79
From mathcomp Require Import normed_module.
@@ -281,34 +283,24 @@ Implicit Types (M : 'M[K]_(m, n1)) (N : 'M[K]_(m, n2)).
281283

282284
Lemma norm_row_mx0r M : `|row_mx M (0 : 'M_(m, n2))| = `|M|.
283285
Proof.
284-
apply/eqP; rewrite eq_le; apply/andP; split.
285-
- rewrite [leLHS]/Num.norm/= !mx_normrE/=; apply/bigmax_le => // -[i j]/= _.
286-
rewrite mxE; case: splitP => k kE; last by rewrite mxE normr0.
287-
by rewrite [leRHS]/Num.norm/= !mx_normrE/= (le_bigmax _ _ (i, k)).
288-
- rewrite [leLHS]/Num.norm/= !mx_normrE/=; apply/bigmax_le => // -[i j]/= _.
289-
rewrite [leRHS]/Num.norm/= !mx_normrE/=.
290-
rewrite (le_trans _(le_bigmax _ _ (i, lshift n2 j)))// mxE/=.
291-
case: splitP => // k kE.
292-
rewrite (_ : j = k)//; apply: val_inj => /=.
293-
by apply/eqP; rewrite -(eqn_add2l n1) -kE.
294-
absurd: kE.
295-
by rewrite ltn_eqF// (leq_trans (ltn_ord j))// /lshift/= leq_addr.
286+
rewrite /Num.norm/= !mx_normrE.
287+
rewrite -!(pair_bigA_idem _ (fun i j => `|_ i j|))/= ?maxxx//.
288+
apply: eq_bigr => i _.
289+
have ? := maxxx (0 : K).
290+
rewrite big_split_ord_idem//= [X in maxr _ X = _]big1_idem//=.
291+
by move=> ? _; rewrite row_mxEr mxE normr0.
292+
by rewrite -bigmax_idr; apply: eq_bigr => j _; rewrite row_mxEl.
296293
Qed.
297294

298295
Lemma norm_row_mx0l N : `|row_mx (0 : 'M_(m, n1)) N| = `|N|.
299296
Proof.
300-
apply/eqP; rewrite eq_le; apply/andP; split.
301-
- rewrite [leLHS]/Num.norm/= !mx_normrE/=; apply/bigmax_le => // -[i j]/= _.
302-
rewrite mxE; case: splitP => k kE; first by rewrite mxE normr0.
303-
by rewrite [leRHS]/Num.norm/= !mx_normrE/= (le_bigmax _ _ (i, k)).
304-
- rewrite [leLHS]/Num.norm/= !mx_normrE/=; apply/bigmax_le => // -[i j]/= _.
305-
rewrite [leRHS]/Num.norm/= !mx_normrE/=.
306-
rewrite (le_trans _ (le_bigmax _ _ (i, rshift n1 j)))// mxE/=.
307-
case: splitP => // k kE.
308-
absurd: kE.
309-
by rewrite gtn_eqF// (leq_trans (ltn_ord k))// /rshift/= leq_addr.
310-
rewrite (_ : j = k)//; apply: val_inj => /=.
311-
by apply/eqP; rewrite -(eqn_add2l n1) -kE.
297+
rewrite /Num.norm/= !mx_normrE.
298+
rewrite -!(pair_bigA_idem _ (fun i j => `|_ i j|))/= ?maxxx//.
299+
apply: eq_bigr => i _.
300+
have ? := maxxx (0 : K).
301+
rewrite big_split_ord_idem//= [X in maxr X _ = _]big1_idem//=.
302+
by move=> ? _; rewrite row_mxEl mxE normr0.
303+
by rewrite -bigmax_idl; apply: eq_bigr => j _; rewrite row_mxEr.
312304
Qed.
313305

314306
Lemma norm_row_mx M N : `|row_mx M N| = Num.max `|M| `|N|.

0 commit comments

Comments
 (0)