@@ -285,6 +285,11 @@ open real
285
285
def op_norm := Inf {c | 0 ≤ (c : ℝ) ∧ ∀ m, ∥f m∥ ≤ c * ∏ i, ∥m i∥}
286
286
instance has_op_norm : has_norm (continuous_multilinear_map 𝕜 E G) := ⟨op_norm⟩
287
287
288
+ /-- An alias of `continuous_multilinear_map.has_op_norm` with non-dependent types to help typeclass
289
+ search. -/
290
+ instance has_op_norm' : has_norm (continuous_multilinear_map 𝕜 (λ (i : ι), G) G') :=
291
+ continuous_multilinear_map.has_op_norm
292
+
288
293
lemma norm_def : ∥f∥ = Inf {c | 0 ≤ (c : ℝ) ∧ ∀ m, ∥f m∥ ≤ c * ∏ i, ∥m i∥} := rfl
289
294
290
295
-- So that invocations of `le_cInf` make sense: we show that the set of
@@ -669,43 +674,28 @@ end
669
674
670
675
section
671
676
672
- variables (𝕜 ι) (A : Type *) [normed_comm_ring A] [normed_algebra 𝕜 A]
673
-
674
- /-- The continuous multilinear map on `A^ι`, where `A` is a normed commutative algebra
675
- over `𝕜`, associating to `m` the product of all the `m i`.
676
-
677
- See also `continuous_multilinear_map.mk_pi_algebra_fin`. -/
678
- protected def mk_pi_algebra : continuous_multilinear_map 𝕜 (λ i : ι, A) A :=
679
- multilinear_map.mk_continuous
680
- (multilinear_map.mk_pi_algebra 𝕜 ι A) (if nonempty ι then 1 else ∥(1 : A)∥) $
681
- begin
682
- intro m,
683
- casesI is_empty_or_nonempty ι with hι hι,
684
- { simp [eq_empty_of_is_empty univ, not_nonempty_iff.2 hι] },
685
- { simp [norm_prod_le' univ univ_nonempty, hι] }
686
- end
687
-
688
- variables {A 𝕜 ι}
689
-
690
- @[simp] lemma mk_pi_algebra_apply (m : ι → A) :
691
- continuous_multilinear_map.mk_pi_algebra 𝕜 ι A m = ∏ i, m i :=
692
- rfl
677
+ variables {𝕜 ι} {A : Type *} [normed_comm_ring A] [normed_algebra 𝕜 A]
693
678
679
+ @[simp]
694
680
lemma norm_mk_pi_algebra_le [nonempty ι] :
695
681
∥continuous_multilinear_map.mk_pi_algebra 𝕜 ι A∥ ≤ 1 :=
696
- calc ∥continuous_multilinear_map.mk_pi_algebra 𝕜 ι A∥ ≤ if nonempty ι then 1 else ∥(1 : A)∥ :
697
- multilinear_map.mk_continuous_norm_le _ (by split_ifs; simp [zero_le_one]) _
698
- ... = _ : if_pos ‹_›
682
+ begin
683
+ have := λ f, @op_norm_le_bound 𝕜 ι (λ i, A) A _ _ _ _ _ _ _ f _ zero_le_one,
684
+ refine this _ _,
685
+ intros m,
686
+ simp only [continuous_multilinear_map.mk_pi_algebra_apply, one_mul],
687
+ exact norm_prod_le' _ univ_nonempty _,
688
+ end
699
689
700
690
lemma norm_mk_pi_algebra_of_empty [is_empty ι] :
701
691
∥continuous_multilinear_map.mk_pi_algebra 𝕜 ι A∥ = ∥(1 : A)∥ :=
702
692
begin
703
693
apply le_antisymm,
704
- calc ∥continuous_multilinear_map.mk_pi_algebra 𝕜 ι A∥ ≤ if nonempty ι then 1 else ∥( 1 : A)∥ :
705
- multilinear_map.mk_continuous_norm_le _ ( by split_ifs; simp [zero_le_one]) _
706
- ... = ∥( 1 : A)∥ : if_neg (not_nonempty_iff.mpr ‹_›) ,
707
- convert ratio_le_op_norm _ (λ _, (1 : A)),
708
- simp [eq_empty_of_is_empty (univ : finset ι)],
694
+ { have := λ f, @op_norm_le_bound 𝕜 ι (λ i, A) A _ _ _ _ _ _ _ f _ (norm_nonneg ( 1 : A)),
695
+ refine this _ _,
696
+ simp, } ,
697
+ { convert ratio_le_op_norm _ (λ _, (1 : A)),
698
+ simp [eq_empty_of_is_empty (univ : finset ι)], } ,
709
699
end
710
700
711
701
@[simp] lemma norm_mk_pi_algebra [norm_one_class A] :
@@ -722,42 +712,38 @@ end
722
712
723
713
section
724
714
725
- variables (𝕜 n) (A : Type *) [normed_ring A] [normed_algebra 𝕜 A]
726
-
727
- /-- The continuous multilinear map on `A^n`, where `A` is a normed algebra over `𝕜`, associating to
728
- `m` the product of all the `m i`.
729
-
730
- See also: `multilinear_map.mk_pi_algebra`. -/
731
- protected def mk_pi_algebra_fin : continuous_multilinear_map 𝕜 (λ i : fin n, A) A :=
732
- multilinear_map.mk_continuous
733
- (multilinear_map.mk_pi_algebra_fin 𝕜 n A) (nat.cases_on n ∥(1 : A)∥ (λ _, 1 )) $
734
- begin
735
- intro m,
736
- cases n,
737
- { simp },
738
- { have : @list.of_fn A n.succ m ≠ [] := by simp,
739
- simpa [← fin.prod_of_fn] using list.norm_prod_le' this }
740
- end
741
-
742
- variables {A 𝕜 n}
743
-
744
- @[simp] lemma mk_pi_algebra_fin_apply (m : fin n → A) :
745
- continuous_multilinear_map.mk_pi_algebra_fin 𝕜 n A m = (list.of_fn m).prod :=
746
- rfl
715
+ variables {𝕜 n} {A : Type *} [normed_ring A] [normed_algebra 𝕜 A]
747
716
748
717
lemma norm_mk_pi_algebra_fin_succ_le :
749
718
∥continuous_multilinear_map.mk_pi_algebra_fin 𝕜 n.succ A∥ ≤ 1 :=
750
- multilinear_map.mk_continuous_norm_le _ zero_le_one _
719
+ begin
720
+ have := λ f, @op_norm_le_bound 𝕜 (fin n.succ) (λ i, A) A _ _ _ _ _ _ _ f _ zero_le_one,
721
+ refine this _ _,
722
+ intros m,
723
+ simp only [continuous_multilinear_map.mk_pi_algebra_fin_apply, one_mul, list.of_fn_eq_map,
724
+ fin.univ_def, finset.fin_range, finset.prod, multiset.coe_map, multiset.coe_prod],
725
+ refine (list.norm_prod_le' _).trans_eq _,
726
+ { rw [ne.def, list.map_eq_nil, list.fin_range_eq_nil],
727
+ exact nat.succ_ne_zero _, },
728
+ rw list.map_map,
729
+ end
751
730
752
731
lemma norm_mk_pi_algebra_fin_le_of_pos (hn : 0 < n) :
753
732
∥continuous_multilinear_map.mk_pi_algebra_fin 𝕜 n A∥ ≤ 1 :=
754
- by cases n; [exact hn.false.elim, exact norm_mk_pi_algebra_fin_succ_le]
733
+ begin
734
+ obtain ⟨n, rfl⟩ := nat.exists_eq_succ_of_ne_zero hn.ne',
735
+ exact norm_mk_pi_algebra_fin_succ_le
736
+ end
755
737
756
738
lemma norm_mk_pi_algebra_fin_zero :
757
739
∥continuous_multilinear_map.mk_pi_algebra_fin 𝕜 0 A∥ = ∥(1 : A)∥ :=
758
740
begin
759
- refine le_antisymm (multilinear_map.mk_continuous_norm_le _ (norm_nonneg _) _) _,
760
- convert ratio_le_op_norm _ (λ _, 1 ); [simp, apply_instance]
741
+ refine le_antisymm _ _,
742
+ { have := λ f, @op_norm_le_bound 𝕜 (fin 0 ) (λ i, A) A _ _ _ _ _ _ _ f _ (norm_nonneg (1 : A)),
743
+ refine this _ _,
744
+ simp, },
745
+ { convert ratio_le_op_norm _ (λ _, (1 : A)),
746
+ simp }
761
747
end
762
748
763
749
@[simp] lemma norm_mk_pi_algebra_fin [norm_one_class A] :
0 commit comments