@@ -26,10 +26,11 @@ The space `lp E p` is the subtype of elements of `Π i : α, E i` which satisfy
26
26
27
27
* `mem_ℓp f p` : property that the function `f` satisfies, as appropriate, `f` finitely supported
28
28
if `p = 0`, `summable (λ a, ∥f a∥^p)` if `0 < p < ∞`, and `bdd_above (norm '' (set.range f))` if
29
- `p = ∞`
29
+ `p = ∞`.
30
30
* `lp E p` : elements of `Π i : α, E i` such that `mem_ℓp f p`. Defined as an `add_subgroup` of
31
- a type synonym `pre_lp` for `Π i : α, E i`, and equipped with a `normed_group` structure; also
32
- equipped with `normed_space 𝕜` and `complete_space` instances under appropriate conditions
31
+ a type synonym `pre_lp` for `Π i : α, E i`, and equipped with a `normed_group` structure.
32
+ Under appropriate conditions, this is also equipped with the instances `lp.normed_space`,
33
+ `lp.complete_space`, and `lp.normed_ring`.
33
34
34
35
## Main results
35
36
@@ -628,6 +629,117 @@ end
628
629
629
630
end normed_space
630
631
632
+ section non_unital_normed_ring
633
+
634
+ variables {I : Type *} {B : I → Type *} [Π i, non_unital_normed_ring (B i)]
635
+
636
+ lemma _root_.mem_ℓp.infty_mul {f g : Π i, B i} (hf : mem_ℓp f ∞) (hg : mem_ℓp g ∞) :
637
+ mem_ℓp (f * g) ∞ :=
638
+ begin
639
+ rw mem_ℓp_infty_iff,
640
+ obtain ⟨⟨Cf, hCf⟩, ⟨Cg, hCg⟩⟩ := ⟨hf.bdd_above, hg.bdd_above⟩,
641
+ refine ⟨Cf * Cg, _⟩,
642
+ rintros _ ⟨i, rfl⟩,
643
+ calc ∥(f * g) i∥ ≤ ∥f i∥ * ∥g i∥ : norm_mul_le (f i) (g i)
644
+ ... ≤ Cf * Cg : mul_le_mul (hCf ⟨i, rfl⟩) (hCg ⟨i, rfl⟩) (norm_nonneg _)
645
+ ((norm_nonneg _).trans (hCf ⟨i, rfl⟩))
646
+ end
647
+
648
+ instance : has_mul (lp B ∞) :=
649
+ { mul := λ f g, ⟨(f * g : Π i, B i) , f.property.infty_mul g.property⟩}
650
+
651
+ @[simp] lemma infty_coe_fn_mul (f g : lp B ∞) : ⇑(f * g) = f * g := rfl
652
+
653
+ instance : non_unital_ring (lp B ∞) :=
654
+ function.injective.non_unital_ring lp.has_coe_to_fun.coe (subtype.coe_injective)
655
+ (lp.coe_fn_zero B ∞) lp.coe_fn_add infty_coe_fn_mul lp.coe_fn_neg lp.coe_fn_sub
656
+ (λ _ _, rfl) (λ _ _,rfl)
657
+
658
+ instance : non_unital_normed_ring (lp B ∞) :=
659
+ { norm_mul := λ f g, lp.norm_le_of_forall_le (mul_nonneg (norm_nonneg f) (norm_nonneg g))
660
+ (λ i, calc ∥(f * g) i∥ ≤ ∥f i∥ * ∥g i∥ : norm_mul_le _ _
661
+ ... ≤ ∥f∥ * ∥g∥
662
+ : mul_le_mul (lp.norm_apply_le_norm ennreal.top_ne_zero f i)
663
+ (lp.norm_apply_le_norm ennreal.top_ne_zero g i) (norm_nonneg _) (norm_nonneg _)),
664
+ .. lp.normed_group }
665
+
666
+ -- we also want a `non_unital_normed_comm_ring` instance, but this has to wait for #13719
667
+
668
+ end non_unital_normed_ring
669
+
670
+ section normed_ring
671
+
672
+ variables {I : Type *} {B : I → Type *} [Π i, normed_ring (B i)] [Π i, norm_one_class (B i)]
673
+
674
+ lemma _root_.one_mem_ℓp_infty : mem_ℓp (1 : Π i, B i) ∞ :=
675
+ ⟨1 , by { rintros i ⟨i, rfl⟩, exact norm_one.le,}⟩
676
+
677
+ instance : has_one (lp B ∞) :=
678
+ { one := ⟨(1 : Π i, B i), one_mem_ℓp_infty⟩ }
679
+
680
+ @[simp] lemma infty_coe_fn_one : ⇑(1 : lp B ∞) = 1 := rfl
681
+
682
+ lemma _root_.mem_ℓp.infty_pow {f : Π i, B i} (hf : mem_ℓp f ∞) (n : ℕ) : mem_ℓp (f ^ n) ∞ :=
683
+ begin
684
+ induction n with n hn,
685
+ { rw pow_zero,
686
+ exact one_mem_ℓp_infty },
687
+ { rw pow_succ,
688
+ exact hf.infty_mul hn }
689
+ end
690
+
691
+ instance [nonempty I] : norm_one_class (lp B ∞) :=
692
+ { norm_one := by simp_rw [lp.norm_eq_csupr, infty_coe_fn_one, pi.one_apply, norm_one, csupr_const]}
693
+
694
+ instance : has_pow (lp B ∞) ℕ := { pow := λ f n, ⟨_, f.prop.infty_pow n⟩ }
695
+
696
+ @[simp] lemma infty_coe_fn_pow (f : lp B ∞) (n : ℕ) : ⇑(f ^ n) = f ^ n := rfl
697
+
698
+ lemma _root_.nat_cast_mem_ℓp_infty : ∀ (n : ℕ), mem_ℓp (n : Π i, B i) ∞
699
+ | 0 := by { rw nat.cast_zero, exact zero_mem_ℓp }
700
+ | (n + 1 ) := by { rw nat.cast_succ, exact (_root_.nat_cast_mem_ℓp_infty n).add one_mem_ℓp_infty }
701
+
702
+ instance : has_nat_cast (lp B ∞) := { nat_cast := λ n, ⟨(↑n : Π i, B i), nat_cast_mem_ℓp_infty _⟩ }
703
+
704
+ @[simp] lemma infty_coe_fn_nat_cast (n : ℕ) : ⇑(n : lp B ∞) = n := rfl
705
+
706
+ lemma _root_.int_cast_mem_ℓp_infty (z : ℤ) : mem_ℓp (z : Π i, B i) ∞ :=
707
+ begin
708
+ obtain ⟨n, rfl | rfl⟩ := z.eq_coe_or_neg,
709
+ { rw int.cast_coe_nat,
710
+ exact nat_cast_mem_ℓp_infty n },
711
+ { rw [int.cast_neg, int.cast_coe_nat],
712
+ exact (nat_cast_mem_ℓp_infty n).neg }
713
+ end
714
+
715
+ instance : has_int_cast (lp B ∞) := { int_cast := λ z, ⟨(↑z : Π i, B i), int_cast_mem_ℓp_infty _⟩ }
716
+
717
+ @[simp] lemma infty_coe_fn_int_cast (z : ℤ) : ⇑(z : lp B ∞) = z := rfl
718
+
719
+ instance : ring (lp B ∞) :=
720
+ function.injective.ring lp.has_coe_to_fun.coe subtype.coe_injective
721
+ (lp.coe_fn_zero B ∞) (infty_coe_fn_one) lp.coe_fn_add infty_coe_fn_mul
722
+ lp.coe_fn_neg lp.coe_fn_sub (λ _ _, rfl) (λ _ _, rfl) infty_coe_fn_pow
723
+ infty_coe_fn_nat_cast infty_coe_fn_int_cast
724
+
725
+ instance : normed_ring (lp B ∞) :=
726
+ { .. lp.ring, .. lp.non_unital_normed_ring }
727
+
728
+ end normed_ring
729
+
730
+ section normed_comm_ring
731
+
732
+ variables {I : Type *} {B : I → Type *} [Π i, normed_comm_ring (B i)] [∀ i, norm_one_class (B i)]
733
+
734
+ instance : comm_ring (lp B ∞) :=
735
+ { mul_comm := λ f g, by { ext, simp only [lp.infty_coe_fn_mul, pi.mul_apply, mul_comm] },
736
+ .. lp.ring }
737
+
738
+ instance : normed_comm_ring (lp B ∞) :=
739
+ { .. lp.comm_ring, .. lp.normed_ring }
740
+
741
+ end normed_comm_ring
742
+
631
743
section single
632
744
variables {𝕜 : Type *} [normed_field 𝕜] [Π i, normed_space 𝕜 (E i)]
633
745
variables [decidable_eq α]
0 commit comments