analysis.normed_space.pi_Lp
⟷
Mathlib.Analysis.NormedSpace.PiLp
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
The missing blank line makes a mess in doc-gen.
Hopefully this file was just strangely formatted, and this isn't a new bug in the script.
@@ -12,6 +12,7 @@ import linear_algebra.matrix.basis
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
> Any changes to this file require a corresponding PR to mathlib4.
+
Given finitely many metric spaces, one can put the max distance on their product, but there is also
a whole family of natural distances, indexed by a parameter `p : ℝ≥0∞`, that also induce
the product topology. We define them in this file. For `0 < p < ∞`, the distance on `Π i, α i`
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -629,7 +629,7 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) :=
by
have := p.to_real_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.natCast_ne_top n)
- simp only [one_div, h, Real.rpow_nat_cast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
+ simp only [one_div, h, Real.rpow_natCast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -450,7 +450,7 @@ theorem antilipschitzWith_equiv_aux :
simp only [nsmul_eq_mul, Finset.card_univ, ENNReal.rpow_one, Finset.sum_const,
ENNReal.mul_rpow_of_nonneg _ _ nonneg, ← ENNReal.rpow_mul, cancel]
have : (Fintype.card ι : ℝ≥0∞) = (Fintype.card ι : ℝ≥0) :=
- (ENNReal.coe_nat (Fintype.card ι)).symm
+ (ENNReal.coe_natCast (Fintype.card ι)).symm
rw [this, ENNReal.coe_rpow_of_nonneg _ nonneg]
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
-/
@@ -628,7 +628,7 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) :=
by
- have := p.to_real_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.nat_ne_top n)
+ have := p.to_real_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.natCast_ne_top n)
simp only [one_div, h, Real.rpow_nat_cast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -66,7 +66,7 @@ We also set up the theory for `pseudo_emetric_space` and `pseudo_metric_space`.
-/
-open Real Set Filter IsROrC Bornology
+open Real Set Filter RCLike Bornology
open scoped BigOperators uniformity Topology NNReal ENNReal
@@ -406,7 +406,7 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
·
simpa only [ENNReal.coe_one, one_mul, edist_eq_supr, edist, Finset.sup_le_iff, Finset.mem_univ,
forall_true_left] using le_iSup fun i => edist (x i) (y i)
- · have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le h).ne'
+ · have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel₀ 1 (zero_lt_one.trans_le h).ne'
rw [edist_eq_sum (zero_lt_one.trans_le h)]
simp only [edist, forall_prop_of_true, one_mul, Finset.mem_univ, Finset.sup_le_iff,
ENNReal.coe_one]
@@ -432,7 +432,7 @@ theorem antilipschitzWith_equiv_aux :
exact fun i => Finset.le_sup (Finset.mem_univ i)
· have pos : 0 < p.to_real := zero_lt_one.trans_le h
have nonneg : 0 ≤ 1 / p.to_real := one_div_nonneg.2 (le_of_lt Pos)
- have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (ne_of_gt Pos)
+ have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel₀ 1 (ne_of_gt Pos)
rw [edist_eq_sum Pos, ENNReal.toReal_div 1 p]
simp only [edist, ← one_div, ENNReal.one_toReal]
calc
@@ -690,7 +690,7 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
· letI : Module 𝕜 (PiLp ∞ β) := Pi.module ι β 𝕜
suffices ‖c • f‖₊ = ‖c‖₊ * ‖f‖₊ by exact_mod_cast NNReal.coe_mono this.le
simpa only [nnnorm_eq_csupr, NNReal.mul_iSup, ← nnnorm_smul]
- · have : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le hp).ne'
+ · have : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel₀ 1 (zero_lt_one.trans_le hp).ne'
simp only [norm_eq_sum (zero_lt_one.trans_le hp), norm_smul, mul_rpow, norm_nonneg, ←
Finset.mul_sum, Pi.smul_apply]
rw [mul_rpow (rpow_nonneg_of_nonneg (norm_nonneg _) _), ← rpow_mul (norm_nonneg _), this,
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -596,7 +596,7 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
dist_eq := fun x y => by
rcases p.dichotomy with (rfl | h)
· simpa only [dist_eq_csupr, norm_eq_csupr, dist_eq_norm]
- · have : p ≠ ∞ := by intro hp; rw [hp, ENNReal.top_toReal] at h ; linarith
+ · have : p ≠ ∞ := by intro hp; rw [hp, ENNReal.top_toReal] at h; linarith
simpa only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
dist_eq_norm] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
@@ -1122,7 +1122,7 @@ theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι =>
have := basis_toMatrix_basisFun_mul (b.map (PiLp.linearEquiv _ 𝕜 _)) A
simp_rw [← PiLp.basisFun_map p, Basis.map_repr, LinearEquiv.trans_apply,
PiLp.linearEquiv_symm_apply, Basis.toMatrix_map, Function.comp, Basis.map_apply,
- LinearEquiv.symm_apply_apply] at this
+ LinearEquiv.symm_apply_apply] at this
exact this
#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mul
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -379,7 +379,7 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
rcases p.dichotomy with (rfl | h)
· rw [edist_eq_supr, dist_eq_csupr]
· cases isEmpty_or_nonempty ι
- · simp only [Real.ciSup_empty, ciSup_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
+ · simp only [Real.iSup_of_isEmpty, ciSup_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
· refine' le_antisymm (ciSup_le fun i => _) _
· rw [← ENNReal.ofReal_le_iff_le_toReal (supr_edist_ne_top_aux f g), ←
PseudoMetricSpace.edist_dist]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -243,18 +243,18 @@ section Norm
variable [∀ i, Norm (β i)] [∀ i, Zero (β i)]
-#print PiLp.hasNorm /-
+#print PiLp.instNorm /-
/-- Endowing the space `pi_Lp p β` with the `L^p` norm. We register this instance
separate from `pi_Lp.seminormed_add_comm_group` since the latter requires the type class hypothesis
`[fact (1 ≤ p)]` in order to prove the triangle inequality.
Registering this separately allows for a future norm-like structure on `pi_Lp p β` for `p < 1`
satisfying a relaxed triangle inequality. These are called *quasi-norms*. -/
-instance hasNorm : Norm (PiLp p β)
+instance instNorm : Norm (PiLp p β)
where norm f :=
if hp : p = 0 then {i | f i ≠ 0}.toFinite.toFinset.card
else if p = ∞ then ⨆ i, ‖f i‖ else (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal)
-#align pi_Lp.has_norm PiLp.hasNorm
+#align pi_Lp.has_norm PiLp.instNorm
-/
variable {p β}
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -346,7 +346,7 @@ theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
[∀ i, PseudoMetricSpace (α i)] (f g : PiLp ∞ α) : (⨆ i, edist (f i) (g i)) ≠ ⊤ :=
by
cases nonempty_fintype ι
- obtain ⟨M, hM⟩ := Fintype.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
+ obtain ⟨M, hM⟩ := Finite.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
refine' ne_of_lt ((iSup_le fun i => _).trans_lt (@ENNReal.coe_lt_top M))
simp only [edist, PseudoMetricSpace.edist_dist, ENNReal.ofReal_eq_coe_nnreal dist_nonneg]
exact_mod_cast hM i
@@ -388,7 +388,7 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
· rintro - ⟨i, rfl⟩
exact dist_nonneg
· unfold edist; rw [PseudoMetricSpace.edist_dist]
- exact ENNReal.ofReal_le_ofReal (le_ciSup (Fintype.bddAbove_range _) i)
+ exact ENNReal.ofReal_le_ofReal (le_ciSup (Finite.bddAbove_range _) i)
· have A : ∀ i, edist (f i) (g i) ^ p.to_real ≠ ⊤ := fun i =>
ENNReal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)
simp only [edist_eq_sum (zero_lt_one.trans_le h), dist_edist, ENNReal.toReal_rpow,
@@ -767,7 +767,7 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
suffices (finset.univ.sup fun i => ‖f i‖₊) = ⨆ i, ‖f i‖₊ by
simpa only [NNReal.coe_iSup] using congr_arg (coe : ℝ≥0 → ℝ) this
refine'
- antisymm (Finset.sup_le fun i _ => le_ciSup (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
+ antisymm (Finset.sup_le fun i _ => le_ciSup (Finite.bddAbove_range fun i => ‖f i‖₊) _) _
cases isEmpty_or_nonempty ι
· simp only [ciSup_of_empty, Finset.univ_eq_empty, Finset.sup_empty]
· exact ciSup_le fun i => Finset.le_sup (Finset.mem_univ i) }
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -551,14 +551,14 @@ instance [∀ i, MetricSpace (α i)] : MetricSpace (PiLp p α) :=
theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) :=
- Subtype.ext <| by push_cast ; exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
+ Subtype.ext <| by push_cast; exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
-/
#print PiLp.nndist_eq_iSup /-
theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
- Subtype.ext <| by push_cast ; exact dist_eq_csupr _ _
+ Subtype.ext <| by push_cast; exact dist_eq_csupr _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
-/
@@ -644,7 +644,7 @@ theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)
#print PiLp.nnnorm_eq_of_L2 /-
theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖₊ = NNReal.sqrt (∑ i : ι, ‖x i‖₊ ^ 2) :=
- Subtype.ext <| by push_cast ; exact norm_eq_of_L2 x
+ Subtype.ext <| by push_cast; exact norm_eq_of_L2 x
#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2
-/
@@ -668,7 +668,7 @@ theorem dist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)
#print PiLp.nndist_eq_of_L2 /-
theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
nndist x y = (∑ i, nndist (x i) (y i) ^ 2).sqrt :=
- Subtype.ext <| by push_cast ; exact dist_eq_of_L2 _ _
+ Subtype.ext <| by push_cast; exact dist_eq_of_L2 _ _
#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
-/
-import Mathbin.Analysis.MeanInequalities
-import Mathbin.Data.Fintype.Order
-import Mathbin.LinearAlgebra.Matrix.Basis
+import Analysis.MeanInequalities
+import Data.Fintype.Order
+import LinearAlgebra.Matrix.Basis
#align_import analysis.normed_space.pi_Lp from "leanprover-community/mathlib"@"9d013ad8430ddddd350cff5c3db830278ded3c79"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -90,30 +90,28 @@ namespace PiLp
variable (p : ℝ≥0∞) (𝕜 𝕜' : Type _) {ι : Type _} (α : ι → Type _) (β : ι → Type _)
-#print PiLp.equiv /-
/-- Canonical bijection between `pi_Lp p α` and the original Pi type. We introduce it to be able
to compare the `L^p` and `L^∞` distances through it. -/
protected def equiv : PiLp p α ≃ ∀ i : ι, α i :=
Equiv.refl _
#align pi_Lp.equiv PiLp.equiv
--/
/-! Note that the unapplied versions of these lemmas are deliberately omitted, as they break
the use of the type synonym. -/
-#print PiLp.equiv_apply /-
+#print WithLp.equiv_pi_apply /-
@[simp]
-theorem equiv_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
+theorem equiv_pi_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
rfl
-#align pi_Lp.equiv_apply PiLp.equiv_apply
+#align pi_Lp.equiv_apply WithLp.equiv_pi_apply
-/
-#print PiLp.equiv_symm_apply /-
+#print WithLp.equiv_symm_pi_apply /-
@[simp]
-theorem equiv_symm_apply (x : ∀ i, α i) (i : ι) : (PiLp.equiv p α).symm x i = x i :=
+theorem equiv_symm_pi_apply (x : ∀ i, α i) (i : ι) : (PiLp.equiv p α).symm x i = x i :=
rfl
-#align pi_Lp.equiv_symm_apply PiLp.equiv_symm_apply
+#align pi_Lp.equiv_symm_apply WithLp.equiv_symm_pi_apply
-/
section DistNorm
@@ -1047,7 +1045,6 @@ theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [O
variable (𝕜 p)
-#print PiLp.linearEquiv /-
/-- `pi_Lp.equiv` as a linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
@@ -1055,7 +1052,6 @@ protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
toFun := PiLp.equiv _ _
invFun := (PiLp.equiv _ _).symm }
#align pi_Lp.linear_equiv PiLp.linearEquiv
--/
#print PiLp.continuousLinearEquiv /-
/-- `pi_Lp.equiv` as a continuous linear equivalence. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -701,26 +701,20 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
#align pi_Lp.normed_space PiLp.normedSpace
-/
-#print PiLp.isScalarTower /-
instance isScalarTower [∀ i, SeminormedAddCommGroup (β i)] [SMul 𝕜 𝕜'] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, IsScalarTower 𝕜 𝕜' (β i)] : IsScalarTower 𝕜 𝕜' (PiLp p β) :=
Pi.isScalarTower
#align pi_Lp.is_scalar_tower PiLp.isScalarTower
--/
-#print PiLp.smulCommClass /-
-instance smulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
+instance sMulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, SMulCommClass 𝕜 𝕜' (β i)] : SMulCommClass 𝕜 𝕜' (PiLp p β) :=
Pi.smulCommClass
-#align pi_Lp.smul_comm_class PiLp.smulCommClass
--/
+#align pi_Lp.smul_comm_class PiLp.sMulCommClass
-#print PiLp.finiteDimensional /-
instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[I : ∀ i, FiniteDimensional 𝕜 (β i)] : FiniteDimensional 𝕜 (PiLp p β) :=
FiniteDimensional.finiteDimensional_pi' _ _
#align pi_Lp.finite_dimensional PiLp.finiteDimensional
--/
/- Register simplification lemmas for the applications of `pi_Lp` elements, as the usual lemmas
for Pi types will not trigger. -/
@@ -838,76 +832,76 @@ theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq
#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_single
-/
-#print PiLp.equiv_zero /-
+#print WithLp.equiv_zero /-
@[simp]
theorem equiv_zero : PiLp.equiv p β 0 = 0 :=
rfl
-#align pi_Lp.equiv_zero PiLp.equiv_zero
+#align pi_Lp.equiv_zero WithLp.equiv_zero
-/
-#print PiLp.equiv_symm_zero /-
+#print WithLp.equiv_symm_zero /-
@[simp]
theorem equiv_symm_zero : (PiLp.equiv p β).symm 0 = 0 :=
rfl
-#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zero
+#align pi_Lp.equiv_symm_zero WithLp.equiv_symm_zero
-/
-#print PiLp.equiv_add /-
+#print WithLp.equiv_add /-
@[simp]
theorem equiv_add : PiLp.equiv p β (x + y) = PiLp.equiv p β x + PiLp.equiv p β y :=
rfl
-#align pi_Lp.equiv_add PiLp.equiv_add
+#align pi_Lp.equiv_add WithLp.equiv_add
-/
-#print PiLp.equiv_symm_add /-
+#print WithLp.equiv_symm_add /-
@[simp]
theorem equiv_symm_add :
(PiLp.equiv p β).symm (x' + y') = (PiLp.equiv p β).symm x' + (PiLp.equiv p β).symm y' :=
rfl
-#align pi_Lp.equiv_symm_add PiLp.equiv_symm_add
+#align pi_Lp.equiv_symm_add WithLp.equiv_symm_add
-/
-#print PiLp.equiv_sub /-
+#print WithLp.equiv_sub /-
@[simp]
theorem equiv_sub : PiLp.equiv p β (x - y) = PiLp.equiv p β x - PiLp.equiv p β y :=
rfl
-#align pi_Lp.equiv_sub PiLp.equiv_sub
+#align pi_Lp.equiv_sub WithLp.equiv_sub
-/
-#print PiLp.equiv_symm_sub /-
+#print WithLp.equiv_symm_sub /-
@[simp]
theorem equiv_symm_sub :
(PiLp.equiv p β).symm (x' - y') = (PiLp.equiv p β).symm x' - (PiLp.equiv p β).symm y' :=
rfl
-#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_sub
+#align pi_Lp.equiv_symm_sub WithLp.equiv_symm_sub
-/
-#print PiLp.equiv_neg /-
+#print WithLp.equiv_neg /-
@[simp]
theorem equiv_neg : PiLp.equiv p β (-x) = -PiLp.equiv p β x :=
rfl
-#align pi_Lp.equiv_neg PiLp.equiv_neg
+#align pi_Lp.equiv_neg WithLp.equiv_neg
-/
-#print PiLp.equiv_symm_neg /-
+#print WithLp.equiv_symm_neg /-
@[simp]
theorem equiv_symm_neg : (PiLp.equiv p β).symm (-x') = -(PiLp.equiv p β).symm x' :=
rfl
-#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_neg
+#align pi_Lp.equiv_symm_neg WithLp.equiv_symm_neg
-/
-#print PiLp.equiv_smul /-
+#print WithLp.equiv_smul /-
@[simp]
theorem equiv_smul : PiLp.equiv p β (c • x) = c • PiLp.equiv p β x :=
rfl
-#align pi_Lp.equiv_smul PiLp.equiv_smul
+#align pi_Lp.equiv_smul WithLp.equiv_smul
-/
-#print PiLp.equiv_symm_smul /-
+#print WithLp.equiv_symm_smul /-
@[simp]
theorem equiv_symm_smul : (PiLp.equiv p β).symm (c • x') = c • (PiLp.equiv p β).symm x' :=
rfl
-#align pi_Lp.equiv_symm_smul PiLp.equiv_symm_smul
+#align pi_Lp.equiv_symm_smul WithLp.equiv_symm_smul
-/
section Single
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
-
-! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 9d013ad8430ddddd350cff5c3db830278ded3c79
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.MeanInequalities
import Mathbin.Data.Fintype.Order
import Mathbin.LinearAlgebra.Matrix.Basis
+#align_import analysis.normed_space.pi_Lp from "leanprover-community/mathlib"@"9d013ad8430ddddd350cff5c3db830278ded3c79"
+
/-!
# `L^p` distance on finite products of metric spaces
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -105,10 +105,12 @@ protected def equiv : PiLp p α ≃ ∀ i : ι, α i :=
the use of the type synonym. -/
+#print PiLp.equiv_apply /-
@[simp]
theorem equiv_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
rfl
#align pi_Lp.equiv_apply PiLp.equiv_apply
+-/
#print PiLp.equiv_symm_apply /-
@[simp]
@@ -149,19 +151,25 @@ instance : EDist (PiLp p β)
variable {β}
+#print PiLp.edist_eq_card /-
theorem edist_eq_card (f g : PiLp 0 β) : edist f g = {i | f i ≠ g i}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.edist_eq_card PiLp.edist_eq_card
+-/
+#print PiLp.edist_eq_sum /-
theorem edist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p β) :
edist f g = (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.edist_eq_sum PiLp.edist_eq_sum
+-/
+#print PiLp.edist_eq_iSup /-
theorem edist_eq_iSup (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) := by dsimp [edist];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSup
+-/
end Edist
@@ -169,6 +177,7 @@ section EdistProp
variable {β} [∀ i, PseudoEMetricSpace (β i)]
+#print PiLp.edist_self /-
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
@@ -178,7 +187,9 @@ protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
· simp [edist_eq_supr]
· simp [edist_eq_sum h, ENNReal.zero_rpow_of_pos h, ENNReal.zero_rpow_of_pos (inv_pos.2 <| h)]
#align pi_Lp.edist_self PiLp.edist_self
+-/
+#print PiLp.edist_comm /-
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_comm (f g : PiLp p β) : edist f g = edist g f :=
@@ -188,6 +199,7 @@ protected theorem edist_comm (f g : PiLp p β) : edist f g = edist g f :=
· simp only [edist_eq_supr, edist_comm]
· simp only [edist_eq_sum h, edist_comm]
#align pi_Lp.edist_comm PiLp.edist_comm
+-/
end EdistProp
@@ -210,19 +222,25 @@ instance : Dist (PiLp p α)
variable {α}
+#print PiLp.dist_eq_card /-
theorem dist_eq_card (f g : PiLp 0 α) : dist f g = {i | f i ≠ g i}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.dist_eq_card PiLp.dist_eq_card
+-/
+#print PiLp.dist_eq_sum /-
theorem dist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p α) :
dist f g = (∑ i, dist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.dist_eq_sum PiLp.dist_eq_sum
+-/
+#print PiLp.dist_eq_iSup /-
theorem dist_eq_iSup (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) := by dsimp [dist];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSup
+-/
end Dist
@@ -246,19 +264,25 @@ instance hasNorm : Norm (PiLp p β)
variable {p β}
+#print PiLp.norm_eq_card /-
theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = {i | f i ≠ 0}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.norm_eq_card PiLp.norm_eq_card
+-/
+#print PiLp.norm_eq_ciSup /-
theorem norm_eq_ciSup (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ := by dsimp [norm];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSup
+-/
+#print PiLp.norm_eq_sum /-
theorem norm_eq_sum (hp : 0 < p.toReal) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.norm_eq_sum PiLp.norm_eq_sum
+-/
end Norm
@@ -285,6 +309,7 @@ variable [Fact (1 ≤ p)] [∀ i, PseudoMetricSpace (α i)] [∀ i, PseudoEMetri
variable [Fintype ι]
+#print PiLp.pseudoEmetricAux /-
/-- Endowing the space `pi_Lp p β` with the `L^p` pseudoemetric structure. This definition is not
satisfactory, as it does not register the fact that the topology and the uniform structure coincide
with the product one. Therefore, we do not register it as an instance. Using this as a temporary
@@ -315,9 +340,11 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β)
(∑ i, edist (g i) (h i) ^ p.to_real) ^ (1 / p.to_real) :=
ENNReal.Lp_add_le _ _ _ hp
#align pi_Lp.pseudo_emetric_aux PiLp.pseudoEmetricAux
+-/
attribute [local instance] PiLp.pseudoEmetricAux
+#print PiLp.iSup_edist_ne_top_aux /-
/-- An auxiliary lemma used twice in the proof of `pi_Lp.pseudo_metric_aux` below. Not intended for
use outside this file. -/
theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
@@ -329,7 +356,9 @@ theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
simp only [edist, PseudoMetricSpace.edist_dist, ENNReal.ofReal_eq_coe_nnreal dist_nonneg]
exact_mod_cast hM i
#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_aux
+-/
+#print PiLp.pseudoMetricAux /-
/-- Endowing the space `pi_Lp p α` with the `L^p` pseudometric structure. This definition is not
satisfactory, as it does not register the fact that the topology, the uniform structure, and the
bornology coincide with the product ones. Therefore, we do not register it as an instance. Using
@@ -370,9 +399,11 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
simp only [edist_eq_sum (zero_lt_one.trans_le h), dist_edist, ENNReal.toReal_rpow,
dist_eq_sum (zero_lt_one.trans_le h), ← ENNReal.toReal_sum fun i _ => A i]
#align pi_Lp.pseudo_metric_aux PiLp.pseudoMetricAux
+-/
attribute [local instance] PiLp.pseudoMetricAux
+#print PiLp.lipschitzWith_equiv_aux /-
theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
by
intro x y
@@ -393,7 +424,9 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
apply ENNReal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans h)
exact Finset.single_le_sum (fun i hi => (bot_le : (0 : ℝ≥0∞) ≤ _)) (Finset.mem_univ i)
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
+-/
+#print PiLp.antilipschitzWith_equiv_aux /-
theorem antilipschitzWith_equiv_aux :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
by
@@ -425,7 +458,9 @@ theorem antilipschitzWith_equiv_aux :
(ENNReal.coe_nat (Fintype.card ι)).symm
rw [this, ENNReal.coe_rpow_of_nonneg _ nonneg]
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
+-/
+#print PiLp.aux_uniformity_eq /-
theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
by
have A : UniformInducing (PiLp.equiv p β) :=
@@ -435,7 +470,9 @@ theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
by ext i <;> rfl
rw [← A.comap_uniformity, this, comap_id]
#align pi_Lp.aux_uniformity_eq PiLp.aux_uniformity_eq
+-/
+#print PiLp.aux_cobounded_eq /-
theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.instBornology :=
calc
cobounded (PiLp p α) = comap (PiLp.equiv p α) (cobounded _) :=
@@ -443,6 +480,7 @@ theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.instBornology
(lipschitzWith_equiv_aux p α).comap_cobounded_le
_ = _ := comap_id
#align pi_Lp.aux_cobounded_eq PiLp.aux_cobounded_eq
+-/
end Aux
@@ -514,25 +552,33 @@ and having as uniformity the product uniformity. -/
instance [∀ i, MetricSpace (α i)] : MetricSpace (PiLp p α) :=
MetricSpace.ofT0PseudoMetricSpace _
+#print PiLp.nndist_eq_sum /-
theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) :=
Subtype.ext <| by push_cast ; exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
+-/
+#print PiLp.nndist_eq_iSup /-
theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
Subtype.ext <| by push_cast ; exact dist_eq_csupr _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
+-/
+#print PiLp.lipschitzWith_equiv /-
theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
lipschitzWith_equiv_aux p β
#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equiv
+-/
+#print PiLp.antilipschitzWith_equiv /-
theorem antilipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
antilipschitzWith_equiv_aux p β
#align pi_Lp.antilipschitz_with_equiv PiLp.antilipschitzWith_equiv
+-/
#print PiLp.infty_equiv_isometry /-
theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp.equiv ∞ β) :=
@@ -546,6 +592,7 @@ theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp
variable (p β)
+#print PiLp.seminormedAddCommGroup /-
/-- seminormed group instance on the product of finitely many normed groups, using the `L^p`
norm. -/
instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
@@ -558,22 +605,30 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
simpa only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
dist_eq_norm] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
+-/
+#print PiLp.normedAddCommGroup /-
/-- normed group instance on the product of finitely many normed groups, using the `L^p` norm. -/
instance normedAddCommGroup [∀ i, NormedAddCommGroup (α i)] : NormedAddCommGroup (PiLp p α) :=
{ PiLp.seminormedAddCommGroup p α with }
#align pi_Lp.normed_add_comm_group PiLp.normedAddCommGroup
+-/
+#print PiLp.nnnorm_eq_sum /-
theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp : p ≠ ∞)
[∀ i, SeminormedAddCommGroup (β i)] (f : PiLp p β) :
‖f‖₊ = (∑ i, ‖f i‖₊ ^ p.toReal) ^ (1 / p.toReal) := by ext;
simp [NNReal.coe_sum, norm_eq_sum (p.to_real_pos_iff_ne_top.mpr hp)]
#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sum
+-/
+#print PiLp.nnnorm_eq_ciSup /-
theorem nnnorm_eq_ciSup {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
‖f‖₊ = ⨆ i, ‖f i‖₊ := by ext; simp [NNReal.coe_iSup, norm_eq_csupr]
#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSup
+-/
+#print PiLp.norm_eq_of_nat /-
theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) :=
@@ -582,17 +637,23 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
simp only [one_div, h, Real.rpow_nat_cast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
+-/
+#print PiLp.norm_eq_of_L2 /-
theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) := by convert norm_eq_of_nat 2 (by norm_cast) _;
rw [sqrt_eq_rpow]; norm_cast
#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2
+-/
+#print PiLp.nnnorm_eq_of_L2 /-
theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖₊ = NNReal.sqrt (∑ i : ι, ‖x i‖₊ ^ 2) :=
Subtype.ext <| by push_cast ; exact norm_eq_of_L2 x
#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2
+-/
+#print PiLp.norm_sq_eq_of_L2 /-
theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ ^ 2 = ∑ i : ι, ‖x i‖ ^ 2 :=
by
@@ -600,23 +661,31 @@ theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β
simpa only [NNReal.coe_sum] using congr_arg (coe : ℝ≥0 → ℝ) this
rw [nnnorm_eq_of_L2, NNReal.sq_sqrt]
#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2
+-/
+#print PiLp.dist_eq_of_L2 /-
theorem dist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
simp_rw [dist_eq_norm, norm_eq_of_L2, Pi.sub_apply]
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
+-/
+#print PiLp.nndist_eq_of_L2 /-
theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
nndist x y = (∑ i, nndist (x i) (y i) ^ 2).sqrt :=
Subtype.ext <| by push_cast ; exact dist_eq_of_L2 _ _
#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2
+-/
+#print PiLp.edist_eq_of_L2 /-
theorem edist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
+-/
variable [NormedField 𝕜] [NormedField 𝕜']
+#print PiLp.normedSpace /-
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
NormedSpace 𝕜 (PiLp p β) :=
@@ -633,21 +702,28 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
rpow_one]
exact Finset.sum_nonneg fun i hi => rpow_nonneg_of_nonneg (norm_nonneg _) _ }
#align pi_Lp.normed_space PiLp.normedSpace
+-/
+#print PiLp.isScalarTower /-
instance isScalarTower [∀ i, SeminormedAddCommGroup (β i)] [SMul 𝕜 𝕜'] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, IsScalarTower 𝕜 𝕜' (β i)] : IsScalarTower 𝕜 𝕜' (PiLp p β) :=
Pi.isScalarTower
#align pi_Lp.is_scalar_tower PiLp.isScalarTower
+-/
+#print PiLp.smulCommClass /-
instance smulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, SMulCommClass 𝕜 𝕜' (β i)] : SMulCommClass 𝕜 𝕜' (PiLp p β) :=
Pi.smulCommClass
#align pi_Lp.smul_comm_class PiLp.smulCommClass
+-/
+#print PiLp.finiteDimensional /-
instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[I : ∀ i, FiniteDimensional 𝕜 (β i)] : FiniteDimensional 𝕜 (PiLp p β) :=
FiniteDimensional.finiteDimensional_pi' _ _
#align pi_Lp.finite_dimensional PiLp.finiteDimensional
+-/
/- Register simplification lemmas for the applications of `pi_Lp` elements, as the usual lemmas
for Pi types will not trigger. -/
@@ -655,31 +731,42 @@ variable {𝕜 𝕜' p α} [∀ i, SeminormedAddCommGroup (β i)] [∀ i, Normed
variable (x y : PiLp p β) (x' y' : ∀ i, β i) (i : ι)
+#print PiLp.zero_apply /-
@[simp]
theorem zero_apply : (0 : PiLp p β) i = 0 :=
rfl
#align pi_Lp.zero_apply PiLp.zero_apply
+-/
+#print PiLp.add_apply /-
@[simp]
theorem add_apply : (x + y) i = x i + y i :=
rfl
#align pi_Lp.add_apply PiLp.add_apply
+-/
+#print PiLp.sub_apply /-
@[simp]
theorem sub_apply : (x - y) i = x i - y i :=
rfl
#align pi_Lp.sub_apply PiLp.sub_apply
+-/
+#print PiLp.smul_apply /-
@[simp]
theorem smul_apply : (c • x) i = c • x i :=
rfl
#align pi_Lp.smul_apply PiLp.smul_apply
+-/
+#print PiLp.neg_apply /-
@[simp]
theorem neg_apply : (-x) i = -x i :=
rfl
#align pi_Lp.neg_apply PiLp.neg_apply
+-/
+#print PiLp.equivₗᵢ /-
/-- The canonical map `pi_Lp.equiv` between `pi_Lp ∞ β` and `Π i, β i` as a linear isometric
equivalence. -/
def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
@@ -696,6 +783,7 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
· simp only [ciSup_of_empty, Finset.univ_eq_empty, Finset.sup_empty]
· exact ciSup_le fun i => Finset.le_sup (Finset.mem_univ i) }
#align pi_Lp.equivₗᵢ PiLp.equivₗᵢ
+-/
variable {ι' : Type _}
@@ -703,6 +791,7 @@ variable [Fintype ι']
variable (p 𝕜) (E : Type _) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
+#print LinearIsometryEquiv.piLpCongrLeft /-
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
def LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
@@ -718,22 +807,28 @@ def LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
congr
exact Fintype.sum_equiv e.symm _ _ fun i => rfl
#align linear_isometry_equiv.pi_Lp_congr_left LinearIsometryEquiv.piLpCongrLeft
+-/
variable {p 𝕜 E}
+#print LinearIsometryEquiv.piLpCongrLeft_apply /-
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_apply (e : ι ≃ ι') (v : PiLp p fun i : ι => E) :
LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e v = Equiv.piCongrLeft' (fun i : ι => E) e v :=
rfl
#align linear_isometry_equiv.pi_Lp_congr_left_apply LinearIsometryEquiv.piLpCongrLeft_apply
+-/
+#print LinearIsometryEquiv.piLpCongrLeft_symm /-
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
(LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e).symm =
LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e.symm :=
LinearIsometryEquiv.ext fun x => rfl
#align linear_isometry_equiv.pi_Lp_congr_left_symm LinearIsometryEquiv.piLpCongrLeft_symm
+-/
+#print LinearIsometryEquiv.piLpCongrLeft_single /-
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι'] (e : ι ≃ ι')
(i : ι) (v : E) :
@@ -744,58 +839,79 @@ theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq
simp [LinearIsometryEquiv.piLpCongrLeft, LinearEquiv.piCongrLeft', Equiv.piCongrLeft', Pi.single,
Function.update, Equiv.symm_apply_eq]
#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_single
+-/
+#print PiLp.equiv_zero /-
@[simp]
theorem equiv_zero : PiLp.equiv p β 0 = 0 :=
rfl
#align pi_Lp.equiv_zero PiLp.equiv_zero
+-/
+#print PiLp.equiv_symm_zero /-
@[simp]
theorem equiv_symm_zero : (PiLp.equiv p β).symm 0 = 0 :=
rfl
#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zero
+-/
+#print PiLp.equiv_add /-
@[simp]
theorem equiv_add : PiLp.equiv p β (x + y) = PiLp.equiv p β x + PiLp.equiv p β y :=
rfl
#align pi_Lp.equiv_add PiLp.equiv_add
+-/
+#print PiLp.equiv_symm_add /-
@[simp]
theorem equiv_symm_add :
(PiLp.equiv p β).symm (x' + y') = (PiLp.equiv p β).symm x' + (PiLp.equiv p β).symm y' :=
rfl
#align pi_Lp.equiv_symm_add PiLp.equiv_symm_add
+-/
+#print PiLp.equiv_sub /-
@[simp]
theorem equiv_sub : PiLp.equiv p β (x - y) = PiLp.equiv p β x - PiLp.equiv p β y :=
rfl
#align pi_Lp.equiv_sub PiLp.equiv_sub
+-/
+#print PiLp.equiv_symm_sub /-
@[simp]
theorem equiv_symm_sub :
(PiLp.equiv p β).symm (x' - y') = (PiLp.equiv p β).symm x' - (PiLp.equiv p β).symm y' :=
rfl
#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_sub
+-/
+#print PiLp.equiv_neg /-
@[simp]
theorem equiv_neg : PiLp.equiv p β (-x) = -PiLp.equiv p β x :=
rfl
#align pi_Lp.equiv_neg PiLp.equiv_neg
+-/
+#print PiLp.equiv_symm_neg /-
@[simp]
theorem equiv_symm_neg : (PiLp.equiv p β).symm (-x') = -(PiLp.equiv p β).symm x' :=
rfl
#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_neg
+-/
+#print PiLp.equiv_smul /-
@[simp]
theorem equiv_smul : PiLp.equiv p β (c • x) = c • PiLp.equiv p β x :=
rfl
#align pi_Lp.equiv_smul PiLp.equiv_smul
+-/
+#print PiLp.equiv_symm_smul /-
@[simp]
theorem equiv_symm_smul : (PiLp.equiv p β).symm (c • x') = c • (PiLp.equiv p β).symm x' :=
rfl
#align pi_Lp.equiv_symm_smul PiLp.equiv_symm_smul
+-/
section Single
@@ -803,6 +919,7 @@ variable (p)
variable [DecidableEq ι]
+#print PiLp.nnnorm_equiv_symm_single /-
@[simp]
theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
‖(PiLp.equiv p β).symm (Pi.single i b)‖₊ = ‖b‖₊ :=
@@ -824,12 +941,16 @@ theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
intro j hij
rw [equiv_symm_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_single
+-/
+#print PiLp.norm_equiv_symm_single /-
@[simp]
theorem norm_equiv_symm_single (i : ι) (b : β i) : ‖(PiLp.equiv p β).symm (Pi.single i b)‖ = ‖b‖ :=
congr_arg coe <| nnnorm_equiv_symm_single p β i b
#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_single
+-/
+#print PiLp.nndist_equiv_symm_single_same /-
@[simp]
theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
nndist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -838,23 +959,29 @@ theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
rw [nndist_eq_nnnorm, nndist_eq_nnnorm, ← equiv_symm_sub, ← Pi.single_sub,
nnnorm_equiv_symm_single]
#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_same
+-/
+#print PiLp.dist_equiv_symm_single_same /-
@[simp]
theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
dist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
dist b₁ b₂ :=
congr_arg coe <| nndist_equiv_symm_single_same p β i b₁ b₂
#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_same
+-/
+#print PiLp.edist_equiv_symm_single_same /-
@[simp]
theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
edist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
edist b₁ b₂ :=
by simpa only [edist_nndist] using congr_arg coe (nndist_equiv_symm_single_same p β i b₁ b₂)
#align pi_Lp.edist_equiv_symm_single_same PiLp.edist_equiv_symm_single_same
+-/
end Single
+#print PiLp.nnnorm_equiv_symm_const /-
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
@@ -870,7 +997,9 @@ theorem nnnorm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞
Finset.card_univ, nsmul_eq_mul, NNReal.mul_rpow, ← NNReal.rpow_mul, mul_one_div_cancel NeZero,
NNReal.rpow_one, ENNReal.toReal_div, ENNReal.one_toReal]
#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_const
+-/
+#print PiLp.nnnorm_equiv_symm_const' /-
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const` for a version which exchanges the hypothesis `nonempty ι`.
@@ -885,7 +1014,9 @@ theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι]
nnnorm_eq_csupr, Function.const_apply, ciSup_const]
· exact nnnorm_equiv_symm_const hp b
#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'
+-/
+#print PiLp.norm_equiv_symm_const /-
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.norm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
@@ -895,7 +1026,9 @@ theorem norm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞)
Fintype.card ι ^ (1 / p).toReal * ‖b‖ :=
(congr_arg coe <| nnnorm_equiv_symm_const hp b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const PiLp.norm_equiv_symm_const
+-/
+#print PiLp.norm_equiv_symm_const' /-
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.norm_equiv_symm_const` for a version which exchanges the hypothesis `nonempty ι`.
@@ -905,19 +1038,25 @@ theorem norm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι] (b
Fintype.card ι ^ (1 / p).toReal * ‖b‖ :=
(congr_arg coe <| nnnorm_equiv_symm_const' b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const' PiLp.norm_equiv_symm_const'
+-/
+#print PiLp.nnnorm_equiv_symm_one /-
theorem nnnorm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
‖(PiLp.equiv p fun _ : ι => β).symm 1‖₊ = Fintype.card ι ^ (1 / p).toReal * ‖(1 : β)‖₊ :=
(nnnorm_equiv_symm_const hp (1 : β)).trans rfl
#align pi_Lp.nnnorm_equiv_symm_one PiLp.nnnorm_equiv_symm_one
+-/
+#print PiLp.norm_equiv_symm_one /-
theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
‖(PiLp.equiv p fun _ : ι => β).symm 1‖ = Fintype.card ι ^ (1 / p).toReal * ‖(1 : β)‖ :=
(norm_equiv_symm_const hp (1 : β)).trans rfl
#align pi_Lp.norm_equiv_symm_one PiLp.norm_equiv_symm_one
+-/
variable (𝕜 p)
+#print PiLp.linearEquiv /-
/-- `pi_Lp.equiv` as a linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
@@ -925,7 +1064,9 @@ protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
toFun := PiLp.equiv _ _
invFun := (PiLp.equiv _ _).symm }
#align pi_Lp.linear_equiv PiLp.linearEquiv
+-/
+#print PiLp.continuousLinearEquiv /-
/-- `pi_Lp.equiv` as a continuous linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i
@@ -934,45 +1075,59 @@ protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i
continuous_toFun := continuous_equiv _ _
continuous_invFun := continuous_equiv_symm _ _
#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquiv
+-/
section Basis
variable (ι)
+#print PiLp.basisFun /-
/-- A version of `pi.basis_fun` for `pi_Lp`. -/
def basisFun : Basis ι 𝕜 (PiLp p fun _ => 𝕜) :=
Basis.ofEquivFun (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜)
#align pi_Lp.basis_fun PiLp.basisFun
+-/
+#print PiLp.basisFun_apply /-
@[simp]
theorem basisFun_apply [DecidableEq ι] (i) :
basisFun p 𝕜 ι i = (PiLp.equiv p _).symm (Pi.single i 1) := by
simp_rw [basis_fun, Basis.coe_ofEquivFun, PiLp.linearEquiv_symm_apply, Pi.single]
#align pi_Lp.basis_fun_apply PiLp.basisFun_apply
+-/
+#print PiLp.basisFun_repr /-
@[simp]
theorem basisFun_repr (x : PiLp p fun i : ι => 𝕜) (i : ι) : (basisFun p 𝕜 ι).repr x i = x i :=
rfl
#align pi_Lp.basis_fun_repr PiLp.basisFun_repr
+-/
+#print PiLp.basisFun_equivFun /-
@[simp]
theorem basisFun_equivFun : (basisFun p 𝕜 ι).equivFun = PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜 :=
Basis.equivFun_ofEquivFun _
#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFun
+-/
+#print PiLp.basisFun_eq_pi_basisFun /-
theorem basisFun_eq_pi_basisFun :
basisFun p 𝕜 ι = (Pi.basisFun 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜).symm :=
rfl
#align pi_Lp.basis_fun_eq_pi_basis_fun PiLp.basisFun_eq_pi_basisFun
+-/
+#print PiLp.basisFun_map /-
@[simp]
theorem basisFun_map :
(basisFun p 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜) = Pi.basisFun 𝕜 ι :=
rfl
#align pi_Lp.basis_fun_map PiLp.basisFun_map
+-/
open scoped Matrix
+#print PiLp.basis_toMatrix_basisFun_mul /-
theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι => 𝕜)) (A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) ⬝ A =
Matrix.of fun i j => b.repr ((PiLp.equiv _ _).symm (Aᵀ j)) i :=
@@ -983,6 +1138,7 @@ theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι =>
LinearEquiv.symm_apply_apply] at this
exact this
#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mul
+-/
end Basis
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -314,7 +314,6 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β)
(∑ i, edist (f i) (g i) ^ p.to_real) ^ (1 / p.to_real) +
(∑ i, edist (g i) (h i) ^ p.to_real) ^ (1 / p.to_real) :=
ENNReal.Lp_add_le _ _ _ hp
-
#align pi_Lp.pseudo_emetric_aux PiLp.pseudoEmetricAux
attribute [local instance] PiLp.pseudoEmetricAux
@@ -393,7 +392,6 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
by
apply ENNReal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans h)
exact Finset.single_le_sum (fun i hi => (bot_le : (0 : ℝ≥0∞) ≤ _)) (Finset.mem_univ i)
-
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
theorem antilipschitzWith_equiv_aux :
@@ -426,7 +424,6 @@ theorem antilipschitzWith_equiv_aux :
have : (Fintype.card ι : ℝ≥0∞) = (Fintype.card ι : ℝ≥0) :=
(ENNReal.coe_nat (Fintype.card ι)).symm
rw [this, ENNReal.coe_rpow_of_nonneg _ nonneg]
-
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
@@ -445,7 +442,6 @@ theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.instBornology
le_antisymm (antilipschitzWith_equiv_aux p α).tendsto_cobounded.le_comap
(lipschitzWith_equiv_aux p α).comap_cobounded_le
_ = _ := comap_id
-
#align pi_Lp.aux_cobounded_eq PiLp.aux_cobounded_eq
end Aux
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -143,13 +143,13 @@ satisfying a relaxed triangle inequality. The terminology for this varies throug
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
instance : EDist (PiLp p β)
where edist f g :=
- if hp : p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
+ if hp : p = 0 then {i | f i ≠ g i}.toFinite.toFinset.card
else
if p = ∞ then ⨆ i, edist (f i) (g i) else (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal)
variable {β}
-theorem edist_eq_card (f g : PiLp 0 β) : edist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
+theorem edist_eq_card (f g : PiLp 0 β) : edist f g = {i | f i ≠ g i}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.edist_eq_card PiLp.edist_eq_card
@@ -204,13 +204,13 @@ satisfying a relaxed triangle inequality. The terminology for this varies throug
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
instance : Dist (PiLp p α)
where dist f g :=
- if hp : p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
+ if hp : p = 0 then {i | f i ≠ g i}.toFinite.toFinset.card
else
if p = ∞ then ⨆ i, dist (f i) (g i) else (∑ i, dist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal)
variable {α}
-theorem dist_eq_card (f g : PiLp 0 α) : dist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
+theorem dist_eq_card (f g : PiLp 0 α) : dist f g = {i | f i ≠ g i}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.dist_eq_card PiLp.dist_eq_card
@@ -239,14 +239,14 @@ Registering this separately allows for a future norm-like structure on `pi_Lp p
satisfying a relaxed triangle inequality. These are called *quasi-norms*. -/
instance hasNorm : Norm (PiLp p β)
where norm f :=
- if hp : p = 0 then { i | f i ≠ 0 }.toFinite.toFinset.card
+ if hp : p = 0 then {i | f i ≠ 0}.toFinite.toFinset.card
else if p = ∞ then ⨆ i, ‖f i‖ else (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal)
#align pi_Lp.has_norm PiLp.hasNorm
-/
variable {p β}
-theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = { i | f i ≠ 0 }.toFinite.toFinset.card :=
+theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = {i | f i ≠ 0}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.norm_eq_card PiLp.norm_eq_card
mathlib commit https://github.com/leanprover-community/mathlib/commit/34ebaffc1d1e8e783fc05438ec2e70af87275ac9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
+! leanprover-community/mathlib commit 9d013ad8430ddddd350cff5c3db830278ded3c79
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,7 @@ import Mathbin.LinearAlgebra.Matrix.Basis
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
> Any changes to this file require a corresponding PR to mathlib4.
+
Given finitely many metric spaces, one can put the max distance on their product, but there is also
a whole family of natural distances, indexed by a parameter `p : ℝ≥0∞`, that also induce
the product topology. We define them in this file. For `0 < p < ∞`, the distance on `Π i, α i`
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -557,7 +557,7 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
dist_eq := fun x y => by
rcases p.dichotomy with (rfl | h)
· simpa only [dist_eq_csupr, norm_eq_csupr, dist_eq_norm]
- · have : p ≠ ∞ := by intro hp; rw [hp, ENNReal.top_toReal] at h; linarith
+ · have : p ≠ ∞ := by intro hp; rw [hp, ENNReal.top_toReal] at h ; linarith
simpa only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
dist_eq_norm] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
@@ -983,7 +983,7 @@ theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι =>
have := basis_toMatrix_basisFun_mul (b.map (PiLp.linearEquiv _ 𝕜 _)) A
simp_rw [← PiLp.basisFun_map p, Basis.map_repr, LinearEquiv.trans_apply,
PiLp.linearEquiv_symm_apply, Basis.toMatrix_map, Function.comp, Basis.map_apply,
- LinearEquiv.symm_apply_apply] at this
+ LinearEquiv.symm_apply_apply] at this
exact this
#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mul
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -70,7 +70,7 @@ We also set up the theory for `pseudo_emetric_space` and `pseudo_metric_space`.
open Real Set Filter IsROrC Bornology
-open BigOperators uniformity Topology NNReal ENNReal
+open scoped BigOperators uniformity Topology NNReal ENNReal
noncomputable section
@@ -974,7 +974,7 @@ theorem basisFun_map :
rfl
#align pi_Lp.basis_fun_map PiLp.basisFun_map
-open Matrix
+open scoped Matrix
theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι => 𝕜)) (A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) ⬝ A =
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -104,12 +104,6 @@ protected def equiv : PiLp p α ≃ ∀ i : ι, α i :=
the use of the type synonym. -/
-/- warning: pi_Lp.equiv_apply -> PiLp.equiv_apply is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) (x : PiLp.{u1, u2} p ι α) (i : ι), Eq.{succ u2} (α i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι α) (forall (i : ι), α i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι α) (forall (i : ι), α i)) => (PiLp.{u1, u2} p ι α) -> (forall (i : ι), α i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι α) (forall (i : ι), α i)) (PiLp.equiv.{u1, u2} p ι α) x i) (x i)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (α : ι -> Type.{u1}) (x : PiLp.{u2, u1} p ι α) (i : ι), Eq.{succ u1} (α i) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι α) (forall (i : ι), α i)) (PiLp.{u2, u1} p ι α) (fun (_x : PiLp.{u2, u1} p ι α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι α) => forall (i : ι), α i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι α) (forall (i : ι), α i)) (PiLp.equiv.{u2, u1} p ι α) x i) (x i)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_apply PiLp.equiv_applyₓ'. -/
@[simp]
theorem equiv_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
rfl
@@ -154,34 +148,16 @@ instance : EDist (PiLp p β)
variable {β}
-/- warning: pi_Lp.edist_eq_card -> PiLp.edist_eq_card is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), EDist.{u2} (β i)] (f : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β) (g : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β) (PiLp.hasEdist.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat ENNReal (HasLiftT.mk.{1, 1} Nat ENNReal (CoeTCₓ.coe.{1, 1} Nat ENNReal (Nat.castCoe.{0} ENNReal (AddMonoidWithOne.toNatCast.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) (Finset.card.{u1} ι (Set.Finite.toFinset.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (g i))) (Set.toFinite.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (g i))) (Subtype.finite.{succ u1} ι (Finite.of_fintype.{u1} ι _inst_1) (fun (x : ι) => Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (g i)))))))))
-but is expected to have type
- forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] (f : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β) (g : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β) (PiLp.instEDistPiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (Nat.cast.{0} ENNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (Finset.card.{u2} ι (Set.Finite.toFinset.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (g i))) (Set.toFinite.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (g i))) (Subtype.finite.{succ u2} ι (Finite.of_fintype.{u2} ι _inst_1) (fun (x : ι) => Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (g i)))))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_card PiLp.edist_eq_cardₓ'. -/
theorem edist_eq_card (f g : PiLp 0 β) : edist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.edist_eq_card PiLp.edist_eq_card
-/- warning: pi_Lp.edist_eq_sum -> PiLp.edist_eq_sum is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), EDist.{u2} (β i)] {p : ENNReal}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ENNReal.toReal p)) -> (forall (f : PiLp.{u1, u2} p ι β) (g : PiLp.{u1, u2} p ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.Real.hasPow) (Finset.sum.{0, u1} ENNReal ι (OrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (OrderedSemiring.toOrderedAddCommMonoid.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.Real.hasPow) (EDist.edist.{u2} (β i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
-but is expected to have type
- forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] {p : ENNReal}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (ENNReal.toReal p)) -> (forall (f : PiLp.{u2, u1} p ι β) (g : PiLp.{u2, u1} p ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.instPowENNRealReal) (Finset.sum.{0, u2} ENNReal ι (LinearOrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (LinearOrderedAddCommMonoidWithTop.toLinearOrderedAddCommMonoid.{0} ENNReal ENNReal.instLinearOrderedAddCommMonoidWithTopENNReal)) (Finset.univ.{u2} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.instPowENNRealReal) (EDist.edist.{u1} (β i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_sum PiLp.edist_eq_sumₓ'. -/
theorem edist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p β) :
edist f g = (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.edist_eq_sum PiLp.edist_eq_sum
-/- warning: pi_Lp.edist_eq_supr -> PiLp.edist_eq_iSup is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), EDist.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (g : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.hasEdist.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EDist.edist.{u2} (β i) (_inst_2 i) (f i) (g i)))
-but is expected to have type
- forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.instEDistPiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u2} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EDist.edist.{u1} (β i) (_inst_2 i) (f i) (g i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSupₓ'. -/
theorem edist_eq_iSup (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) := by dsimp [edist];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSup
@@ -192,12 +168,6 @@ section EdistProp
variable {β} [∀ i, PseudoEMetricSpace (β i)]
-/- warning: pi_Lp.edist_self -> PiLp.edist_self is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] (f : PiLp.{u1, u2} p ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toHasEdist.{u2} (β i) (_inst_2 i))) f f) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] (f : PiLp.{u2, u1} p ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (_inst_2 i))) f f) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_self PiLp.edist_selfₓ'. -/
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
@@ -208,12 +178,6 @@ protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
· simp [edist_eq_sum h, ENNReal.zero_rpow_of_pos h, ENNReal.zero_rpow_of_pos (inv_pos.2 <| h)]
#align pi_Lp.edist_self PiLp.edist_self
-/- warning: pi_Lp.edist_comm -> PiLp.edist_comm is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] (f : PiLp.{u1, u2} p ι β) (g : PiLp.{u1, u2} p ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toHasEdist.{u2} (β i) (_inst_2 i))) f g) (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toHasEdist.{u2} (β i) (_inst_2 i))) g f)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] (f : PiLp.{u2, u1} p ι β) (g : PiLp.{u2, u1} p ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (_inst_2 i))) f g) (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (_inst_2 i))) g f)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_comm PiLp.edist_commₓ'. -/
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_comm (f g : PiLp p β) : edist f g = edist g f :=
@@ -245,34 +209,16 @@ instance : Dist (PiLp p α)
variable {α}
-/- warning: pi_Lp.dist_eq_card -> PiLp.dist_eq_card is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Dist.{u2} (α i)] (f : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α) (g : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α) (PiLp.hasDist.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Finset.card.{u1} ι (Set.Finite.toFinset.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (α i) (f i) (g i))) (Set.toFinite.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (α i) (f i) (g i))) (Subtype.finite.{succ u1} ι (Finite.of_fintype.{u1} ι _inst_1) (fun (x : ι) => Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (α i) (f i) (g i)))))))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] (f : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α) (g : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α) (PiLp.instDistPiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (Nat.cast.{0} Real Real.natCast (Finset.card.{u2} ι (Set.Finite.toFinset.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (α i) (f i) (g i))) (Set.toFinite.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (α i) (f i) (g i))) (Subtype.finite.{succ u2} ι (Finite.of_fintype.{u2} ι _inst_1) (fun (x : ι) => Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (α i) (f i) (g i)))))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_card PiLp.dist_eq_cardₓ'. -/
theorem dist_eq_card (f g : PiLp 0 α) : dist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.dist_eq_card PiLp.dist_eq_card
-/- warning: pi_Lp.dist_eq_sum -> PiLp.dist_eq_sum is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Dist.{u2} (α i)] {p : ENNReal}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ENNReal.toReal p)) -> (forall (f : PiLp.{u1, u2} p ι α) (g : PiLp.{u1, u2} p ι α), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} p ι α) (PiLp.hasDist.{u1, u2} p ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Dist.dist.{u2} (α i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] {p : ENNReal}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (ENNReal.toReal p)) -> (forall (f : PiLp.{u2, u1} p ι α) (g : PiLp.{u2, u1} p ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} p ι α) (PiLp.instDistPiLp.{u2, u1} p ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Finset.sum.{0, u2} Real ι Real.instAddCommMonoidReal (Finset.univ.{u2} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Dist.dist.{u1} (α i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_sum PiLp.dist_eq_sumₓ'. -/
theorem dist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p α) :
dist f g = (∑ i, dist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.dist_eq_sum PiLp.dist_eq_sum
-/- warning: pi_Lp.dist_eq_csupr -> PiLp.dist_eq_iSup is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Dist.{u2} (α i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α) (g : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α) (PiLp.hasDist.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u1} Real Real.hasSup ι (fun (i : ι) => Dist.dist.{u2} (α i) (_inst_2 i) (f i) (g i)))
-but is expected to have type
- forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (PiLp.instDistPiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u2} Real Real.instSupSetReal ι (fun (i : ι) => Dist.dist.{u1} (α i) (_inst_2 i) (f i) (g i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSupₓ'. -/
theorem dist_eq_iSup (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) := by dsimp [dist];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSup
@@ -299,32 +245,14 @@ instance hasNorm : Norm (PiLp p β)
variable {p β}
-/- warning: pi_Lp.norm_eq_card -> PiLp.norm_eq_card is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Norm.{u2} (β i)] [_inst_3 : forall (i : ι), Zero.{u2} (β i)] (f : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Finset.card.{u1} ι (Set.Finite.toFinset.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (_inst_3 i)))))) (Set.toFinite.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (_inst_3 i)))))) (Subtype.finite.{succ u1} ι (Finite.of_fintype.{u1} ι _inst_1) (fun (x : ι) => Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (_inst_3 i))))))))))))
-but is expected to have type
- forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)] (f : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β) (PiLp.hasNorm.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (Nat.cast.{0} Real Real.natCast (Finset.card.{u2} ι (Set.Finite.toFinset.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (OfNat.ofNat.{u1} (β i) 0 (Zero.toOfNat0.{u1} (β i) (_inst_3 i))))) (Set.toFinite.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (OfNat.ofNat.{u1} (β i) 0 (Zero.toOfNat0.{u1} (β i) (_inst_3 i))))) (Subtype.finite.{succ u2} ι (Finite.of_fintype.{u2} ι _inst_1) (fun (x : ι) => Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (OfNat.ofNat.{u1} (β i) 0 (Zero.toOfNat0.{u1} (β i) (_inst_3 i)))))))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_card PiLp.norm_eq_cardₓ'. -/
theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = { i | f i ≠ 0 }.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.norm_eq_card PiLp.norm_eq_card
-/- warning: pi_Lp.norm_eq_csupr -> PiLp.norm_eq_ciSup is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Norm.{u2} (β i)] [_inst_3 : forall (i : ι), Zero.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.hasNorm.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (iSup.{0, succ u1} Real Real.hasSup ι (fun (i : ι) => Norm.norm.{u2} (β i) (_inst_2 i) (f i)))
-but is expected to have type
- forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.hasNorm.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (iSup.{0, succ u2} Real Real.instSupSetReal ι (fun (i : ι) => Norm.norm.{u1} (β i) (_inst_2 i) (f i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSupₓ'. -/
theorem norm_eq_ciSup (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ := by dsimp [norm];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSup
-/- warning: pi_Lp.norm_eq_sum -> PiLp.norm_eq_sum is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Norm.{u2} (β i)] [_inst_3 : forall (i : ι), Zero.{u2} (β i)], (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ENNReal.toReal p)) -> (forall (f : PiLp.{u1, u2} p ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Norm.norm.{u2} (β i) (_inst_2 i) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)], (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (ENNReal.toReal p)) -> (forall (f : PiLp.{u2, u1} p ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.hasNorm.{u2, u1} p ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Finset.sum.{0, u2} Real ι Real.instAddCommMonoidReal (Finset.univ.{u2} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Norm.norm.{u1} (β i) (_inst_2 i) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_sum PiLp.norm_eq_sumₓ'. -/
theorem norm_eq_sum (hp : 0 < p.toReal) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
@@ -356,12 +284,6 @@ variable [Fact (1 ≤ p)] [∀ i, PseudoMetricSpace (α i)] [∀ i, PseudoEMetri
variable [Fintype ι]
-/- warning: pi_Lp.pseudo_emetric_aux -> PiLp.pseudoEmetricAux is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], PseudoEMetricSpace.{max u1 u2} (PiLp.{u1, u2} p ι β)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], PseudoEMetricSpace.{max u2 u1} (PiLp.{u1, u2} p ι β)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.pseudo_emetric_aux PiLp.pseudoEmetricAuxₓ'. -/
/-- Endowing the space `pi_Lp p β` with the `L^p` pseudoemetric structure. This definition is not
satisfactory, as it does not register the fact that the topology and the uniform structure coincide
with the product one. Therefore, we do not register it as an instance. Using this as a temporary
@@ -396,12 +318,6 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β)
attribute [local instance] PiLp.pseudoEmetricAux
-/- warning: pi_Lp.supr_edist_ne_top_aux -> PiLp.iSup_edist_ne_top_aux is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_5 : Finite.{succ u1} ι] {α : ι -> Type.{u2}} [_inst_6 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α) (g : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α), Ne.{1} ENNReal (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EDist.edist.{u2} (α i) (PseudoMetricSpace.toEDist.{u2} (α i) (_inst_6 i)) (f i) (g i))) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))
-but is expected to have type
- forall {ι : Type.{u2}} [_inst_5 : Finite.{succ u2} ι] {α : ι -> Type.{u1}} [_inst_6 : forall (i : ι), PseudoMetricSpace.{u1} (α i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α), Ne.{1} ENNReal (iSup.{0, succ u2} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EDist.edist.{u1} (α i) (PseudoEMetricSpace.toEDist.{u1} (α i) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} (α i) (_inst_6 i))) (f i) (g i))) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_auxₓ'. -/
/-- An auxiliary lemma used twice in the proof of `pi_Lp.pseudo_metric_aux` below. Not intended for
use outside this file. -/
theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
@@ -414,12 +330,6 @@ theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
exact_mod_cast hM i
#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_aux
-/- warning: pi_Lp.pseudo_metric_aux -> PiLp.pseudoMetricAux is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] [_inst_4 : Fintype.{u1} ι], PseudoMetricSpace.{max u1 u2} (PiLp.{u1, u2} p ι α)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] [_inst_4 : Fintype.{u1} ι], PseudoMetricSpace.{max u2 u1} (PiLp.{u1, u2} p ι α)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.pseudo_metric_aux PiLp.pseudoMetricAuxₓ'. -/
/-- Endowing the space `pi_Lp p α` with the `L^p` pseudometric structure. This definition is not
satisfactory, as it does not register the fact that the topology, the uniform structure, and the
bornology coincide with the product ones. Therefore, we do not register it as an instance. Using
@@ -463,12 +373,6 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
attribute [local instance] PiLp.pseudoMetricAux
-/- warning: pi_Lp.lipschitz_with_equiv_aux -> PiLp.lipschitzWith_equiv_aux is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], LipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u1, u2} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (OfNat.mk.{0} NNReal 1 (One.one.{0} NNReal (AddMonoidWithOne.toOne.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] [_inst_4 : Fintype.{u2} ι], LipschitzWith.{max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u2, u1} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u2, u1} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (One.toOfNat1.{0} NNReal instNNRealOne)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_auxₓ'. -/
theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
by
intro x y
@@ -491,12 +395,6 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
-/- warning: pi_Lp.antilipschitz_with_equiv_aux -> PiLp.antilipschitzWith_equiv_aux is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], AntilipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u1, u2} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_4)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] [_inst_4 : Fintype.{u2} ι], AntilipschitzWith.{max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u2, u1} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u2, u1} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u2} ι _inst_4)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_auxₓ'. -/
theorem antilipschitzWith_equiv_aux :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
by
@@ -530,12 +428,6 @@ theorem antilipschitzWith_equiv_aux :
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
-/- warning: pi_Lp.aux_uniformity_eq -> PiLp.aux_uniformity_eq is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (Prod.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β))) (uniformity.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoEMetricSpace.toUniformSpace.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.pseudoEmetricAux.{u1, u2} p ι β _inst_1 (fun (i : ι) => _inst_3 i) _inst_4))) (uniformity.{max u1 u2} (forall (i : ι), β i) (Pi.uniformSpace.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => PseudoEMetricSpace.toUniformSpace.{u2} (β i) (_inst_3 i))))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] [_inst_4 : Fintype.{u2} ι], Eq.{max (succ u2) (succ u1)} (Filter.{max u1 u2} (Prod.{max u1 u2, max u1 u2} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β))) (uniformity.{max u1 u2} (PiLp.{u2, u1} p ι β) (PseudoEMetricSpace.toUniformSpace.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.pseudoEmetricAux.{u2, u1} p ι β _inst_1 (fun (i : ι) => _inst_3 i) _inst_4))) (uniformity.{max u2 u1} (forall (i : ι), β i) (Pi.uniformSpace.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => PseudoEMetricSpace.toUniformSpace.{u1} (β i) (_inst_3 i))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.aux_uniformity_eq PiLp.aux_uniformity_eqₓ'. -/
theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
by
have A : UniformInducing (PiLp.equiv p β) :=
@@ -546,12 +438,6 @@ theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
rw [← A.comap_uniformity, this, comap_id]
#align pi_Lp.aux_uniformity_eq PiLp.aux_uniformity_eq
-/- warning: pi_Lp.aux_cobounded_eq -> PiLp.aux_cobounded_eq is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] [_inst_4 : Fintype.{u1} ι], Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (PiLp.{u1, u2} p ι α)) (Bornology.cobounded.{max u1 u2} (PiLp.{u1, u2} p ι α) (PseudoMetricSpace.toBornology.{max u1 u2} (PiLp.{u1, u2} p ι α) (PiLp.pseudoMetricAux.{u1, u2} p ι α _inst_1 (fun (i : ι) => _inst_2 i) _inst_4))) (Bornology.cobounded.{max u1 u2} (forall (i : ι), α i) (Pi.instBornology.{u1, u2} ι (fun (i : ι) => α i) _inst_4 (fun (i : ι) => PseudoMetricSpace.toBornology.{u2} (α i) (_inst_2 i))))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (α : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u1} (α i)] [_inst_4 : Fintype.{u2} ι], Eq.{max (succ u2) (succ u1)} (Filter.{max u1 u2} (PiLp.{u2, u1} p ι α)) (Bornology.cobounded.{max u1 u2} (PiLp.{u2, u1} p ι α) (PseudoMetricSpace.toBornology.{max u2 u1} (PiLp.{u2, u1} p ι α) (PiLp.pseudoMetricAux.{u2, u1} p ι α _inst_1 (fun (i : ι) => _inst_2 i) _inst_4))) (Bornology.cobounded.{max u1 u2} (forall (i : ι), α i) (Pi.instBornology.{u2, u1} ι (fun (i : ι) => α i) _inst_4 (fun (i : ι) => PseudoMetricSpace.toBornology.{u1} (α i) (_inst_2 i))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.aux_cobounded_eq PiLp.aux_cobounded_eqₓ'. -/
theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.instBornology :=
calc
cobounded (PiLp p α) = comap (PiLp.equiv p α) (cobounded _) :=
@@ -631,45 +517,21 @@ and having as uniformity the product uniformity. -/
instance [∀ i, MetricSpace (α i)] : MetricSpace (PiLp p α) :=
MetricSpace.ofT0PseudoMetricSpace _
-/- warning: pi_Lp.nndist_eq_sum -> PiLp.nndist_eq_sum is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), PseudoMetricSpace.{u2} (β i)], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.pseudoMetricSpace.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i))) x y) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_4 i)) (x i) (y i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), PseudoMetricSpace.{u2} (β i)], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.instPseudoMetricSpacePiLp.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i))) x y) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal instNNRealStrictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_4 i)) (x i) (y i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sumₓ'. -/
theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) :=
Subtype.ext <| by push_cast ; exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
-/- warning: pi_Lp.nndist_eq_supr -> PiLp.nndist_eq_iSup is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), PseudoMetricSpace.{u2} (β i)] (x : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (y : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.pseudoMetricSpace.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i))) x y) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toHasSup.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.conditionallyCompleteLinearOrderBot))) ι (fun (i : ι) => NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_3 i)) (x i) (y i)))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), PseudoMetricSpace.{u2} (β i)] (x : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (y : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.instPseudoMetricSpacePiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i))) x y) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toSupSet.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.instConditionallyCompleteLinearOrderBotNNReal))) ι (fun (i : ι) => NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_3 i)) (x i) (y i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSupₓ'. -/
theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
Subtype.ext <| by push_cast ; exact dist_eq_csupr _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
-/- warning: pi_Lp.lipschitz_with_equiv -> PiLp.lipschitzWith_equiv is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], LipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricSpace.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (OfNat.mk.{0} NNReal 1 (One.one.{0} NNReal (AddMonoidWithOne.toOne.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], LipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.instPseudoEMetricSpacePiLp.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (One.toOfNat1.{0} NNReal instNNRealOne)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.{u1, u2} p ι β) (fun (_x : PiLp.{u1, u2} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u1, u2} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equivₓ'. -/
theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
lipschitzWith_equiv_aux p β
#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equiv
-/- warning: pi_Lp.antilipschitz_with_equiv -> PiLp.antilipschitzWith_equiv is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], AntilipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricSpace.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], AntilipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.instPseudoEMetricSpacePiLp.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.{u1, u2} p ι β) (fun (_x : PiLp.{u1, u2} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u1, u2} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.antilipschitz_with_equiv PiLp.antilipschitzWith_equivₓ'. -/
theorem antilipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
antilipschitzWith_equiv_aux p β
@@ -687,12 +549,6 @@ theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp
variable (p β)
-/- warning: pi_Lp.seminormed_add_comm_group -> PiLp.seminormedAddCommGroup is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], SeminormedAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι β)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], SeminormedAddCommGroup.{max u2 u1} (PiLp.{u1, u2} p ι β)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroupₓ'. -/
/-- seminormed group instance on the product of finitely many normed groups, using the `L^p`
norm. -/
instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
@@ -706,45 +562,21 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
dist_eq_norm] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
-/- warning: pi_Lp.normed_add_comm_group -> PiLp.normedAddCommGroup is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), NormedAddCommGroup.{u2} (α i)], NormedAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι α)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), NormedAddCommGroup.{u2} (α i)], NormedAddCommGroup.{max u2 u1} (PiLp.{u1, u2} p ι α)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.normed_add_comm_group PiLp.normedAddCommGroupₓ'. -/
/-- normed group instance on the product of finitely many normed groups, using the `L^p` norm. -/
instance normedAddCommGroup [∀ i, NormedAddCommGroup (α i)] : NormedAddCommGroup (PiLp p α) :=
{ PiLp.seminormedAddCommGroup p α with }
#align pi_Lp.normed_add_comm_group PiLp.normedAddCommGroup
-/- warning: pi_Lp.nnnorm_eq_sum -> PiLp.nnnorm_eq_sum is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : ι -> Type.{u2}}, (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i)))) f) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_4 i))) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : ι -> Type.{u2}}, (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i)))) f) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal instNNRealStrictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_4 i))) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sumₓ'. -/
theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp : p ≠ ∞)
[∀ i, SeminormedAddCommGroup (β i)] (f : PiLp p β) :
‖f‖₊ = (∑ i, ‖f i‖₊ ^ p.toReal) ^ (1 / p.toReal) := by ext;
simp [NNReal.coe_sum, norm_eq_sum (p.to_real_pos_iff_ne_top.mpr hp)]
#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sum
-/- warning: pi_Lp.nnnorm_eq_csupr -> PiLp.nnnorm_eq_ciSup is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.seminormedAddCommGroup.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i)))) f) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toHasSup.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.conditionallyCompleteLinearOrderBot))) ι (fun (i : ι) => NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i))) (f i)))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.seminormedAddCommGroup.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i)))) f) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toSupSet.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.instConditionallyCompleteLinearOrderBotNNReal))) ι (fun (i : ι) => NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i))) (f i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSupₓ'. -/
theorem nnnorm_eq_ciSup {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
‖f‖₊ = ⨆ i, ‖f i‖₊ := by ext; simp [NNReal.coe_iSup, norm_eq_csupr]
#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSup
-/- warning: pi_Lp.norm_eq_of_nat -> PiLp.norm_eq_of_nat is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (n : Nat), (Eq.{1} ENNReal p ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat ENNReal (HasLiftT.mk.{1, 1} Nat ENNReal (CoeTCₓ.coe.{1, 1} Nat ENNReal (Nat.castCoe.{0} ENNReal (AddMonoidWithOne.toNatCast.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) n)) -> (forall (f : PiLp.{u1, u2} p ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_4 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_4 i)))))))) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_4 i)) (f i)) n)) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (n : Nat), (Eq.{1} ENNReal p (Nat.cast.{0} ENNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) n)) -> (forall (f : PiLp.{u1, u2} p ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_4 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_4 i)))))))) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_4 i)) (f i)) n)) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (Nat.cast.{0} Real Real.natCast n))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_natₓ'. -/
theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) :=
@@ -754,31 +586,16 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
-/- warning: pi_Lp.norm_eq_of_L2 -> PiLp.norm_eq_of_L2 is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i)))))))) x) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_3 i)))))))) x) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2ₓ'. -/
theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) := by convert norm_eq_of_nat 2 (by norm_cast) _;
rw [sqrt_eq_rpow]; norm_cast
#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2
-/- warning: pi_Lp.nnnorm_eq_of_L2 -> PiLp.nnnorm_eq_of_L2 is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2ₓ'. -/
theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖₊ = NNReal.sqrt (∑ i : ι, ‖x i‖₊ ^ 2) :=
Subtype.ext <| by push_cast ; exact norm_eq_of_L2 x
#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2
-/- warning: pi_Lp.norm_sq_eq_of_L2 -> PiLp.norm_sq_eq_of_L2 is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] (β : ι -> Type.{u2}) [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} Real (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i)))))))) x) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] (β : ι -> Type.{u2}) [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_3 i)))))))) x) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))) (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2ₓ'. -/
theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ ^ 2 = ∑ i : ι, ‖x i‖ ^ 2 :=
by
@@ -787,43 +604,22 @@ theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β
rw [nnnorm_eq_of_L2, NNReal.sq_sqrt]
#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2
-/- warning: pi_Lp.dist_eq_of_L2 -> PiLp.dist_eq_of_L2 is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasDist.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) x y) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Dist.dist.{u2} (β i) (PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.instDistPiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) x y) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Dist.dist.{u2} (β i) (PseudoMetricSpace.toDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2ₓ'. -/
theorem dist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
simp_rw [dist_eq_norm, norm_eq_of_L2, Pi.sub_apply]
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
-/- warning: pi_Lp.nndist_eq_of_L2 -> PiLp.nndist_eq_of_L2 is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2ₓ'. -/
theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
nndist x y = (∑ i, nndist (x i) (y i) ^ 2).sqrt :=
Subtype.ext <| by push_cast ; exact dist_eq_of_L2 _ _
#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2
-/- warning: pi_Lp.edist_eq_of_L2 -> PiLp.edist_eq_of_L2 is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasEdist.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) x y) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.Real.hasPow) (Finset.sum.{0, u1} ENNReal ι (OrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (OrderedSemiring.toOrderedAddCommMonoid.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Nat ENNReal (instHPow.{0, 0} ENNReal Nat (Monoid.Pow.{0} ENNReal (MonoidWithZero.toMonoid.{0} ENNReal (Semiring.toMonoidWithZero.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (EDist.edist.{u2} (β i) (PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne))))))
-but is expected to have type
- forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.instEDistPiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u2} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))))) x y) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.instPowENNRealReal) (Finset.sum.{0, u1} ENNReal ι (LinearOrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (LinearOrderedAddCommMonoidWithTop.toLinearOrderedAddCommMonoid.{0} ENNReal ENNReal.instLinearOrderedAddCommMonoidWithTopENNReal)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Nat ENNReal (instHPow.{0, 0} ENNReal Nat (Monoid.Pow.{0} ENNReal (MonoidWithZero.toMonoid.{0} ENNReal (Semiring.toMonoidWithZero.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))))))) (EDist.edist.{u2} (β i) (PseudoEMetricSpace.toEDist.{u2} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2ₓ'. -/
theorem edist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
variable [NormedField 𝕜] [NormedField 𝕜']
-/- warning: pi_Lp.normed_space -> PiLp.normedSpace is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], NormedSpace.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))
-but is expected to have type
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], NormedSpace.{u1, max u3 u2} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.normed_space PiLp.normedSpaceₓ'. -/
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
NormedSpace 𝕜 (PiLp p β) :=
@@ -841,28 +637,16 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
exact Finset.sum_nonneg fun i hi => rpow_nonneg_of_nonneg (norm_nonneg _) _ }
#align pi_Lp.normed_space PiLp.normedSpace
-/- warning: pi_Lp.is_scalar_tower -> PiLp.isScalarTower is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.is_scalar_tower PiLp.isScalarTowerₓ'. -/
instance isScalarTower [∀ i, SeminormedAddCommGroup (β i)] [SMul 𝕜 𝕜'] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, IsScalarTower 𝕜 𝕜' (β i)] : IsScalarTower 𝕜 𝕜' (PiLp p β) :=
Pi.isScalarTower
#align pi_Lp.is_scalar_tower PiLp.isScalarTower
-/- warning: pi_Lp.smul_comm_class -> PiLp.smulCommClass is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.smul_comm_class PiLp.smulCommClassₓ'. -/
instance smulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, SMulCommClass 𝕜 𝕜' (β i)] : SMulCommClass 𝕜 𝕜' (PiLp p β) :=
Pi.smulCommClass
#align pi_Lp.smul_comm_class PiLp.smulCommClass
-/- warning: pi_Lp.finite_dimensional -> PiLp.finiteDimensional is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)] [I : forall (i : ι), FiniteDimensional.{u1, u3} 𝕜 (β i) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)) (NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i))], FiniteDimensional.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)) (PiLp.normedSpace.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)))
-but is expected to have type
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)] [I : forall (i : ι), FiniteDimensional.{u1, u3} 𝕜 (β i) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)) (NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i))], FiniteDimensional.{u1, max u3 u2} 𝕜 (PiLp.{u2, u3} p ι β) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))) (PiLp.module.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.finite_dimensional PiLp.finiteDimensionalₓ'. -/
instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[I : ∀ i, FiniteDimensional 𝕜 (β i)] : FiniteDimensional 𝕜 (PiLp p β) :=
FiniteDimensional.finiteDimensional_pi' _ _
@@ -874,64 +658,31 @@ variable {𝕜 𝕜' p α} [∀ i, SeminormedAddCommGroup (β i)] [∀ i, Normed
variable (x y : PiLp p β) (x' y' : ∀ i, β i) (i : ι)
-/- warning: pi_Lp.zero_apply -> PiLp.zero_apply is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (i : ι), Eq.{succ u2} (β i) (Zero.zero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))))))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (i : ι), Eq.{succ u2} (β i) (OfNat.ofNat.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (Zero.toOfNat0.{max u1 u2} (PiLp.{u1, u2} p ι β) (NegZeroClass.toZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) i) (OfNat.ofNat.{u2} (β i) 0 (Zero.toOfNat0.{u2} (β i) (NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_5 i)))))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.zero_apply PiLp.zero_applyₓ'. -/
@[simp]
theorem zero_apply : (0 : PiLp p β) i = 0 :=
rfl
#align pi_Lp.zero_apply PiLp.zero_apply
-/- warning: pi_Lp.add_apply -> PiLp.add_apply is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y i) (HAdd.hAdd.{u2, u2, u2} (β i) (β i) (β i) (instHAdd.{u2} (β i) (AddZeroClass.toHasAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))) (x i) (y i))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y i) (HAdd.hAdd.{u2, u2, u2} (β i) (β i) (β i) (instHAdd.{u2} (β i) (AddZeroClass.toAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))) (x i) (y i))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.add_apply PiLp.add_applyₓ'. -/
@[simp]
theorem add_apply : (x + y) i = x i + y i :=
rfl
#align pi_Lp.add_apply PiLp.add_apply
-/- warning: pi_Lp.sub_apply -> PiLp.sub_apply is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y i) (HSub.hSub.{u2, u2, u2} (β i) (β i) (β i) (instHSub.{u2} (β i) (SubNegMonoid.toHasSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) (x i) (y i))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y i) (HSub.hSub.{u2, u2, u2} (β i) (β i) (β i) (instHSub.{u2} (β i) (SubNegMonoid.toSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) (x i) (y i))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.sub_apply PiLp.sub_applyₓ'. -/
@[simp]
theorem sub_apply : (x - y) i = x i - y i :=
rfl
#align pi_Lp.sub_apply PiLp.sub_apply
-/- warning: pi_Lp.smul_apply -> PiLp.smul_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.smul_apply PiLp.smul_applyₓ'. -/
@[simp]
theorem smul_apply : (c • x) i = c • x i :=
rfl
#align pi_Lp.smul_apply PiLp.smul_apply
-/- warning: pi_Lp.neg_apply -> PiLp.neg_apply is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))) x i) (Neg.neg.{u2} (β i) (SubNegMonoid.toHasNeg.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))) (x i))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (NegZeroClass.toNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) x i) (Neg.neg.{u2} (β i) (NegZeroClass.toNeg.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_5 i))))))) (x i))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.neg_apply PiLp.neg_applyₓ'. -/
@[simp]
theorem neg_apply : (-x) i = -x i :=
rfl
#align pi_Lp.neg_apply PiLp.neg_apply
-/- warning: pi_Lp.equivₗᵢ -> PiLp.equivₗᵢ is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearIsometryEquiv.{u1, u1, max u2 u3, max u2 u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (PiLp.equivₗᵢ._proof_1.{u1} 𝕜 _inst_3) (PiLp.equivₗᵢ._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (forall (i : ι), β i) (PiLp.seminormedAddCommGroup.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_5 i)) (Pi.seminormedAddCommGroup.{u2, u3} ι (fun (i : ι) => β i) _inst_1 (fun (i : ι) => _inst_5 i)) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_5 i)) (PiLp.normedSpace.{u1, u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) 𝕜 ι β _inst_1 fact_one_le_top_ennreal _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i))) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
-but is expected to have type
- forall {𝕜 : Type.{u1}} {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearIsometryEquiv.{u1, u1, max u3 u2, max u2 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (forall (i : ι), β i) (PiLp.seminormedAddCommGroup.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_5 i)) (Pi.seminormedAddCommGroup.{u2, u3} ι (fun (i : ι) => β i) _inst_1 (fun (i : ι) => _inst_5 i)) (PiLp.module.{u1, u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) 𝕜 ι β _inst_1 fact_one_le_top_ennreal _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equivₗᵢ PiLp.equivₗᵢₓ'. -/
/-- The canonical map `pi_Lp.equiv` between `pi_Lp ∞ β` and `Π i, β i` as a linear isometric
equivalence. -/
def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
@@ -955,12 +706,6 @@ variable [Fintype ι']
variable (p 𝕜) (E : Type _) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
-/- warning: linear_isometry_equiv.pi_Lp_congr_left -> LinearIsometryEquiv.piLpCongrLeft is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] {ι' : Type.{u3}} [_inst_7 : Fintype.{u3} ι'] (E : Type.{u4}) [_inst_8 : NormedAddCommGroup.{u4} E] [_inst_9 : NormedSpace.{u1, u4} 𝕜 E _inst_3 (NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)], (Equiv.{succ u2, succ u3} ι ι') -> (LinearIsometryEquiv.{u1, u1, max u2 u4, max u3 u4} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (LinearIsometryEquiv.piLpCongrLeft._proof_1.{u1} 𝕜 _inst_3) (LinearIsometryEquiv.piLpCongrLeft._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u4} p ι (fun (i : ι) => E)) (PiLp.{u3, u4} p ι' (fun (i : ι') => E)) (PiLp.seminormedAddCommGroup.{u2, u4} p ι (fun (i : ι) => E) _inst_1 _inst_2 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.seminormedAddCommGroup.{u3, u4} p ι' (fun (i : ι') => E) _inst_7 _inst_2 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (NormedSpace.toModule.{u1, max u2 u4} 𝕜 (PiLp.{u2, u4} p ι (fun (i : ι) => E)) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u4} p ι (fun (i : ι) => E) _inst_1 _inst_2 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.normedSpace.{u1, u2, u4} p 𝕜 ι (fun (i : ι) => E) _inst_1 _inst_2 _inst_3 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι) => _inst_9))) (NormedSpace.toModule.{u1, max u3 u4} 𝕜 (PiLp.{u3, u4} p ι' (fun (i : ι') => E)) _inst_3 (PiLp.seminormedAddCommGroup.{u3, u4} p ι' (fun (i : ι') => E) _inst_7 _inst_2 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.normedSpace.{u1, u3, u4} p 𝕜 ι' (fun (i : ι') => E) _inst_7 _inst_2 _inst_3 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι') => _inst_9))))
-but is expected to have type
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] {ι' : Type.{u3}} [_inst_7 : Fintype.{u3} ι'] (E : Type.{u4}) [_inst_8 : NormedAddCommGroup.{u4} E] [_inst_9 : NormedSpace.{u1, u4} 𝕜 E _inst_3 (NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)], (Equiv.{succ u2, succ u3} ι ι') -> (LinearIsometryEquiv.{u1, u1, max u4 u2, max u4 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u4} p ι (fun (i : ι) => E)) (PiLp.{u3, u4} p ι' (fun (i : ι') => E)) (PiLp.seminormedAddCommGroup.{u2, u4} p ι (fun (i : ι) => E) _inst_1 _inst_2 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.seminormedAddCommGroup.{u3, u4} p ι' (fun (i : ι') => E) _inst_7 _inst_2 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.module.{u1, u2, u4} p 𝕜 ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.8359 : ι) => E) _inst_1 _inst_2 _inst_3 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι) => _inst_9)) (PiLp.module.{u1, u3, u4} p 𝕜 ι' (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.8368 : ι') => E) _inst_7 _inst_2 _inst_3 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι') => _inst_9)))
-Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left LinearIsometryEquiv.piLpCongrLeftₓ'. -/
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
def LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
@@ -979,18 +724,12 @@ def LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
variable {p 𝕜 E}
-/- warning: linear_isometry_equiv.pi_Lp_congr_left_apply -> LinearIsometryEquiv.piLpCongrLeft_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left_apply LinearIsometryEquiv.piLpCongrLeft_applyₓ'. -/
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_apply (e : ι ≃ ι') (v : PiLp p fun i : ι => E) :
LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e v = Equiv.piCongrLeft' (fun i : ι => E) e v :=
rfl
#align linear_isometry_equiv.pi_Lp_congr_left_apply LinearIsometryEquiv.piLpCongrLeft_apply
-/- warning: linear_isometry_equiv.pi_Lp_congr_left_symm -> LinearIsometryEquiv.piLpCongrLeft_symm is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left_symm LinearIsometryEquiv.piLpCongrLeft_symmₓ'. -/
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
(LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e).symm =
@@ -998,9 +737,6 @@ theorem LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
LinearIsometryEquiv.ext fun x => rfl
#align linear_isometry_equiv.pi_Lp_congr_left_symm LinearIsometryEquiv.piLpCongrLeft_symm
-/- warning: linear_isometry_equiv.pi_Lp_congr_left_single -> LinearIsometryEquiv.piLpCongrLeft_single is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_singleₓ'. -/
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι'] (e : ι ≃ ι')
(i : ι) (v : E) :
@@ -1012,107 +748,53 @@ theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq
Function.update, Equiv.symm_apply_eq]
#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_single
-/- warning: pi_Lp.equiv_zero -> PiLp.equiv_zero is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (OfNat.ofNat.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (OfNat.mk.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (Zero.zero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))))))) (OfNat.ofNat.{max u1 u2} (forall (i : ι), β i) 0 (OfNat.mk.{max u1 u2} (forall (i : ι), β i) 0 (Zero.zero.{max u1 u2} (forall (i : ι), β i) (Pi.instZero.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))))))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)], Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) (OfNat.ofNat.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) 0 (Zero.toOfNat0.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_zero PiLp.equiv_zeroₓ'. -/
@[simp]
theorem equiv_zero : PiLp.equiv p β 0 = 0 :=
rfl
#align pi_Lp.equiv_zero PiLp.equiv_zero
-/- warning: pi_Lp.equiv_symm_zero -> PiLp.equiv_symm_zero is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (OfNat.ofNat.{max u1 u2} (forall (i : ι), β i) 0 (OfNat.mk.{max u1 u2} (forall (i : ι), β i) 0 (Zero.zero.{max u1 u2} (forall (i : ι), β i) (Pi.instZero.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))))))) (OfNat.ofNat.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (OfNat.mk.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (Zero.zero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))))))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)], Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (OfNat.ofNat.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) 0 (Zero.toOfNat0.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (NegZeroClass.toZero.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zeroₓ'. -/
@[simp]
theorem equiv_symm_zero : (PiLp.equiv p β).symm 0 = 0 :=
rfl
#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zero
-/- warning: pi_Lp.equiv_add -> PiLp.equiv_add is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y)) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u1 u2} (forall (i : ι), β i) (Pi.instAdd.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) x) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) y))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x : PiLp.{u2, u1} p ι β) (y : PiLp.{u2, u1} p ι β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddZeroClass.toAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddMonoid.toAddZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toAddMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddZeroClass.toAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddMonoid.toAddZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toAddMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y)) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) y) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (instHAdd.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (Pi.instAdd.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toAdd.{u1} (β i) (AddMonoid.toAddZeroClass.{u1} (β i) (SubNegMonoid.toAddMonoid.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) y))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_add PiLp.equiv_addₓ'. -/
@[simp]
theorem equiv_add : PiLp.equiv p β (x + y) = PiLp.equiv p β x + PiLp.equiv p β y :=
rfl
#align pi_Lp.equiv_add PiLp.equiv_add
-/- warning: pi_Lp.equiv_symm_add -> PiLp.equiv_symm_add is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u1 u2} (forall (i : ι), β i) (Pi.instAdd.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))))) x' y')) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) x') (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) y'))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u2 u1} (forall (i : ι), β i) (Pi.instAdd.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toAdd.{u1} (β i) (AddMonoid.toAddZeroClass.{u1} (β i) (SubNegMonoid.toAddMonoid.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))))) x' y')) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u2 u1} (forall (i : ι), β i) (Pi.instAdd.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toAdd.{u1} (β i) (AddMonoid.toAddZeroClass.{u1} (β i) (SubNegMonoid.toAddMonoid.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))))) x' y')) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) y') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (instHAdd.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddZeroClass.toAdd.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddMonoid.toAddZeroClass.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubNegMonoid.toAddMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddGroup.toSubNegMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddGroup.toAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) x') (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) y'))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_add PiLp.equiv_symm_addₓ'. -/
@[simp]
theorem equiv_symm_add :
(PiLp.equiv p β).symm (x' + y') = (PiLp.equiv p β).symm x' + (PiLp.equiv p β).symm y' :=
rfl
#align pi_Lp.equiv_symm_add PiLp.equiv_symm_add
-/- warning: pi_Lp.equiv_sub -> PiLp.equiv_sub is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y)) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u1 u2} (forall (i : ι), β i) (Pi.instSub.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) x) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) y))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x : PiLp.{u2, u1} p ι β) (y : PiLp.{u2, u1} p ι β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y)) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) y) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (instHSub.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (Pi.instSub.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toSub.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) y))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_sub PiLp.equiv_subₓ'. -/
@[simp]
theorem equiv_sub : PiLp.equiv p β (x - y) = PiLp.equiv p β x - PiLp.equiv p β y :=
rfl
#align pi_Lp.equiv_sub PiLp.equiv_sub
-/- warning: pi_Lp.equiv_symm_sub -> PiLp.equiv_symm_sub is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u1 u2} (forall (i : ι), β i) (Pi.instSub.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) x' y')) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) x') (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) y'))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u2 u1} (forall (i : ι), β i) (Pi.instSub.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toSub.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))) x' y')) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u2 u1} (forall (i : ι), β i) (Pi.instSub.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toSub.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))) x' y')) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) y') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (instHSub.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubNegMonoid.toSub.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddGroup.toSubNegMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddGroup.toAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) x') (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) y'))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_subₓ'. -/
@[simp]
theorem equiv_symm_sub :
(PiLp.equiv p β).symm (x' - y') = (PiLp.equiv p β).symm x' - (PiLp.equiv p β).symm y' :=
rfl
#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_sub
-/- warning: pi_Lp.equiv_neg -> PiLp.equiv_neg is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β), Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))) x)) (Neg.neg.{max u1 u2} (forall (i : ι), β i) (Pi.instNeg.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasNeg.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) x))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x : PiLp.{u2, u1} p ι β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (Neg.neg.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toNeg.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) x)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (Neg.neg.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toNeg.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) x)) (Neg.neg.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (Pi.instNeg.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toNeg.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) x))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_neg PiLp.equiv_negₓ'. -/
@[simp]
theorem equiv_neg : PiLp.equiv p β (-x) = -PiLp.equiv p β x :=
rfl
#align pi_Lp.equiv_neg PiLp.equiv_neg
-/- warning: pi_Lp.equiv_symm_neg -> PiLp.equiv_symm_neg is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x' : forall (i : ι), β i), Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Neg.neg.{max u1 u2} (forall (i : ι), β i) (Pi.instNeg.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasNeg.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) x')) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) x'))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x' : forall (i : ι), β i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Neg.neg.{max u2 u1} (forall (i : ι), β i) (Pi.instNeg.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toNeg.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) x')) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Neg.neg.{max u2 u1} (forall (i : ι), β i) (Pi.instNeg.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toNeg.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) x')) (Neg.neg.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (NegZeroClass.toNeg.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) x'))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_negₓ'. -/
@[simp]
theorem equiv_symm_neg : (PiLp.equiv p β).symm (-x') = -(PiLp.equiv p β).symm x' :=
rfl
#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_neg
-/- warning: pi_Lp.equiv_smul -> PiLp.equiv_smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_smul PiLp.equiv_smulₓ'. -/
@[simp]
theorem equiv_smul : PiLp.equiv p β (c • x) = c • PiLp.equiv p β x :=
rfl
#align pi_Lp.equiv_smul PiLp.equiv_smul
-/- warning: pi_Lp.equiv_symm_smul -> PiLp.equiv_symm_smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_smul PiLp.equiv_symm_smulₓ'. -/
@[simp]
theorem equiv_symm_smul : (PiLp.equiv p β).symm (c • x') = c • (PiLp.equiv p β).symm x' :=
rfl
@@ -1124,12 +806,6 @@ variable (p)
variable [DecidableEq ι]
-/- warning: pi_Lp.nnnorm_equiv_symm_single -> PiLp.nnnorm_equiv_symm_single is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b : β i), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b))) (NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))) b)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_5 : DecidableEq.{succ u2} ι] [_inst_10 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] (i : ι) (b : β i), Eq.{1} NNReal (NNNorm.nnnorm.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b)) (SeminormedAddGroup.toNNNorm.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b)) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_10 (fun (i : ι) => _inst_2 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b))) (NNNorm.nnnorm.{u1} (β i) (SeminormedAddGroup.toNNNorm.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_2 i))) b)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_singleₓ'. -/
@[simp]
theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
‖(PiLp.equiv p β).symm (Pi.single i b)‖₊ = ‖b‖₊ :=
@@ -1152,23 +828,11 @@ theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
rw [equiv_symm_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_single
-/- warning: pi_Lp.norm_equiv_symm_single -> PiLp.norm_equiv_symm_single is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b : β i), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_5 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b))) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_5 i)) b)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b : β i), Eq.{1} Real (Norm.norm.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b)) (PiLp.hasNorm.{u2, u1} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u1} (β i) (_inst_5 i)) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b))) (Norm.norm.{u1} (β i) (SeminormedAddCommGroup.toNorm.{u1} (β i) (_inst_5 i)) b)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_singleₓ'. -/
@[simp]
theorem norm_equiv_symm_single (i : ι) (b : β i) : ‖(PiLp.equiv p β).symm (Pi.single i b)‖ = ‖b‖ :=
congr_arg coe <| nnnorm_equiv_symm_single p β i b
#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_single
-/- warning: pi_Lp.nndist_equiv_symm_single_same -> PiLp.nndist_equiv_symm_single_same is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.pseudoMetricSpace.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₁)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₂))) (NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i))) b₁ b₂)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} NNReal (NNDist.nndist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PseudoMetricSpace.toNNDist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PiLp.instPseudoMetricSpacePiLp.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₂))) (NNDist.nndist.{u1} (β i) (PseudoMetricSpace.toNNDist.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i))) b₁ b₂)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_sameₓ'. -/
@[simp]
theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
nndist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -1178,12 +842,6 @@ theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
nnnorm_equiv_symm_single]
#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_same
-/- warning: pi_Lp.dist_equiv_symm_single_same -> PiLp.dist_equiv_symm_single_same is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasDist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₁)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₂))) (Dist.dist.{u2} (β i) (PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i))) b₁ b₂)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} Real (Dist.dist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PiLp.instDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toDist.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₂))) (Dist.dist.{u1} (β i) (PseudoMetricSpace.toDist.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i))) b₁ b₂)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_sameₓ'. -/
@[simp]
theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
dist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -1191,12 +849,6 @@ theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
congr_arg coe <| nndist_equiv_symm_single_same p β i b₁ b₂
#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_same
-/- warning: pi_Lp.edist_equiv_symm_single_same -> PiLp.edist_equiv_symm_single_same is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₁)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₂))) (EDist.edist.{u2} (β i) (PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i))) b₁ b₂)
-but is expected to have type
- forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} ENNReal (EDist.edist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₂))) (EDist.edist.{u1} (β i) (PseudoEMetricSpace.toEDist.{u1} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i)))) b₁ b₂)
-Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_equiv_symm_single_same PiLp.edist_equiv_symm_single_sameₓ'. -/
@[simp]
theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
edist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -1206,12 +858,6 @@ theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
end Single
-/- warning: pi_Lp.nnnorm_equiv_symm_const -> PiLp.nnnorm_equiv_symm_const is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b)))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddGroup.toNNNorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_constₓ'. -/
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
@@ -1228,12 +874,6 @@ theorem nnnorm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞
NNReal.rpow_one, ENNReal.toReal_div, ENNReal.one_toReal]
#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_const
-/- warning: pi_Lp.nnnorm_equiv_symm_const' -> PiLp.nnnorm_equiv_symm_const' is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddGroup.toNNNorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'ₓ'. -/
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const` for a version which exchanges the hypothesis `nonempty ι`.
@@ -1249,12 +889,6 @@ theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι]
· exact nnnorm_equiv_symm_const hp b
#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'
-/- warning: pi_Lp.norm_equiv_symm_const -> PiLp.norm_equiv_symm_const is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (fun (i : ι) => AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β (SeminormedAddGroup.toAddGroup.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) b)))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11575 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (fun (i : ι) => NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β (SeminormedAddCommGroup.toAddCommGroup.{u2} β _inst_10))))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11575 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11575 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toNorm.{u2} β _inst_10) b)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_const PiLp.norm_equiv_symm_constₓ'. -/
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.norm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
@@ -1265,12 +899,6 @@ theorem norm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞)
(congr_arg coe <| nnnorm_equiv_symm_const hp b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const PiLp.norm_equiv_symm_const
-/- warning: pi_Lp.norm_equiv_symm_const' -> PiLp.norm_equiv_symm_const' is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (fun (i : ι) => AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β (SeminormedAddGroup.toAddGroup.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) b))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11733 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (fun (i : ι) => NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β (SeminormedAddCommGroup.toAddCommGroup.{u2} β _inst_10))))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11733 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11733 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toNorm.{u2} β _inst_10) b))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_const' PiLp.norm_equiv_symm_const'ₓ'. -/
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.norm_equiv_symm_const` for a version which exchanges the hypothesis `nonempty ι`.
@@ -1281,23 +909,11 @@ theorem norm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι] (b
(congr_arg coe <| nnnorm_equiv_symm_const' b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const' PiLp.norm_equiv_symm_const'
-/- warning: pi_Lp.nnnorm_equiv_symm_one -> PiLp.nnnorm_equiv_symm_one is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (OfNat.mk.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (One.one.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) (Pi.instOne.{u1, u2} ι (fun (i : ι) => (fun (_x : ι) => β) i) (fun (i : ι) => _inst_11))))))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β _inst_11))))))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (SeminormedAddGroup.toNNNorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11)))))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) (OfNat.ofNat.{u2} β 1 (One.toOfNat1.{u2} β _inst_11)))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_one PiLp.nnnorm_equiv_symm_oneₓ'. -/
theorem nnnorm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
‖(PiLp.equiv p fun _ : ι => β).symm 1‖₊ = Fintype.card ι ^ (1 / p).toReal * ‖(1 : β)‖₊ :=
(nnnorm_equiv_symm_const hp (1 : β)).trans rfl
#align pi_Lp.nnnorm_equiv_symm_one PiLp.nnnorm_equiv_symm_one
-/- warning: pi_Lp.norm_equiv_symm_one -> PiLp.norm_equiv_symm_one is a dubious translation:
-lean 3 declaration is
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (fun (i : ι) => AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β (SeminormedAddGroup.toAddGroup.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (OfNat.mk.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (One.one.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) (Pi.instOne.{u1, u2} ι (fun (i : ι) => (fun (_x : ι) => β) i) (fun (i : ι) => _inst_11))))))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β _inst_11))))))
-but is expected to have type
- forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} Real (Norm.norm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12054 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (fun (i : ι) => NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β (SeminormedAddCommGroup.toAddCommGroup.{u2} β _inst_10))))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12054 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12054 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11)))))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (OfNat.ofNat.{u2} β 1 (One.toOfNat1.{u2} β _inst_11)))))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_one PiLp.norm_equiv_symm_oneₓ'. -/
theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
‖(PiLp.equiv p fun _ : ι => β).symm 1‖ = Fintype.card ι ^ (1 / p).toReal * ‖(1 : β)‖ :=
(norm_equiv_symm_const hp (1 : β)).trans rfl
@@ -1305,12 +921,6 @@ theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [O
variable (𝕜 p)
-/- warning: pi_Lp.linear_equiv -> PiLp.linearEquiv is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearEquiv.{u1, u1, max u2 u3, max u2 u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (PiLp.linearEquiv._proof_1.{u1} 𝕜 _inst_3) (PiLp.linearEquiv._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u3} p ι β) (forall (i : ι), β i) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)) (PiLp.normedSpace.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i))) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
-but is expected to have type
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearEquiv.{u1, u1, max u3 u2, max u2 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u3} p ι β) (forall (i : ι), β i) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (PiLp.module.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.linear_equiv PiLp.linearEquivₓ'. -/
/-- `pi_Lp.equiv` as a linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
@@ -1319,12 +929,6 @@ protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
invFun := (PiLp.equiv _ _).symm }
#align pi_Lp.linear_equiv PiLp.linearEquiv
-/- warning: pi_Lp.continuous_linear_equiv -> PiLp.continuousLinearEquiv is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], ContinuousLinearEquiv.{u1, u1, max u2 u3, max u2 u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (PiLp.continuousLinearEquiv._proof_1.{u1} 𝕜 _inst_3) (PiLp.continuousLinearEquiv._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u3} p ι β) (UniformSpace.toTopologicalSpace.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.uniformSpace.{u2, u3} p ι β (fun (i : ι) => PseudoMetricSpace.toUniformSpace.{u3} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β i) (_inst_5 i))))) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (forall (i : ι), β i) (Pi.topologicalSpace.{u2, u3} ι (fun (i : ι) => β i) (fun (a : ι) => UniformSpace.toTopologicalSpace.{u3} (β a) (PseudoMetricSpace.toUniformSpace.{u3} (β a) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β a) (_inst_5 a))))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (a : ι) => _inst_5 a)) (PiLp.normedSpace.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (a : ι) => _inst_5 a) (fun (i : ι) => _inst_6 i))) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
-but is expected to have type
- forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], ContinuousLinearEquiv.{u1, u1, max u3 u2, max u2 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u3} p ι β) (UniformSpace.toTopologicalSpace.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.uniformSpace.{u2, u3} p ι β (fun (i : ι) => PseudoMetricSpace.toUniformSpace.{u3} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β i) (_inst_5 i))))) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (forall (i : ι), β i) (Pi.topologicalSpace.{u2, u3} ι (fun (i : ι) => β i) (fun (a : ι) => UniformSpace.toTopologicalSpace.{u3} (β a) (PseudoMetricSpace.toUniformSpace.{u3} (β a) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β a) (_inst_5 a))))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (PiLp.module.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquivₓ'. -/
/-- `pi_Lp.equiv` as a continuous linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i
@@ -1338,53 +942,32 @@ section Basis
variable (ι)
-/- warning: pi_Lp.basis_fun -> PiLp.basisFun is a dubious translation:
-lean 3 declaration is
- forall (p : ENNReal) (𝕜 : Type.{u1}) (ι : Type.{u2}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜], Basis.{u2, u1, max u2 u1} ι 𝕜 (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (AddCommGroup.toAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (PiLp.seminormedAddCommGroup.{u2, u1} p ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 (fun (i : ι) => (fun (i : ι) => NonUnitalSeminormedRing.toSeminormedAddCommGroup.{u1} ((fun (_x : ι) => 𝕜) i) (NonUnitalNormedRing.toNonUnitalSeminormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedRing.toNonUnitalNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedCommRing.toNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedField.toNormedCommRing.{u1} ((fun (_x : ι) => 𝕜) i) _inst_3))))) i)))) (NormedSpace.toModule.{u1, max u2 u1} 𝕜 (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u1} p ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 (fun (i : ι) => (fun (i : ι) => NonUnitalSeminormedRing.toSeminormedAddCommGroup.{u1} ((fun (_x : ι) => 𝕜) i) (NonUnitalNormedRing.toNonUnitalSeminormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedRing.toNonUnitalNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedCommRing.toNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedField.toNormedCommRing.{u1} ((fun (_x : ι) => 𝕜) i) _inst_3))))) i)) (PiLp.normedSpace.{u1, u2, u1} p 𝕜 ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 _inst_3 (fun (i : ι) => (fun (i : ι) => NonUnitalSeminormedRing.toSeminormedAddCommGroup.{u1} ((fun (_x : ι) => 𝕜) i) (NonUnitalNormedRing.toNonUnitalSeminormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedRing.toNonUnitalNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedCommRing.toNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedField.toNormedCommRing.{u1} ((fun (_x : ι) => 𝕜) i) _inst_3))))) i) (fun (i : ι) => (fun (i : ι) => NormedField.toNormedSpace.{u1} 𝕜 _inst_3) i)))
-but is expected to have type
- forall (p : ENNReal) (𝕜 : Type.{u1}) (ι : Type.{u2}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜], Basis.{u2, u1, max u1 u2} ι 𝕜 (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (AddCommGroup.toAddCommMonoid.{max u1 u2} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (NormedAddCommGroup.toAddCommGroup.{max u1 u2} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (PiLp.normedAddCommGroup.{u2, u1} p ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 (fun (i : ι) => NonUnitalNormedRing.toNormedAddCommGroup.{u1} 𝕜 (NormedRing.toNonUnitalNormedRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3))))))) (PiLp.module.{u1, u2, u1} p 𝕜 ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12725 : ι) => 𝕜) _inst_1 _inst_2 _inst_3 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u1} ((fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12725 : ι) => 𝕜) i) ((fun (i : ι) => NonUnitalNormedRing.toNormedAddCommGroup.{u1} 𝕜 (NormedRing.toNonUnitalNormedRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) i)) (fun (i : ι) => NormedField.toNormedSpace.{u1} 𝕜 _inst_3))
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun PiLp.basisFunₓ'. -/
/-- A version of `pi.basis_fun` for `pi_Lp`. -/
def basisFun : Basis ι 𝕜 (PiLp p fun _ => 𝕜) :=
Basis.ofEquivFun (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜)
#align pi_Lp.basis_fun PiLp.basisFun
-/- warning: pi_Lp.basis_fun_apply -> PiLp.basisFun_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_apply PiLp.basisFun_applyₓ'. -/
@[simp]
theorem basisFun_apply [DecidableEq ι] (i) :
basisFun p 𝕜 ι i = (PiLp.equiv p _).symm (Pi.single i 1) := by
simp_rw [basis_fun, Basis.coe_ofEquivFun, PiLp.linearEquiv_symm_apply, Pi.single]
#align pi_Lp.basis_fun_apply PiLp.basisFun_apply
-/- warning: pi_Lp.basis_fun_repr -> PiLp.basisFun_repr is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_repr PiLp.basisFun_reprₓ'. -/
@[simp]
theorem basisFun_repr (x : PiLp p fun i : ι => 𝕜) (i : ι) : (basisFun p 𝕜 ι).repr x i = x i :=
rfl
#align pi_Lp.basis_fun_repr PiLp.basisFun_repr
-/- warning: pi_Lp.basis_fun_equiv_fun -> PiLp.basisFun_equivFun is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFunₓ'. -/
@[simp]
theorem basisFun_equivFun : (basisFun p 𝕜 ι).equivFun = PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜 :=
Basis.equivFun_ofEquivFun _
#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFun
-/- warning: pi_Lp.basis_fun_eq_pi_basis_fun -> PiLp.basisFun_eq_pi_basisFun is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_eq_pi_basis_fun PiLp.basisFun_eq_pi_basisFunₓ'. -/
theorem basisFun_eq_pi_basisFun :
basisFun p 𝕜 ι = (Pi.basisFun 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜).symm :=
rfl
#align pi_Lp.basis_fun_eq_pi_basis_fun PiLp.basisFun_eq_pi_basisFun
-/- warning: pi_Lp.basis_fun_map -> PiLp.basisFun_map is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_map PiLp.basisFun_mapₓ'. -/
@[simp]
theorem basisFun_map :
(basisFun p 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜) = Pi.basisFun 𝕜 ι :=
@@ -1393,9 +976,6 @@ theorem basisFun_map :
open Matrix
-/- warning: pi_Lp.basis_to_matrix_basis_fun_mul -> PiLp.basis_toMatrix_basisFun_mul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mulₓ'. -/
theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι => 𝕜)) (A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) ⬝ A =
Matrix.of fun i j => b.repr ((PiLp.equiv _ _).symm (Aᵀ j)) i :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -182,9 +182,7 @@ lean 3 declaration is
but is expected to have type
forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.instEDistPiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u2} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EDist.edist.{u1} (β i) (_inst_2 i) (f i) (g i)))
Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSupₓ'. -/
-theorem edist_eq_iSup (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) :=
- by
- dsimp [edist]
+theorem edist_eq_iSup (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) := by dsimp [edist];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSup
@@ -275,9 +273,7 @@ lean 3 declaration is
but is expected to have type
forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (PiLp.instDistPiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u2} Real Real.instSupSetReal ι (fun (i : ι) => Dist.dist.{u1} (α i) (_inst_2 i) (f i) (g i)))
Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSupₓ'. -/
-theorem dist_eq_iSup (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) :=
- by
- dsimp [dist]
+theorem dist_eq_iSup (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) := by dsimp [dist];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSup
@@ -319,9 +315,7 @@ lean 3 declaration is
but is expected to have type
forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.hasNorm.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (iSup.{0, succ u2} Real Real.instSupSetReal ι (fun (i : ι) => Norm.norm.{u1} (β i) (_inst_2 i) (f i)))
Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSupₓ'. -/
-theorem norm_eq_ciSup (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ :=
- by
- dsimp [norm]
+theorem norm_eq_ciSup (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ := by dsimp [norm];
exact if_neg ENNReal.top_ne_zero
#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSup
@@ -459,8 +453,7 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
· refine' ENNReal.toReal_le_of_le_ofReal (Real.sSup_nonneg _ _) (iSup_le fun i => _)
· rintro - ⟨i, rfl⟩
exact dist_nonneg
- · unfold edist
- rw [PseudoMetricSpace.edist_dist]
+ · unfold edist; rw [PseudoMetricSpace.edist_dist]
exact ENNReal.ofReal_le_ofReal (le_ciSup (Fintype.bddAbove_range _) i)
· have A : ∀ i, edist (f i) (g i) ^ p.to_real ≠ ⊤ := fun i =>
ENNReal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)
@@ -647,9 +640,7 @@ Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_sum Pi
theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) :=
- Subtype.ext <| by
- push_cast
- exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
+ Subtype.ext <| by push_cast ; exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
/- warning: pi_Lp.nndist_eq_supr -> PiLp.nndist_eq_iSup is a dubious translation:
@@ -660,9 +651,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSupₓ'. -/
theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
- Subtype.ext <| by
- push_cast
- exact dist_eq_csupr _ _
+ Subtype.ext <| by push_cast ; exact dist_eq_csupr _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
/- warning: pi_Lp.lipschitz_with_equiv -> PiLp.lipschitzWith_equiv is a dubious translation:
@@ -712,10 +701,7 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
dist_eq := fun x y => by
rcases p.dichotomy with (rfl | h)
· simpa only [dist_eq_csupr, norm_eq_csupr, dist_eq_norm]
- · have : p ≠ ∞ := by
- intro hp
- rw [hp, ENNReal.top_toReal] at h
- linarith
+ · have : p ≠ ∞ := by intro hp; rw [hp, ENNReal.top_toReal] at h; linarith
simpa only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
dist_eq_norm] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
@@ -739,9 +725,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sumₓ'. -/
theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp : p ≠ ∞)
[∀ i, SeminormedAddCommGroup (β i)] (f : PiLp p β) :
- ‖f‖₊ = (∑ i, ‖f i‖₊ ^ p.toReal) ^ (1 / p.toReal) :=
- by
- ext
+ ‖f‖₊ = (∑ i, ‖f i‖₊ ^ p.toReal) ^ (1 / p.toReal) := by ext;
simp [NNReal.coe_sum, norm_eq_sum (p.to_real_pos_iff_ne_top.mpr hp)]
#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sum
@@ -752,9 +736,7 @@ but is expected to have type
forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.seminormedAddCommGroup.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i)))) f) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toSupSet.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.instConditionallyCompleteLinearOrderBotNNReal))) ι (fun (i : ι) => NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i))) (f i)))
Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSupₓ'. -/
theorem nnnorm_eq_ciSup {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
- ‖f‖₊ = ⨆ i, ‖f i‖₊ := by
- ext
- simp [NNReal.coe_iSup, norm_eq_csupr]
+ ‖f‖₊ = ⨆ i, ‖f i‖₊ := by ext; simp [NNReal.coe_iSup, norm_eq_csupr]
#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSup
/- warning: pi_Lp.norm_eq_of_nat -> PiLp.norm_eq_of_nat is a dubious translation:
@@ -779,11 +761,8 @@ but is expected to have type
forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_3 i)))))))) x) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2ₓ'. -/
theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
- ‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) :=
- by
- convert norm_eq_of_nat 2 (by norm_cast) _
- rw [sqrt_eq_rpow]
- norm_cast
+ ‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) := by convert norm_eq_of_nat 2 (by norm_cast) _;
+ rw [sqrt_eq_rpow]; norm_cast
#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2
/- warning: pi_Lp.nnnorm_eq_of_L2 -> PiLp.nnnorm_eq_of_L2 is a dubious translation:
@@ -791,9 +770,7 @@ theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)
Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2ₓ'. -/
theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖₊ = NNReal.sqrt (∑ i : ι, ‖x i‖₊ ^ 2) :=
- Subtype.ext <| by
- push_cast
- exact norm_eq_of_L2 x
+ Subtype.ext <| by push_cast ; exact norm_eq_of_L2 x
#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2
/- warning: pi_Lp.norm_sq_eq_of_L2 -> PiLp.norm_sq_eq_of_L2 is a dubious translation:
@@ -826,9 +803,7 @@ theorem dist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)
Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2ₓ'. -/
theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
nndist x y = (∑ i, nndist (x i) (y i) ^ 2).sqrt :=
- Subtype.ext <| by
- push_cast
- exact dist_eq_of_L2 _ _
+ Subtype.ext <| by push_cast ; exact dist_eq_of_L2 _ _
#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2
/- warning: pi_Lp.edist_eq_of_L2 -> PiLp.edist_eq_of_L2 is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 13bce9a6b6c44f6b4c91ac1c1d2a816e2533d395
+! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.LinearAlgebra.Matrix.Basis
/-!
# `L^p` distance on finite products of metric spaces
+
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
Given finitely many metric spaces, one can put the max distance on their product, but there is also
a whole family of natural distances, indexed by a parameter `p : ℝ≥0∞`, that also induce
the product topology. We define them in this file. For `0 < p < ∞`, the distance on `Π i, α i`
@@ -71,6 +74,7 @@ open BigOperators uniformity Topology NNReal ENNReal
noncomputable section
+#print PiLp /-
/-- A copy of a Pi type, on which we will put the `L^p` distance. Since the Pi type itself is
already endowed with the `L^∞` distance, we need the type synonym to avoid confusing typeclass
resolution. Also, we let it depend on `p`, to get a whole family of type on which we can put
@@ -79,6 +83,7 @@ different distances. -/
def PiLp (p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) : Type _ :=
∀ i : ι, α i
#align pi_Lp PiLp
+-/
instance (p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
⟨fun i => default⟩
@@ -87,25 +92,35 @@ namespace PiLp
variable (p : ℝ≥0∞) (𝕜 𝕜' : Type _) {ι : Type _} (α : ι → Type _) (β : ι → Type _)
+#print PiLp.equiv /-
/-- Canonical bijection between `pi_Lp p α` and the original Pi type. We introduce it to be able
to compare the `L^p` and `L^∞` distances through it. -/
protected def equiv : PiLp p α ≃ ∀ i : ι, α i :=
Equiv.refl _
#align pi_Lp.equiv PiLp.equiv
+-/
/-! Note that the unapplied versions of these lemmas are deliberately omitted, as they break
the use of the type synonym. -/
+/- warning: pi_Lp.equiv_apply -> PiLp.equiv_apply is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) (x : PiLp.{u1, u2} p ι α) (i : ι), Eq.{succ u2} (α i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι α) (forall (i : ι), α i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι α) (forall (i : ι), α i)) => (PiLp.{u1, u2} p ι α) -> (forall (i : ι), α i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι α) (forall (i : ι), α i)) (PiLp.equiv.{u1, u2} p ι α) x i) (x i)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (α : ι -> Type.{u1}) (x : PiLp.{u2, u1} p ι α) (i : ι), Eq.{succ u1} (α i) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι α) (forall (i : ι), α i)) (PiLp.{u2, u1} p ι α) (fun (_x : PiLp.{u2, u1} p ι α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι α) => forall (i : ι), α i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι α) (forall (i : ι), α i)) (PiLp.equiv.{u2, u1} p ι α) x i) (x i)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_apply PiLp.equiv_applyₓ'. -/
@[simp]
theorem equiv_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
rfl
#align pi_Lp.equiv_apply PiLp.equiv_apply
+#print PiLp.equiv_symm_apply /-
@[simp]
theorem equiv_symm_apply (x : ∀ i, α i) (i : ι) : (PiLp.equiv p α).symm x i = x i :=
rfl
#align pi_Lp.equiv_symm_apply PiLp.equiv_symm_apply
+-/
section DistNorm
@@ -139,16 +154,34 @@ instance : EDist (PiLp p β)
variable {β}
+/- warning: pi_Lp.edist_eq_card -> PiLp.edist_eq_card is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), EDist.{u2} (β i)] (f : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β) (g : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β) (PiLp.hasEdist.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat ENNReal (HasLiftT.mk.{1, 1} Nat ENNReal (CoeTCₓ.coe.{1, 1} Nat ENNReal (Nat.castCoe.{0} ENNReal (AddMonoidWithOne.toNatCast.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) (Finset.card.{u1} ι (Set.Finite.toFinset.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (g i))) (Set.toFinite.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (g i))) (Subtype.finite.{succ u1} ι (Finite.of_fintype.{u1} ι _inst_1) (fun (x : ι) => Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (g i)))))))))
+but is expected to have type
+ forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] (f : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β) (g : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β) (PiLp.instEDistPiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (Nat.cast.{0} ENNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (Finset.card.{u2} ι (Set.Finite.toFinset.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (g i))) (Set.toFinite.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (g i))) (Subtype.finite.{succ u2} ι (Finite.of_fintype.{u2} ι _inst_1) (fun (x : ι) => Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (g i)))))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_card PiLp.edist_eq_cardₓ'. -/
theorem edist_eq_card (f g : PiLp 0 β) : edist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.edist_eq_card PiLp.edist_eq_card
+/- warning: pi_Lp.edist_eq_sum -> PiLp.edist_eq_sum is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), EDist.{u2} (β i)] {p : ENNReal}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ENNReal.toReal p)) -> (forall (f : PiLp.{u1, u2} p ι β) (g : PiLp.{u1, u2} p ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.Real.hasPow) (Finset.sum.{0, u1} ENNReal ι (OrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (OrderedSemiring.toOrderedAddCommMonoid.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.Real.hasPow) (EDist.edist.{u2} (β i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
+but is expected to have type
+ forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] {p : ENNReal}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (ENNReal.toReal p)) -> (forall (f : PiLp.{u2, u1} p ι β) (g : PiLp.{u2, u1} p ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.instPowENNRealReal) (Finset.sum.{0, u2} ENNReal ι (LinearOrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (LinearOrderedAddCommMonoidWithTop.toLinearOrderedAddCommMonoid.{0} ENNReal ENNReal.instLinearOrderedAddCommMonoidWithTopENNReal)) (Finset.univ.{u2} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.instPowENNRealReal) (EDist.edist.{u1} (β i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_sum PiLp.edist_eq_sumₓ'. -/
theorem edist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p β) :
edist f g = (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.edist_eq_sum PiLp.edist_eq_sum
+/- warning: pi_Lp.edist_eq_supr -> PiLp.edist_eq_iSup is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), EDist.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (g : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.hasEdist.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EDist.edist.{u2} (β i) (_inst_2 i) (f i) (g i)))
+but is expected to have type
+ forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), EDist.{u1} (β i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.instEDistPiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u2} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EDist.edist.{u1} (β i) (_inst_2 i) (f i) (g i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSupₓ'. -/
theorem edist_eq_iSup (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) :=
by
dsimp [edist]
@@ -161,6 +194,12 @@ section EdistProp
variable {β} [∀ i, PseudoEMetricSpace (β i)]
+/- warning: pi_Lp.edist_self -> PiLp.edist_self is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] (f : PiLp.{u1, u2} p ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toHasEdist.{u2} (β i) (_inst_2 i))) f f) (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero)))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] (f : PiLp.{u2, u1} p ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (_inst_2 i))) f f) (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_self PiLp.edist_selfₓ'. -/
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
@@ -171,6 +210,12 @@ protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
· simp [edist_eq_sum h, ENNReal.zero_rpow_of_pos h, ENNReal.zero_rpow_of_pos (inv_pos.2 <| h)]
#align pi_Lp.edist_self PiLp.edist_self
+/- warning: pi_Lp.edist_comm -> PiLp.edist_comm is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] (f : PiLp.{u1, u2} p ι β) (g : PiLp.{u1, u2} p ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toHasEdist.{u2} (β i) (_inst_2 i))) f g) (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toHasEdist.{u2} (β i) (_inst_2 i))) g f)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] (f : PiLp.{u2, u1} p ι β) (g : PiLp.{u2, u1} p ι β), Eq.{1} ENNReal (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (_inst_2 i))) f g) (EDist.edist.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (_inst_2 i))) g f)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_comm PiLp.edist_commₓ'. -/
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_comm (f g : PiLp p β) : edist f g = edist g f :=
@@ -202,21 +247,39 @@ instance : Dist (PiLp p α)
variable {α}
+/- warning: pi_Lp.dist_eq_card -> PiLp.dist_eq_card is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Dist.{u2} (α i)] (f : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α) (g : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α) (PiLp.hasDist.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Finset.card.{u1} ι (Set.Finite.toFinset.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (α i) (f i) (g i))) (Set.toFinite.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (α i) (f i) (g i))) (Subtype.finite.{succ u1} ι (Finite.of_fintype.{u1} ι _inst_1) (fun (x : ι) => Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (α i) (f i) (g i)))))))))
+but is expected to have type
+ forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] (f : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α) (g : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α) (PiLp.instDistPiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (Nat.cast.{0} Real Real.natCast (Finset.card.{u2} ι (Set.Finite.toFinset.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (α i) (f i) (g i))) (Set.toFinite.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (α i) (f i) (g i))) (Subtype.finite.{succ u2} ι (Finite.of_fintype.{u2} ι _inst_1) (fun (x : ι) => Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (α i) (f i) (g i)))))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_card PiLp.dist_eq_cardₓ'. -/
theorem dist_eq_card (f g : PiLp 0 α) : dist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.dist_eq_card PiLp.dist_eq_card
+/- warning: pi_Lp.dist_eq_sum -> PiLp.dist_eq_sum is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Dist.{u2} (α i)] {p : ENNReal}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ENNReal.toReal p)) -> (forall (f : PiLp.{u1, u2} p ι α) (g : PiLp.{u1, u2} p ι α), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} p ι α) (PiLp.hasDist.{u1, u2} p ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Dist.dist.{u2} (α i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
+but is expected to have type
+ forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] {p : ENNReal}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (ENNReal.toReal p)) -> (forall (f : PiLp.{u2, u1} p ι α) (g : PiLp.{u2, u1} p ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} p ι α) (PiLp.instDistPiLp.{u2, u1} p ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Finset.sum.{0, u2} Real ι Real.instAddCommMonoidReal (Finset.univ.{u2} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Dist.dist.{u1} (α i) (_inst_2 i) (f i) (g i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_sum PiLp.dist_eq_sumₓ'. -/
theorem dist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p α) :
dist f g = (∑ i, dist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.dist_eq_sum PiLp.dist_eq_sum
-theorem dist_eq_csupr (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) :=
+/- warning: pi_Lp.dist_eq_csupr -> PiLp.dist_eq_iSup is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Dist.{u2} (α i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α) (g : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α) (PiLp.hasDist.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u1} Real Real.hasSup ι (fun (i : ι) => Dist.dist.{u2} (α i) (_inst_2 i) (f i) (g i)))
+but is expected to have type
+ forall {ι : Type.{u2}} {α : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Dist.{u1} (α i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α), Eq.{1} Real (Dist.dist.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (PiLp.instDistPiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α _inst_1 (fun (i : ι) => _inst_2 i)) f g) (iSup.{0, succ u2} Real Real.instSupSetReal ι (fun (i : ι) => Dist.dist.{u1} (α i) (_inst_2 i) (f i) (g i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSupₓ'. -/
+theorem dist_eq_iSup (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) :=
by
dsimp [dist]
exact if_neg ENNReal.top_ne_zero
-#align pi_Lp.dist_eq_csupr PiLp.dist_eq_csupr
+#align pi_Lp.dist_eq_csupr PiLp.dist_eq_iSup
end Dist
@@ -224,6 +287,7 @@ section Norm
variable [∀ i, Norm (β i)] [∀ i, Zero (β i)]
+#print PiLp.hasNorm /-
/-- Endowing the space `pi_Lp p β` with the `L^p` norm. We register this instance
separate from `pi_Lp.seminormed_add_comm_group` since the latter requires the type class hypothesis
`[fact (1 ≤ p)]` in order to prove the triangle inequality.
@@ -235,19 +299,38 @@ instance hasNorm : Norm (PiLp p β)
if hp : p = 0 then { i | f i ≠ 0 }.toFinite.toFinset.card
else if p = ∞ then ⨆ i, ‖f i‖ else (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal)
#align pi_Lp.has_norm PiLp.hasNorm
+-/
variable {p β}
+/- warning: pi_Lp.norm_eq_card -> PiLp.norm_eq_card is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Norm.{u2} (β i)] [_inst_3 : forall (i : ι), Zero.{u2} (β i)] (f : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 0 (OfNat.mk.{0} ENNReal 0 (Zero.zero.{0} ENNReal ENNReal.hasZero))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Finset.card.{u1} ι (Set.Finite.toFinset.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (_inst_3 i)))))) (Set.toFinite.{u1} ι (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (_inst_3 i)))))) (Subtype.finite.{succ u1} ι (Finite.of_fintype.{u1} ι _inst_1) (fun (x : ι) => Membership.Mem.{u1, u1} ι (Set.{u1} ι) (Set.hasMem.{u1} ι) x (setOf.{u1} ι (fun (i : ι) => Ne.{succ u2} (β i) (f i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (_inst_3 i))))))))))))
+but is expected to have type
+ forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)] (f : PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β) (PiLp.hasNorm.{u2, u1} (OfNat.ofNat.{0} ENNReal 0 (Zero.toOfNat0.{0} ENNReal instENNRealZero)) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (Nat.cast.{0} Real Real.natCast (Finset.card.{u2} ι (Set.Finite.toFinset.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (OfNat.ofNat.{u1} (β i) 0 (Zero.toOfNat0.{u1} (β i) (_inst_3 i))))) (Set.toFinite.{u2} ι (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (OfNat.ofNat.{u1} (β i) 0 (Zero.toOfNat0.{u1} (β i) (_inst_3 i))))) (Subtype.finite.{succ u2} ι (Finite.of_fintype.{u2} ι _inst_1) (fun (x : ι) => Membership.mem.{u2, u2} ι (Set.{u2} ι) (Set.instMembershipSet.{u2} ι) x (setOf.{u2} ι (fun (i : ι) => Ne.{succ u1} (β i) (f i) (OfNat.ofNat.{u1} (β i) 0 (Zero.toOfNat0.{u1} (β i) (_inst_3 i)))))))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_card PiLp.norm_eq_cardₓ'. -/
theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = { i | f i ≠ 0 }.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.norm_eq_card PiLp.norm_eq_card
-theorem norm_eq_csupr (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ :=
+/- warning: pi_Lp.norm_eq_csupr -> PiLp.norm_eq_ciSup is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Norm.{u2} (β i)] [_inst_3 : forall (i : ι), Zero.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.hasNorm.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (iSup.{0, succ u1} Real Real.hasSup ι (fun (i : ι) => Norm.norm.{u2} (β i) (_inst_2 i) (f i)))
+but is expected to have type
+ forall {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.hasNorm.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (iSup.{0, succ u2} Real Real.instSupSetReal ι (fun (i : ι) => Norm.norm.{u1} (β i) (_inst_2 i) (f i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSupₓ'. -/
+theorem norm_eq_ciSup (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ :=
by
dsimp [norm]
exact if_neg ENNReal.top_ne_zero
-#align pi_Lp.norm_eq_csupr PiLp.norm_eq_csupr
-
+#align pi_Lp.norm_eq_csupr PiLp.norm_eq_ciSup
+
+/- warning: pi_Lp.norm_eq_sum -> PiLp.norm_eq_sum is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} {β : ι -> Type.{u2}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : forall (i : ι), Norm.{u2} (β i)] [_inst_3 : forall (i : ι), Zero.{u2} (β i)], (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (ENNReal.toReal p)) -> (forall (f : PiLp.{u1, u2} p ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Norm.norm.{u2} (β i) (_inst_2 i) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} {β : ι -> Type.{u1}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), Norm.{u1} (β i)] [_inst_3 : forall (i : ι), Zero.{u1} (β i)], (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (ENNReal.toReal p)) -> (forall (f : PiLp.{u2, u1} p ι β), Eq.{1} Real (Norm.norm.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.hasNorm.{u2, u1} p ι β _inst_1 (fun (i : ι) => _inst_2 i) (fun (i : ι) => _inst_3 i)) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Finset.sum.{0, u2} Real ι Real.instAddCommMonoidReal (Finset.univ.{u2} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Norm.norm.{u1} (β i) (_inst_2 i) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_sum PiLp.norm_eq_sumₓ'. -/
theorem norm_eq_sum (hp : 0 < p.toReal) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal) :=
let hp' := ENNReal.toReal_pos_iff.mp hp
@@ -279,6 +362,12 @@ variable [Fact (1 ≤ p)] [∀ i, PseudoMetricSpace (α i)] [∀ i, PseudoEMetri
variable [Fintype ι]
+/- warning: pi_Lp.pseudo_emetric_aux -> PiLp.pseudoEmetricAux is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], PseudoEMetricSpace.{max u1 u2} (PiLp.{u1, u2} p ι β)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], PseudoEMetricSpace.{max u2 u1} (PiLp.{u1, u2} p ι β)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.pseudo_emetric_aux PiLp.pseudoEmetricAuxₓ'. -/
/-- Endowing the space `pi_Lp p β` with the `L^p` pseudoemetric structure. This definition is not
satisfactory, as it does not register the fact that the topology and the uniform structure coincide
with the product one. Therefore, we do not register it as an instance. Using this as a temporary
@@ -313,6 +402,12 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β)
attribute [local instance] PiLp.pseudoEmetricAux
+/- warning: pi_Lp.supr_edist_ne_top_aux -> PiLp.iSup_edist_ne_top_aux is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_5 : Finite.{succ u1} ι] {α : ι -> Type.{u2}} [_inst_6 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α) (g : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι α), Ne.{1} ENNReal (iSup.{0, succ u1} ENNReal (ConditionallyCompleteLattice.toHasSup.{0} ENNReal (CompleteLattice.toConditionallyCompleteLattice.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι (fun (i : ι) => EDist.edist.{u2} (α i) (PseudoMetricSpace.toEDist.{u2} (α i) (_inst_6 i)) (f i) (g i))) (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))
+but is expected to have type
+ forall {ι : Type.{u2}} [_inst_5 : Finite.{succ u2} ι] {α : ι -> Type.{u1}} [_inst_6 : forall (i : ι), PseudoMetricSpace.{u1} (α i)] (f : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α) (g : PiLp.{u2, u1} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι α), Ne.{1} ENNReal (iSup.{0, succ u2} ENNReal (ConditionallyCompleteLattice.toSupSet.{0} ENNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} ENNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} ENNReal (CompleteLinearOrder.toConditionallyCompleteLinearOrderBot.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) ι (fun (i : ι) => EDist.edist.{u1} (α i) (PseudoEMetricSpace.toEDist.{u1} (α i) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} (α i) (_inst_6 i))) (f i) (g i))) (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_auxₓ'. -/
/-- An auxiliary lemma used twice in the proof of `pi_Lp.pseudo_metric_aux` below. Not intended for
use outside this file. -/
theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
@@ -325,6 +420,12 @@ theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
exact_mod_cast hM i
#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_aux
+/- warning: pi_Lp.pseudo_metric_aux -> PiLp.pseudoMetricAux is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] [_inst_4 : Fintype.{u1} ι], PseudoMetricSpace.{max u1 u2} (PiLp.{u1, u2} p ι α)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] [_inst_4 : Fintype.{u1} ι], PseudoMetricSpace.{max u2 u1} (PiLp.{u1, u2} p ι α)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.pseudo_metric_aux PiLp.pseudoMetricAuxₓ'. -/
/-- Endowing the space `pi_Lp p α` with the `L^p` pseudometric structure. This definition is not
satisfactory, as it does not register the fact that the topology, the uniform structure, and the
bornology coincide with the product ones. Therefore, we do not register it as an instance. Using
@@ -369,6 +470,12 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
attribute [local instance] PiLp.pseudoMetricAux
+/- warning: pi_Lp.lipschitz_with_equiv_aux -> PiLp.lipschitzWith_equiv_aux is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], LipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u1, u2} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (OfNat.mk.{0} NNReal 1 (One.one.{0} NNReal (AddMonoidWithOne.toOne.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] [_inst_4 : Fintype.{u2} ι], LipschitzWith.{max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u2, u1} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u2, u1} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (One.toOfNat1.{0} NNReal instNNRealOne)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_auxₓ'. -/
theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
by
intro x y
@@ -391,6 +498,12 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
+/- warning: pi_Lp.antilipschitz_with_equiv_aux -> PiLp.antilipschitzWith_equiv_aux is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], AntilipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u1, u2} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_4)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] [_inst_4 : Fintype.{u2} ι], AntilipschitzWith.{max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricAux.{u2, u1} p ι β _inst_1 (fun (b : ι) => _inst_3 b) _inst_4) (pseudoEMetricSpacePi.{u2, u1} ι (fun (i : ι) => β i) _inst_4 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u2} ι _inst_4)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_auxₓ'. -/
theorem antilipschitzWith_equiv_aux :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
by
@@ -424,6 +537,12 @@ theorem antilipschitzWith_equiv_aux :
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
+/- warning: pi_Lp.aux_uniformity_eq -> PiLp.aux_uniformity_eq is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)] [_inst_4 : Fintype.{u1} ι], Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (Prod.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β))) (uniformity.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoEMetricSpace.toUniformSpace.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.pseudoEmetricAux.{u1, u2} p ι β _inst_1 (fun (i : ι) => _inst_3 i) _inst_4))) (uniformity.{max u1 u2} (forall (i : ι), β i) (Pi.uniformSpace.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => PseudoEMetricSpace.toUniformSpace.{u2} (β i) (_inst_3 i))))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u1} (β i)] [_inst_4 : Fintype.{u2} ι], Eq.{max (succ u2) (succ u1)} (Filter.{max u1 u2} (Prod.{max u1 u2, max u1 u2} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β))) (uniformity.{max u1 u2} (PiLp.{u2, u1} p ι β) (PseudoEMetricSpace.toUniformSpace.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.pseudoEmetricAux.{u2, u1} p ι β _inst_1 (fun (i : ι) => _inst_3 i) _inst_4))) (uniformity.{max u2 u1} (forall (i : ι), β i) (Pi.uniformSpace.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => PseudoEMetricSpace.toUniformSpace.{u1} (β i) (_inst_3 i))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.aux_uniformity_eq PiLp.aux_uniformity_eqₓ'. -/
theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
by
have A : UniformInducing (PiLp.equiv p β) :=
@@ -434,7 +553,13 @@ theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] :=
rw [← A.comap_uniformity, this, comap_id]
#align pi_Lp.aux_uniformity_eq PiLp.aux_uniformity_eq
-theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.bornology :=
+/- warning: pi_Lp.aux_cobounded_eq -> PiLp.aux_cobounded_eq is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u2} (α i)] [_inst_4 : Fintype.{u1} ι], Eq.{succ (max u1 u2)} (Filter.{max u1 u2} (PiLp.{u1, u2} p ι α)) (Bornology.cobounded.{max u1 u2} (PiLp.{u1, u2} p ι α) (PseudoMetricSpace.toBornology.{max u1 u2} (PiLp.{u1, u2} p ι α) (PiLp.pseudoMetricAux.{u1, u2} p ι α _inst_1 (fun (i : ι) => _inst_2 i) _inst_4))) (Bornology.cobounded.{max u1 u2} (forall (i : ι), α i) (Pi.instBornology.{u1, u2} ι (fun (i : ι) => α i) _inst_4 (fun (i : ι) => PseudoMetricSpace.toBornology.{u2} (α i) (_inst_2 i))))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (α : ι -> Type.{u1}) [_inst_1 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_2 : forall (i : ι), PseudoMetricSpace.{u1} (α i)] [_inst_4 : Fintype.{u2} ι], Eq.{max (succ u2) (succ u1)} (Filter.{max u1 u2} (PiLp.{u2, u1} p ι α)) (Bornology.cobounded.{max u1 u2} (PiLp.{u2, u1} p ι α) (PseudoMetricSpace.toBornology.{max u2 u1} (PiLp.{u2, u1} p ι α) (PiLp.pseudoMetricAux.{u2, u1} p ι α _inst_1 (fun (i : ι) => _inst_2 i) _inst_4))) (Bornology.cobounded.{max u1 u2} (forall (i : ι), α i) (Pi.instBornology.{u2, u1} ι (fun (i : ι) => α i) _inst_4 (fun (i : ι) => PseudoMetricSpace.toBornology.{u1} (α i) (_inst_2 i))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.aux_cobounded_eq PiLp.aux_cobounded_eqₓ'. -/
+theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.instBornology :=
calc
cobounded (PiLp p α) = comap (PiLp.equiv p α) (cobounded _) :=
le_antisymm (antilipschitzWith_equiv_aux p α).tendsto_cobounded.le_comap
@@ -448,34 +573,46 @@ end Aux
/-! ### Instances on finite `L^p` products -/
+#print PiLp.uniformSpace /-
instance uniformSpace [∀ i, UniformSpace (β i)] : UniformSpace (PiLp p β) :=
Pi.uniformSpace _
#align pi_Lp.uniform_space PiLp.uniformSpace
+-/
+#print PiLp.uniformContinuous_equiv /-
theorem uniformContinuous_equiv [∀ i, UniformSpace (β i)] : UniformContinuous (PiLp.equiv p β) :=
uniformContinuous_id
#align pi_Lp.uniform_continuous_equiv PiLp.uniformContinuous_equiv
+-/
+#print PiLp.uniformContinuous_equiv_symm /-
theorem uniformContinuous_equiv_symm [∀ i, UniformSpace (β i)] :
UniformContinuous (PiLp.equiv p β).symm :=
uniformContinuous_id
#align pi_Lp.uniform_continuous_equiv_symm PiLp.uniformContinuous_equiv_symm
+-/
+#print PiLp.continuous_equiv /-
@[continuity]
theorem continuous_equiv [∀ i, UniformSpace (β i)] : Continuous (PiLp.equiv p β) :=
continuous_id
#align pi_Lp.continuous_equiv PiLp.continuous_equiv
+-/
+#print PiLp.continuous_equiv_symm /-
@[continuity]
theorem continuous_equiv_symm [∀ i, UniformSpace (β i)] : Continuous (PiLp.equiv p β).symm :=
continuous_id
#align pi_Lp.continuous_equiv_symm PiLp.continuous_equiv_symm
+-/
variable [Fintype ι]
+#print PiLp.bornology /-
instance bornology [∀ i, Bornology (β i)] : Bornology (PiLp p β) :=
- Pi.bornology
+ Pi.instBornology
#align pi_Lp.bornology PiLp.bornology
+-/
-- throughout the rest of the file, we assume `1 ≤ p`
variable [Fact (1 ≤ p)]
@@ -488,7 +625,7 @@ instance [∀ i, PseudoEMetricSpace (β i)] : PseudoEMetricSpace (PiLp p β) :=
/-- emetric space instance on the product of finitely many emetric spaces, using the `L^p`
edistance, and having as uniformity the product uniformity. -/
instance [∀ i, EMetricSpace (α i)] : EMetricSpace (PiLp p α) :=
- @EMetricSpace.ofT0PseudoEMetricSpace (PiLp p α) _ Pi.t0Space
+ @EMetricSpace.ofT0PseudoEMetricSpace (PiLp p α) _ Pi.instT0Space
/-- pseudometric space instance on the product of finitely many psuedometric spaces, using the
`L^p` distance, and having as uniformity the product uniformity. -/
@@ -501,6 +638,12 @@ and having as uniformity the product uniformity. -/
instance [∀ i, MetricSpace (α i)] : MetricSpace (PiLp p α) :=
MetricSpace.ofT0PseudoMetricSpace _
+/- warning: pi_Lp.nndist_eq_sum -> PiLp.nndist_eq_sum is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), PseudoMetricSpace.{u2} (β i)], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.pseudoMetricSpace.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i))) x y) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_4 i)) (x i) (y i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), PseudoMetricSpace.{u2} (β i)], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.instPseudoMetricSpacePiLp.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i))) x y) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal instNNRealStrictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_4 i)) (x i) (y i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sumₓ'. -/
theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) :=
@@ -509,6 +652,12 @@ theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [
exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
+/- warning: pi_Lp.nndist_eq_supr -> PiLp.nndist_eq_iSup is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), PseudoMetricSpace.{u2} (β i)] (x : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (y : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.pseudoMetricSpace.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i))) x y) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toHasSup.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.conditionallyCompleteLinearOrderBot))) ι (fun (i : ι) => NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_3 i)) (x i) (y i)))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), PseudoMetricSpace.{u2} (β i)] (x : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (y : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.instPseudoMetricSpacePiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i))) x y) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toSupSet.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.instConditionallyCompleteLinearOrderBotNNReal))) ι (fun (i : ι) => NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (_inst_3 i)) (x i) (y i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSupₓ'. -/
theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
Subtype.ext <| by
@@ -516,15 +665,28 @@ theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x
exact dist_eq_csupr _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
+/- warning: pi_Lp.lipschitz_with_equiv -> PiLp.lipschitzWith_equiv is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], LipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricSpace.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (OfNat.mk.{0} NNReal 1 (One.one.{0} NNReal (AddMonoidWithOne.toOne.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], LipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.instPseudoEMetricSpacePiLp.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (OfNat.ofNat.{0} NNReal 1 (One.toOfNat1.{0} NNReal instNNRealOne)) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.{u1, u2} p ι β) (fun (_x : PiLp.{u1, u2} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u1, u2} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equivₓ'. -/
theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
lipschitzWith_equiv_aux p β
#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equiv
+/- warning: pi_Lp.antilipschitz_with_equiv -> PiLp.antilipschitzWith_equiv is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], AntilipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.pseudoEmetricSpace.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), PseudoEMetricSpace.{u2} (β i)], AntilipschitzWith.{max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.instPseudoEMetricSpacePiLp.{u1, u2} p ι β _inst_1 _inst_2 (fun (b : ι) => _inst_3 b)) (pseudoEMetricSpacePi.{u1, u2} ι (fun (i : ι) => β i) _inst_1 (fun (b : ι) => _inst_3 b)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.{u1, u2} p ι β) (fun (_x : PiLp.{u1, u2} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u1, u2} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.antilipschitz_with_equiv PiLp.antilipschitzWith_equivₓ'. -/
theorem antilipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
antilipschitzWith_equiv_aux p β
#align pi_Lp.antilipschitz_with_equiv PiLp.antilipschitzWith_equiv
+#print PiLp.infty_equiv_isometry /-
theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp.equiv ∞ β) :=
fun x y =>
le_antisymm (by simpa only [ENNReal.coe_one, one_mul] using lipschitz_with_equiv ∞ β x y)
@@ -532,9 +694,16 @@ theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp
simpa only [ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero, ENNReal.coe_one,
one_mul] using antilipschitz_with_equiv ∞ β x y)
#align pi_Lp.infty_equiv_isometry PiLp.infty_equiv_isometry
+-/
variable (p β)
+/- warning: pi_Lp.seminormed_add_comm_group -> PiLp.seminormedAddCommGroup is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], SeminormedAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι β)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], SeminormedAddCommGroup.{max u2 u1} (PiLp.{u1, u2} p ι β)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroupₓ'. -/
/-- seminormed group instance on the product of finitely many normed groups, using the `L^p`
norm. -/
instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
@@ -551,11 +720,23 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
dist_eq_norm] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
+/- warning: pi_Lp.normed_add_comm_group -> PiLp.normedAddCommGroup is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : forall (i : ι), NormedAddCommGroup.{u2} (α i)], NormedAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι α)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u1}} (α : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : forall (i : ι), NormedAddCommGroup.{u2} (α i)], NormedAddCommGroup.{max u2 u1} (PiLp.{u1, u2} p ι α)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.normed_add_comm_group PiLp.normedAddCommGroupₓ'. -/
/-- normed group instance on the product of finitely many normed groups, using the `L^p` norm. -/
instance normedAddCommGroup [∀ i, NormedAddCommGroup (α i)] : NormedAddCommGroup (PiLp p α) :=
{ PiLp.seminormedAddCommGroup p α with }
#align pi_Lp.normed_add_comm_group PiLp.normedAddCommGroup
+/- warning: pi_Lp.nnnorm_eq_sum -> PiLp.nnnorm_eq_sum is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : ι -> Type.{u2}}, (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i)))) f) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal NNReal.strictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) (NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_4 i))) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (ENNReal.toReal p))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : ι -> Type.{u2}}, (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} p ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_3 (fun (i : ι) => _inst_4 i)))) f) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Finset.sum.{0, u1} NNReal ι (OrderedCancelAddCommMonoid.toAddCommMonoid.{0} NNReal (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} NNReal instNNRealStrictOrderedSemiring)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_4 i))) (f i)) (ENNReal.toReal p))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (ENNReal.toReal p))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sumₓ'. -/
theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp : p ≠ ∞)
[∀ i, SeminormedAddCommGroup (β i)] (f : PiLp p β) :
‖f‖₊ = (∑ i, ‖f i‖₊ ^ p.toReal) ^ (1 / p.toReal) :=
@@ -564,12 +745,24 @@ theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp
simp [NNReal.coe_sum, norm_eq_sum (p.to_real_pos_iff_ne_top.mpr hp)]
#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sum
-theorem nnnorm_eq_csupr {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
+/- warning: pi_Lp.nnnorm_eq_csupr -> PiLp.nnnorm_eq_ciSup is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (PiLp.seminormedAddCommGroup.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i)))) f) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toHasSup.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.conditionallyCompleteLinearOrderBot))) ι (fun (i : ι) => NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i))) (f i)))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (f : PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (PiLp.seminormedAddCommGroup.{u1, u2} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_3 i)))) f) (iSup.{0, succ u1} NNReal (ConditionallyCompleteLattice.toSupSet.{0} NNReal (ConditionallyCompleteLinearOrder.toConditionallyCompleteLattice.{0} NNReal (ConditionallyCompleteLinearOrderBot.toConditionallyCompleteLinearOrder.{0} NNReal NNReal.instConditionallyCompleteLinearOrderBotNNReal))) ι (fun (i : ι) => NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i))) (f i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSupₓ'. -/
+theorem nnnorm_eq_ciSup {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
‖f‖₊ = ⨆ i, ‖f i‖₊ := by
ext
simp [NNReal.coe_iSup, norm_eq_csupr]
-#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_csupr
-
+#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSup
+
+/- warning: pi_Lp.norm_eq_of_nat -> PiLp.norm_eq_of_nat is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (n : Nat), (Eq.{1} ENNReal p ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat ENNReal (HasLiftT.mk.{1, 1} Nat ENNReal (CoeTCₓ.coe.{1, 1} Nat ENNReal (Nat.castCoe.{0} ENNReal (AddMonoidWithOne.toNatCast.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) n)) -> (forall (f : PiLp.{u1, u2} p ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_4 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_4 i)))))))) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_4 i)) (f i)) n)) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {p : ENNReal} [_inst_3 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : ι -> Type.{u2}} [_inst_4 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (n : Nat), (Eq.{1} ENNReal p (Nat.cast.{0} ENNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) n)) -> (forall (f : PiLp.{u1, u2} p ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_4 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_4 i)))))))) f) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.instPowReal) (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_4 i)) (f i)) n)) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (Nat.cast.{0} Real Real.natCast n))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_natₓ'. -/
theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) :=
@@ -579,6 +772,12 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
+/- warning: pi_Lp.norm_eq_of_L2 -> PiLp.norm_eq_of_L2 is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i)))))))) x) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_3 i)))))))) x) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2ₓ'. -/
theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) :=
by
@@ -587,6 +786,9 @@ theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)
norm_cast
#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2
+/- warning: pi_Lp.nnnorm_eq_of_L2 -> PiLp.nnnorm_eq_of_L2 is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2ₓ'. -/
theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖₊ = NNReal.sqrt (∑ i : ι, ‖x i‖₊ ^ 2) :=
Subtype.ext <| by
@@ -594,6 +796,12 @@ theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β
exact norm_eq_of_L2 x
#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2
+/- warning: pi_Lp.norm_sq_eq_of_L2 -> PiLp.norm_sq_eq_of_L2 is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] (β : ι -> Type.{u2}) [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} Real (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_3 i)))))))) x) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))) (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] (β : ι -> Type.{u2}) [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.hasNorm.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (fun (i : ι) => NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_3 i)))))))) x) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))) (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toNorm.{u2} (β i) (_inst_3 i)) (x i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2ₓ'. -/
theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ ^ 2 = ∑ i : ι, ‖x i‖ ^ 2 :=
by
@@ -602,11 +810,20 @@ theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β
rw [nnnorm_eq_of_L2, NNReal.sq_sqrt]
#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2
+/- warning: pi_Lp.dist_eq_of_L2 -> PiLp.dist_eq_of_L2 is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasDist.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) x y) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.addCommMonoid (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Dist.dist.{u2} (β i) (PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.instDistPiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) x y) (Real.sqrt (Finset.sum.{0, u1} Real ι Real.instAddCommMonoidReal (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Dist.dist.{u2} (β i) (PseudoMetricSpace.toDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2ₓ'. -/
theorem dist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
simp_rw [dist_eq_norm, norm_eq_of_L2, Pi.sub_apply]
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
+/- warning: pi_Lp.nndist_eq_of_L2 -> PiLp.nndist_eq_of_L2 is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2ₓ'. -/
theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
nndist x y = (∑ i, nndist (x i) (y i) ^ 2).sqrt :=
Subtype.ext <| by
@@ -614,12 +831,24 @@ theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β
exact dist_eq_of_L2 _ _
#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2
+/- warning: pi_Lp.edist_eq_of_L2 -> PiLp.edist_eq_of_L2 is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β) (PiLp.hasEdist.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (OfNat.mk.{0} ENNReal 2 (bit0.{0} ENNReal (Distrib.toHasAdd.{0} ENNReal (NonUnitalNonAssocSemiring.toDistrib.{0} ENNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} ENNReal (Semiring.toNonAssocSemiring.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne)))))) ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) x y) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.Real.hasPow) (Finset.sum.{0, u1} ENNReal ι (OrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (OrderedSemiring.toOrderedAddCommMonoid.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring)))) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Nat ENNReal (instHPow.{0, 0} ENNReal Nat (Monoid.Pow.{0} ENNReal (MonoidWithZero.toMonoid.{0} ENNReal (Semiring.toMonoidWithZero.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.canonicallyOrderedCommSemiring))))))) (EDist.edist.{u2} (β i) (PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (OfNat.ofNat.{0} Real 2 (OfNat.mk.{0} Real 2 (bit0.{0} Real Real.hasAdd (One.one.{0} Real Real.hasOne))))))
+but is expected to have type
+ forall {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] {β : ι -> Type.{u2}} [_inst_3 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (y : PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β) (PiLp.instEDistPiLp.{u1, u2} (OfNat.ofNat.{0} ENNReal 2 (instOfNat.{0} ENNReal 2 (CanonicallyOrderedCommSemiring.toNatCast.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal) (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))))) ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u2} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i))))) x y) (HPow.hPow.{0, 0, 0} ENNReal Real ENNReal (instHPow.{0, 0} ENNReal Real ENNReal.instPowENNRealReal) (Finset.sum.{0, u1} ENNReal ι (LinearOrderedAddCommMonoid.toAddCommMonoid.{0} ENNReal (LinearOrderedAddCommMonoidWithTop.toLinearOrderedAddCommMonoid.{0} ENNReal ENNReal.instLinearOrderedAddCommMonoidWithTopENNReal)) (Finset.univ.{u1} ι _inst_1) (fun (i : ι) => HPow.hPow.{0, 0, 0} ENNReal Nat ENNReal (instHPow.{0, 0} ENNReal Nat (Monoid.Pow.{0} ENNReal (MonoidWithZero.toMonoid.{0} ENNReal (Semiring.toMonoidWithZero.{0} ENNReal (OrderedSemiring.toSemiring.{0} ENNReal (OrderedCommSemiring.toOrderedSemiring.{0} ENNReal (CanonicallyOrderedCommSemiring.toOrderedCommSemiring.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))))))) (EDist.edist.{u2} (β i) (PseudoEMetricSpace.toEDist.{u2} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_3 i)))) (x i) (y i)) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (OfNat.ofNat.{0} Real 2 (instOfNat.{0} Real 2 Real.natCast (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2ₓ'. -/
theorem edist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
variable [NormedField 𝕜] [NormedField 𝕜']
+/- warning: pi_Lp.normed_space -> PiLp.normedSpace is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], NormedSpace.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))
+but is expected to have type
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], NormedSpace.{u1, max u3 u2} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.normed_space PiLp.normedSpaceₓ'. -/
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
NormedSpace 𝕜 (PiLp p β) :=
@@ -637,16 +866,28 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
exact Finset.sum_nonneg fun i hi => rpow_nonneg_of_nonneg (norm_nonneg _) _ }
#align pi_Lp.normed_space PiLp.normedSpace
+/- warning: pi_Lp.is_scalar_tower -> PiLp.isScalarTower is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.is_scalar_tower PiLp.isScalarTowerₓ'. -/
instance isScalarTower [∀ i, SeminormedAddCommGroup (β i)] [SMul 𝕜 𝕜'] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, IsScalarTower 𝕜 𝕜' (β i)] : IsScalarTower 𝕜 𝕜' (PiLp p β) :=
Pi.isScalarTower
#align pi_Lp.is_scalar_tower PiLp.isScalarTower
-instance sMulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
+/- warning: pi_Lp.smul_comm_class -> PiLp.smulCommClass is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.smul_comm_class PiLp.smulCommClassₓ'. -/
+instance smulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[∀ i, NormedSpace 𝕜' (β i)] [∀ i, SMulCommClass 𝕜 𝕜' (β i)] : SMulCommClass 𝕜 𝕜' (PiLp p β) :=
Pi.smulCommClass
-#align pi_Lp.smul_comm_class PiLp.sMulCommClass
-
+#align pi_Lp.smul_comm_class PiLp.smulCommClass
+
+/- warning: pi_Lp.finite_dimensional -> PiLp.finiteDimensional is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)] [I : forall (i : ι), FiniteDimensional.{u1, u3} 𝕜 (β i) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)) (NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i))], FiniteDimensional.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)) (PiLp.normedSpace.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)))
+but is expected to have type
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)] [I : forall (i : ι), FiniteDimensional.{u1, u3} 𝕜 (β i) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)) (NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i))], FiniteDimensional.{u1, max u3 u2} 𝕜 (PiLp.{u2, u3} p ι β) (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_3)) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))) (PiLp.module.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.finite_dimensional PiLp.finiteDimensionalₓ'. -/
instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[I : ∀ i, FiniteDimensional 𝕜 (β i)] : FiniteDimensional 𝕜 (PiLp p β) :=
FiniteDimensional.finiteDimensional_pi' _ _
@@ -658,31 +899,64 @@ variable {𝕜 𝕜' p α} [∀ i, SeminormedAddCommGroup (β i)] [∀ i, Normed
variable (x y : PiLp p β) (x' y' : ∀ i, β i) (i : ι)
+/- warning: pi_Lp.zero_apply -> PiLp.zero_apply is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (i : ι), Eq.{succ u2} (β i) (Zero.zero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) i) (OfNat.ofNat.{u2} (β i) 0 (OfNat.mk.{u2} (β i) 0 (Zero.zero.{u2} (β i) (AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))))))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (i : ι), Eq.{succ u2} (β i) (OfNat.ofNat.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (Zero.toOfNat0.{max u1 u2} (PiLp.{u1, u2} p ι β) (NegZeroClass.toZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) i) (OfNat.ofNat.{u2} (β i) 0 (Zero.toOfNat0.{u2} (β i) (NegZeroClass.toZero.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_5 i)))))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.zero_apply PiLp.zero_applyₓ'. -/
@[simp]
theorem zero_apply : (0 : PiLp p β) i = 0 :=
rfl
#align pi_Lp.zero_apply PiLp.zero_apply
+/- warning: pi_Lp.add_apply -> PiLp.add_apply is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y i) (HAdd.hAdd.{u2, u2, u2} (β i) (β i) (β i) (instHAdd.{u2} (β i) (AddZeroClass.toHasAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))) (x i) (y i))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y i) (HAdd.hAdd.{u2, u2, u2} (β i) (β i) (β i) (instHAdd.{u2} (β i) (AddZeroClass.toAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))) (x i) (y i))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.add_apply PiLp.add_applyₓ'. -/
@[simp]
theorem add_apply : (x + y) i = x i + y i :=
rfl
#align pi_Lp.add_apply PiLp.add_apply
+/- warning: pi_Lp.sub_apply -> PiLp.sub_apply is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y i) (HSub.hSub.{u2, u2, u2} (β i) (β i) (β i) (instHSub.{u2} (β i) (SubNegMonoid.toHasSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) (x i) (y i))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y i) (HSub.hSub.{u2, u2, u2} (β i) (β i) (β i) (instHSub.{u2} (β i) (SubNegMonoid.toSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) (x i) (y i))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.sub_apply PiLp.sub_applyₓ'. -/
@[simp]
theorem sub_apply : (x - y) i = x i - y i :=
rfl
#align pi_Lp.sub_apply PiLp.sub_apply
+/- warning: pi_Lp.smul_apply -> PiLp.smul_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.smul_apply PiLp.smul_applyₓ'. -/
@[simp]
theorem smul_apply : (c • x) i = c • x i :=
rfl
#align pi_Lp.smul_apply PiLp.smul_apply
+/- warning: pi_Lp.neg_apply -> PiLp.neg_apply is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))) x i) (Neg.neg.{u2} (β i) (SubNegMonoid.toHasNeg.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))) (x i))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (i : ι), Eq.{succ u2} (β i) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (NegZeroClass.toNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) x i) (Neg.neg.{u2} (β i) (NegZeroClass.toNeg.{u2} (β i) (SubNegZeroMonoid.toNegZeroClass.{u2} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u2} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u2} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u2} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u2} (β i) (_inst_5 i))))))) (x i))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.neg_apply PiLp.neg_applyₓ'. -/
@[simp]
theorem neg_apply : (-x) i = -x i :=
rfl
#align pi_Lp.neg_apply PiLp.neg_apply
+/- warning: pi_Lp.equivₗᵢ -> PiLp.equivₗᵢ is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearIsometryEquiv.{u1, u1, max u2 u3, max u2 u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (PiLp.equivₗᵢ._proof_1.{u1} 𝕜 _inst_3) (PiLp.equivₗᵢ._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) (forall (i : ι), β i) (PiLp.seminormedAddCommGroup.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_5 i)) (Pi.seminormedAddCommGroup.{u2, u3} ι (fun (i : ι) => β i) _inst_1 (fun (i : ι) => _inst_5 i)) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_5 i)) (PiLp.normedSpace.{u1, u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))) 𝕜 ι β _inst_1 fact_one_le_top_ennreal _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i))) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearIsometryEquiv.{u1, u1, max u3 u2, max u2 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β) (forall (i : ι), β i) (PiLp.seminormedAddCommGroup.{u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) ι β _inst_1 fact_one_le_top_ennreal (fun (i : ι) => _inst_5 i)) (Pi.seminormedAddCommGroup.{u2, u3} ι (fun (i : ι) => β i) _inst_1 (fun (i : ι) => _inst_5 i)) (PiLp.module.{u1, u2, u3} (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))) 𝕜 ι β _inst_1 fact_one_le_top_ennreal _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equivₗᵢ PiLp.equivₗᵢₓ'. -/
/-- The canonical map `pi_Lp.equiv` between `pi_Lp ∞ β` and `Π i, β i` as a linear isometric
equivalence. -/
def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
@@ -706,6 +980,12 @@ variable [Fintype ι']
variable (p 𝕜) (E : Type _) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
+/- warning: linear_isometry_equiv.pi_Lp_congr_left -> LinearIsometryEquiv.piLpCongrLeft is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] {ι' : Type.{u3}} [_inst_7 : Fintype.{u3} ι'] (E : Type.{u4}) [_inst_8 : NormedAddCommGroup.{u4} E] [_inst_9 : NormedSpace.{u1, u4} 𝕜 E _inst_3 (NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)], (Equiv.{succ u2, succ u3} ι ι') -> (LinearIsometryEquiv.{u1, u1, max u2 u4, max u3 u4} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (LinearIsometryEquiv.piLpCongrLeft._proof_1.{u1} 𝕜 _inst_3) (LinearIsometryEquiv.piLpCongrLeft._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u4} p ι (fun (i : ι) => E)) (PiLp.{u3, u4} p ι' (fun (i : ι') => E)) (PiLp.seminormedAddCommGroup.{u2, u4} p ι (fun (i : ι) => E) _inst_1 _inst_2 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.seminormedAddCommGroup.{u3, u4} p ι' (fun (i : ι') => E) _inst_7 _inst_2 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (NormedSpace.toModule.{u1, max u2 u4} 𝕜 (PiLp.{u2, u4} p ι (fun (i : ι) => E)) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u4} p ι (fun (i : ι) => E) _inst_1 _inst_2 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.normedSpace.{u1, u2, u4} p 𝕜 ι (fun (i : ι) => E) _inst_1 _inst_2 _inst_3 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι) => _inst_9))) (NormedSpace.toModule.{u1, max u3 u4} 𝕜 (PiLp.{u3, u4} p ι' (fun (i : ι') => E)) _inst_3 (PiLp.seminormedAddCommGroup.{u3, u4} p ι' (fun (i : ι') => E) _inst_7 _inst_2 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.normedSpace.{u1, u3, u4} p 𝕜 ι' (fun (i : ι') => E) _inst_7 _inst_2 _inst_3 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι') => _inst_9))))
+but is expected to have type
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] {ι' : Type.{u3}} [_inst_7 : Fintype.{u3} ι'] (E : Type.{u4}) [_inst_8 : NormedAddCommGroup.{u4} E] [_inst_9 : NormedSpace.{u1, u4} 𝕜 E _inst_3 (NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)], (Equiv.{succ u2, succ u3} ι ι') -> (LinearIsometryEquiv.{u1, u1, max u4 u2, max u4 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u4} p ι (fun (i : ι) => E)) (PiLp.{u3, u4} p ι' (fun (i : ι') => E)) (PiLp.seminormedAddCommGroup.{u2, u4} p ι (fun (i : ι) => E) _inst_1 _inst_2 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.seminormedAddCommGroup.{u3, u4} p ι' (fun (i : ι') => E) _inst_7 _inst_2 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8)) (PiLp.module.{u1, u2, u4} p 𝕜 ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.8359 : ι) => E) _inst_1 _inst_2 _inst_3 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι) => _inst_9)) (PiLp.module.{u1, u3, u4} p 𝕜 ι' (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.8368 : ι') => E) _inst_7 _inst_2 _inst_3 (fun (i : ι') => NormedAddCommGroup.toSeminormedAddCommGroup.{u4} E _inst_8) (fun (i : ι') => _inst_9)))
+Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left LinearIsometryEquiv.piLpCongrLeftₓ'. -/
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
def LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
@@ -724,12 +1004,18 @@ def LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
variable {p 𝕜 E}
+/- warning: linear_isometry_equiv.pi_Lp_congr_left_apply -> LinearIsometryEquiv.piLpCongrLeft_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left_apply LinearIsometryEquiv.piLpCongrLeft_applyₓ'. -/
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_apply (e : ι ≃ ι') (v : PiLp p fun i : ι => E) :
LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e v = Equiv.piCongrLeft' (fun i : ι => E) e v :=
rfl
#align linear_isometry_equiv.pi_Lp_congr_left_apply LinearIsometryEquiv.piLpCongrLeft_apply
+/- warning: linear_isometry_equiv.pi_Lp_congr_left_symm -> LinearIsometryEquiv.piLpCongrLeft_symm is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left_symm LinearIsometryEquiv.piLpCongrLeft_symmₓ'. -/
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
(LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e).symm =
@@ -737,6 +1023,9 @@ theorem LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
LinearIsometryEquiv.ext fun x => rfl
#align linear_isometry_equiv.pi_Lp_congr_left_symm LinearIsometryEquiv.piLpCongrLeft_symm
+/- warning: linear_isometry_equiv.pi_Lp_congr_left_single -> LinearIsometryEquiv.piLpCongrLeft_single is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_singleₓ'. -/
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι'] (e : ι ≃ ι')
(i : ι) (v : E) :
@@ -748,53 +1037,107 @@ theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq
Function.update, Equiv.symm_apply_eq]
#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_single
+/- warning: pi_Lp.equiv_zero -> PiLp.equiv_zero is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (OfNat.ofNat.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (OfNat.mk.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (Zero.zero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))))))) (OfNat.ofNat.{max u1 u2} (forall (i : ι), β i) 0 (OfNat.mk.{max u1 u2} (forall (i : ι), β i) 0 (Zero.zero.{max u1 u2} (forall (i : ι), β i) (Pi.instZero.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))))))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)], Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) (OfNat.ofNat.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) 0 (Zero.toOfNat0.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (OfNat.ofNat.{max u2 u1} (PiLp.{u2, u1} p ι β) 0 (Zero.toOfNat0.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toZero.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_zero PiLp.equiv_zeroₓ'. -/
@[simp]
theorem equiv_zero : PiLp.equiv p β 0 = 0 :=
rfl
#align pi_Lp.equiv_zero PiLp.equiv_zero
+/- warning: pi_Lp.equiv_symm_zero -> PiLp.equiv_symm_zero is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)], Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (OfNat.ofNat.{max u1 u2} (forall (i : ι), β i) 0 (OfNat.mk.{max u1 u2} (forall (i : ι), β i) 0 (Zero.zero.{max u1 u2} (forall (i : ι), β i) (Pi.instZero.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))))))) (OfNat.ofNat.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (OfNat.mk.{max u1 u2} (PiLp.{u1, u2} p ι β) 0 (Zero.zero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasZero.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))))))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)], Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (OfNat.ofNat.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) 0 (Zero.toOfNat0.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (NegZeroClass.toZero.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (OfNat.ofNat.{max u2 u1} (forall (i : ι), β i) 0 (Zero.toOfNat0.{max u2 u1} (forall (i : ι), β i) (Pi.instZero.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))))))) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zeroₓ'. -/
@[simp]
theorem equiv_symm_zero : (PiLp.equiv p β).symm 0 = 0 :=
rfl
#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zero
+/- warning: pi_Lp.equiv_add -> PiLp.equiv_add is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y)) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u1 u2} (forall (i : ι), β i) (Pi.instAdd.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) x) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) y))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x : PiLp.{u2, u1} p ι β) (y : PiLp.{u2, u1} p ι β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddZeroClass.toAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddMonoid.toAddZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toAddMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddZeroClass.toAdd.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddMonoid.toAddZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toAddMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) x y)) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) y) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (instHAdd.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (Pi.instAdd.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toAdd.{u1} (β i) (AddMonoid.toAddZeroClass.{u1} (β i) (SubNegMonoid.toAddMonoid.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) y))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_add PiLp.equiv_addₓ'. -/
@[simp]
theorem equiv_add : PiLp.equiv p β (x + y) = PiLp.equiv p β x + PiLp.equiv p β y :=
rfl
#align pi_Lp.equiv_add PiLp.equiv_add
+/- warning: pi_Lp.equiv_symm_add -> PiLp.equiv_symm_add is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u1 u2} (forall (i : ι), β i) (Pi.instAdd.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toHasAdd.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))))) x' y')) (HAdd.hAdd.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddZeroClass.toHasAdd.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddMonoid.toAddZeroClass.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toAddMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) x') (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) y'))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u2 u1} (forall (i : ι), β i) (Pi.instAdd.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toAdd.{u1} (β i) (AddMonoid.toAddZeroClass.{u1} (β i) (SubNegMonoid.toAddMonoid.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))))) x' y')) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHAdd.{max u2 u1} (forall (i : ι), β i) (Pi.instAdd.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => AddZeroClass.toAdd.{u1} (β i) (AddMonoid.toAddZeroClass.{u1} (β i) (SubNegMonoid.toAddMonoid.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))))) x' y')) (HAdd.hAdd.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) y') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (instHAdd.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddZeroClass.toAdd.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddMonoid.toAddZeroClass.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubNegMonoid.toAddMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddGroup.toSubNegMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddGroup.toAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) x') (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) y'))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_add PiLp.equiv_symm_addₓ'. -/
@[simp]
theorem equiv_symm_add :
(PiLp.equiv p β).symm (x' + y') = (PiLp.equiv p β).symm x' + (PiLp.equiv p β).symm y' :=
rfl
#align pi_Lp.equiv_symm_add PiLp.equiv_symm_add
+/- warning: pi_Lp.equiv_sub -> PiLp.equiv_sub is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β) (y : PiLp.{u1, u2} p ι β), Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y)) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u1 u2} (forall (i : ι), β i) (Pi.instSub.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) x) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) y))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x : PiLp.{u2, u1} p ι β) (y : PiLp.{u2, u1} p ι β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (PiLp.{u2, u1} p ι β) (instHSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegMonoid.toSub.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddGroup.toSubNegMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddGroup.toAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) x y)) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) y) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (instHSub.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (Pi.instSub.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toSub.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) x) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) y))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_sub PiLp.equiv_subₓ'. -/
@[simp]
theorem equiv_sub : PiLp.equiv p β (x - y) = PiLp.equiv p β x - PiLp.equiv p β y :=
rfl
#align pi_Lp.equiv_sub PiLp.equiv_sub
+/- warning: pi_Lp.equiv_symm_sub -> PiLp.equiv_symm_sub is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u1 u2} (forall (i : ι), β i) (Pi.instSub.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasSub.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) x' y')) (HSub.hSub.{max u1 u2, max u1 u2, max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (PiLp.{u1, u2} p ι β) (instHSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasSub.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) x') (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) y'))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x' : forall (i : ι), β i) (y' : forall (i : ι), β i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u2 u1} (forall (i : ι), β i) (Pi.instSub.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toSub.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))) x' y')) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} (forall (i : ι), β i) (forall (i : ι), β i) (forall (i : ι), β i) (instHSub.{max u2 u1} (forall (i : ι), β i) (Pi.instSub.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toSub.{u1} (β i) (AddGroup.toSubNegMonoid.{u1} (β i) (SeminormedAddGroup.toAddGroup.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_5 i))))))) x' y')) (HSub.hSub.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) y') ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (instHSub.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubNegMonoid.toSub.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddGroup.toSubNegMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddGroup.toAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) x') (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) y'))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_subₓ'. -/
@[simp]
theorem equiv_symm_sub :
(PiLp.equiv p β).symm (x' - y') = (PiLp.equiv p β).symm x' - (PiLp.equiv p β).symm y' :=
rfl
#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_sub
+/- warning: pi_Lp.equiv_neg -> PiLp.equiv_neg is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x : PiLp.{u1, u2} p ι β), Eq.{max (succ u1) (succ u2)} (forall (i : ι), β i) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))) x)) (Neg.neg.{max u1 u2} (forall (i : ι), β i) (Pi.instNeg.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasNeg.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) (coeFn.{max 1 (max (succ (max u1 u2)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u1) (succ u2)} (Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (fun (_x : Equiv.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) => (PiLp.{u1, u2} p ι β) -> (forall (i : ι), β i)) (Equiv.hasCoeToFun.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u1, u2} p ι β) x))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x : PiLp.{u2, u1} p ι β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) (Neg.neg.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toNeg.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) x)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) (Neg.neg.{max u2 u1} (PiLp.{u2, u1} p ι β) (NegZeroClass.toNeg.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι β) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) x)) (Neg.neg.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) x) (Pi.instNeg.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toNeg.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.{u2, u1} p ι β) (fun (_x : PiLp.{u2, u1} p ι β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : PiLp.{u2, u1} p ι β) => forall (i : ι), β i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i)) (PiLp.equiv.{u2, u1} p ι β) x))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_neg PiLp.equiv_negₓ'. -/
@[simp]
theorem equiv_neg : PiLp.equiv p β (-x) = -PiLp.equiv p β x :=
rfl
#align pi_Lp.equiv_neg PiLp.equiv_neg
+/- warning: pi_Lp.equiv_symm_neg -> PiLp.equiv_symm_neg is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] (x' : forall (i : ι), β i), Eq.{succ (max u1 u2)} (PiLp.{u1, u2} p ι β) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Neg.neg.{max u1 u2} (forall (i : ι), β i) (Pi.instNeg.{u1, u2} ι (fun (i : ι) => β i) (fun (i : ι) => SubNegMonoid.toHasNeg.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))) x')) (Neg.neg.{max u1 u2} (PiLp.{u1, u2} p ι β) (SubNegMonoid.toHasNeg.{max u1 u2} (PiLp.{u1, u2} p ι β) (AddGroup.toSubNegMonoid.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) x'))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] (x' : forall (i : ι), β i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Neg.neg.{max u2 u1} (forall (i : ι), β i) (Pi.instNeg.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toNeg.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) x')) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Neg.neg.{max u2 u1} (forall (i : ι), β i) (Pi.instNeg.{u2, u1} ι (fun (i : ι) => β i) (fun (i : ι) => NegZeroClass.toNeg.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) x')) (Neg.neg.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (NegZeroClass.toNeg.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubNegZeroMonoid.toNegZeroClass.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubtractionMonoid.toSubNegZeroMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SubtractionCommMonoid.toSubtractionMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (AddCommGroup.toDivisionAddCommMonoid.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) x') (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) x'))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_negₓ'. -/
@[simp]
theorem equiv_symm_neg : (PiLp.equiv p β).symm (-x') = -(PiLp.equiv p β).symm x' :=
rfl
#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_neg
+/- warning: pi_Lp.equiv_smul -> PiLp.equiv_smul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_smul PiLp.equiv_smulₓ'. -/
@[simp]
theorem equiv_smul : PiLp.equiv p β (c • x) = c • PiLp.equiv p β x :=
rfl
#align pi_Lp.equiv_smul PiLp.equiv_smul
+/- warning: pi_Lp.equiv_symm_smul -> PiLp.equiv_symm_smul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.equiv_symm_smul PiLp.equiv_symm_smulₓ'. -/
@[simp]
theorem equiv_symm_smul : (PiLp.equiv p β).symm (c • x') = c • (PiLp.equiv p β).symm x' :=
rfl
@@ -806,6 +1149,12 @@ variable (p)
variable [DecidableEq ι]
+/- warning: pi_Lp.nnnorm_equiv_symm_single -> PiLp.nnnorm_equiv_symm_single is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b : β i), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι β) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.seminormedAddCommGroup.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b))) (NNNorm.nnnorm.{u2} (β i) (SeminormedAddGroup.toNNNorm.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))) b)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_5 : DecidableEq.{succ u2} ι] [_inst_10 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] (i : ι) (b : β i), Eq.{1} NNReal (NNNorm.nnnorm.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b)) (SeminormedAddGroup.toNNNorm.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b)) (PiLp.seminormedAddCommGroup.{u2, u1} p ι β _inst_1 _inst_10 (fun (i : ι) => _inst_2 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_5 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_2 i))))))) i b))) (NNNorm.nnnorm.{u1} (β i) (SeminormedAddGroup.toNNNorm.{u1} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} (β i) (_inst_2 i))) b)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_singleₓ'. -/
@[simp]
theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
‖(PiLp.equiv p β).symm (Pi.single i b)‖₊ = ‖b‖₊ :=
@@ -828,11 +1177,23 @@ theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
rw [equiv_symm_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_single
+/- warning: pi_Lp.norm_equiv_symm_single -> PiLp.norm_equiv_symm_single is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b : β i), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasNorm.{u1, u2} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_5 i)) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i)))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b))) (Norm.norm.{u2} (β i) (SeminormedAddCommGroup.toHasNorm.{u2} (β i) (_inst_5 i)) b)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b : β i), Eq.{1} Real (Norm.norm.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b)) (PiLp.hasNorm.{u2, u1} p ι β _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u1} (β i) (_inst_5 i)) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i)))))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b))) (Norm.norm.{u1} (β i) (SeminormedAddCommGroup.toNorm.{u1} (β i) (_inst_5 i)) b)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_singleₓ'. -/
@[simp]
theorem norm_equiv_symm_single (i : ι) (b : β i) : ‖(PiLp.equiv p β).symm (Pi.single i b)‖ = ‖b‖ :=
congr_arg coe <| nnnorm_equiv_symm_single p β i b
#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_single
+/- warning: pi_Lp.nndist_equiv_symm_single_same -> PiLp.nndist_equiv_symm_single_same is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} NNReal (NNDist.nndist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PseudoMetricSpace.toNNDist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.pseudoMetricSpace.{u1, u2} p ι β _inst_1 _inst_2 (fun (i : ι) => SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₁)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₂))) (NNDist.nndist.{u2} (β i) (PseudoMetricSpace.toNNDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i))) b₁ b₂)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} NNReal (NNDist.nndist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PseudoMetricSpace.toNNDist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PiLp.instPseudoMetricSpacePiLp.{u2, u1} p ι β _inst_1 _inst_2 (fun (i : ι) => SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₂))) (NNDist.nndist.{u1} (β i) (PseudoMetricSpace.toNNDist.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i))) b₁ b₂)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_sameₓ'. -/
@[simp]
theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
nndist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -842,6 +1203,12 @@ theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
nnnorm_equiv_symm_single]
#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_same
+/- warning: pi_Lp.dist_equiv_symm_single_same -> PiLp.dist_equiv_symm_single_same is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} Real (Dist.dist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasDist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₁)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₂))) (Dist.dist.{u2} (β i) (PseudoMetricSpace.toHasDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i))) b₁ b₂)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} Real (Dist.dist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PiLp.instDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toDist.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₂))) (Dist.dist.{u1} (β i) (PseudoMetricSpace.toDist.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i))) b₁ b₂)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_sameₓ'. -/
@[simp]
theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
dist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -849,6 +1216,12 @@ theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
congr_arg coe <| nndist_equiv_symm_single_same p β i b₁ b₂
#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_same
+/- warning: pi_Lp.edist_equiv_symm_single_same -> PiLp.edist_equiv_symm_single_same is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) {ι : Type.{u1}} (β : ι -> Type.{u2}) [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u2} (β i)] [_inst_10 : DecidableEq.{succ u1} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} ENNReal (EDist.edist.{max u1 u2} (PiLp.{u1, u2} p ι β) (PiLp.hasEdist.{u1, u2} p ι β _inst_1 (fun (i : ι) => PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₁)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) => (forall (i : ι), β i) -> (PiLp.{u1, u2} p ι β)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), β i) (PiLp.{u1, u2} p ι β)) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u1, u2} p ι β)) (Pi.single.{u1, u2} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => AddZeroClass.toHasZero.{u2} (β i) (AddMonoid.toAddZeroClass.{u2} (β i) (SubNegMonoid.toAddMonoid.{u2} (β i) (AddGroup.toSubNegMonoid.{u2} (β i) (SeminormedAddGroup.toAddGroup.{u2} (β i) (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} (β i) (_inst_5 i))))))) i b₂))) (EDist.edist.{u2} (β i) (PseudoMetricSpace.toEDist.{u2} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} (β i) (_inst_5 i))) b₁ b₂)
+but is expected to have type
+ forall (p : ENNReal) {ι : Type.{u2}} (β : ι -> Type.{u1}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u1} (β i)] [_inst_10 : DecidableEq.{succ u2} ι] (i : ι) (b₁ : β i) (b₂ : β i), Eq.{1} ENNReal (EDist.edist.{max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (PiLp.instEDistPiLp.{u2, u1} p ι β _inst_1 (fun (i : ι) => PseudoEMetricSpace.toEDist.{u1} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i))))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₁)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (forall (i : ι), β i) (fun (_x : forall (i : ι), β i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), β i) => PiLp.{u2, u1} p ι β) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (forall (i : ι), β i) (PiLp.{u2, u1} p ι β)) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (PiLp.{u2, u1} p ι β) (forall (i : ι), β i) (PiLp.equiv.{u2, u1} p ι β)) (Pi.single.{u2, u1} ι (fun (i : ι) => β i) (fun (a : ι) (b : ι) => _inst_10 a b) (fun (i : ι) => NegZeroClass.toZero.{u1} (β i) (SubNegZeroMonoid.toNegZeroClass.{u1} (β i) (SubtractionMonoid.toSubNegZeroMonoid.{u1} (β i) (SubtractionCommMonoid.toSubtractionMonoid.{u1} (β i) (AddCommGroup.toDivisionAddCommMonoid.{u1} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u1} (β i) (_inst_5 i))))))) i b₂))) (EDist.edist.{u1} (β i) (PseudoEMetricSpace.toEDist.{u1} (β i) (PseudoMetricSpace.toPseudoEMetricSpace.{u1} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} (β i) (_inst_5 i)))) b₁ b₂)
+Case conversion may be inaccurate. Consider using '#align pi_Lp.edist_equiv_symm_single_same PiLp.edist_equiv_symm_single_sameₓ'. -/
@[simp]
theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
edist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
@@ -858,6 +1231,12 @@ theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
end Single
+/- warning: pi_Lp.nnnorm_equiv_symm_const -> PiLp.nnnorm_equiv_symm_const is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b)))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddGroup.toNNNorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11210 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_constₓ'. -/
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
@@ -874,6 +1253,12 @@ theorem nnnorm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞
NNReal.rpow_one, ENNReal.toReal_div, ENNReal.one_toReal]
#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_const
+/- warning: pi_Lp.nnnorm_equiv_symm_const' -> PiLp.nnnorm_equiv_symm_const' is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddGroup.toNNNorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11402 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) b))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'ₓ'. -/
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const` for a version which exchanges the hypothesis `nonempty ι`.
@@ -889,6 +1274,12 @@ theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι]
· exact nnnorm_equiv_symm_const hp b
#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'
+/- warning: pi_Lp.norm_equiv_symm_const -> PiLp.norm_equiv_symm_const is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (fun (i : ι) => AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β (SeminormedAddGroup.toAddGroup.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) b)))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11575 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (fun (i : ι) => NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β (SeminormedAddCommGroup.toAddCommGroup.{u2} β _inst_10))))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11575 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11575 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toNorm.{u2} β _inst_10) b)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_const PiLp.norm_equiv_symm_constₓ'. -/
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.norm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
@@ -899,6 +1290,12 @@ theorem norm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞)
(congr_arg coe <| nnnorm_equiv_symm_const hp b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const PiLp.norm_equiv_symm_const
+/- warning: pi_Lp.norm_equiv_symm_const' -> PiLp.norm_equiv_symm_const' is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (fun (i : ι) => AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β (SeminormedAddGroup.toAddGroup.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) b))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β] [_inst_11 : Nonempty.{succ u1} ι] (b : β), Eq.{1} Real (Norm.norm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11733 : ι) => β)) (Function.const.{succ u2, succ u1} β ι b)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (fun (i : ι) => NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β (SeminormedAddCommGroup.toAddCommGroup.{u2} β _inst_10))))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11733 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11733 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (Function.const.{succ u2, succ u1} β ι b))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toNorm.{u2} β _inst_10) b))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_const' PiLp.norm_equiv_symm_const'ₓ'. -/
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.norm_equiv_symm_const` for a version which exchanges the hypothesis `nonempty ι`.
@@ -909,11 +1306,23 @@ theorem norm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι] (b
(congr_arg coe <| nnnorm_equiv_symm_const' b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const' PiLp.norm_equiv_symm_const'
+/- warning: pi_Lp.nnnorm_equiv_symm_one -> PiLp.nnnorm_equiv_symm_one is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddGroup.toNNNorm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (OfNat.mk.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (One.one.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) (Pi.instOne.{u1, u2} ι (fun (i : ι) => (fun (_x : ι) => β) i) (fun (i : ι) => _inst_11))))))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (Distrib.toHasMul.{0} NNReal (NonUnitalNonAssocSemiring.toDistrib.{0} NNReal (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat NNReal (HasLiftT.mk.{1, 1} Nat NNReal (CoeTCₓ.coe.{1, 1} Nat NNReal (Nat.castCoe.{0} NNReal (AddMonoidWithOne.toNatCast.{0} NNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} NNReal (NonAssocSemiring.toAddCommMonoidWithOne.{0} NNReal (Semiring.toNonAssocSemiring.{0} NNReal NNReal.semiring))))))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β _inst_11))))))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} NNReal (NNNorm.nnnorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (SeminormedAddGroup.toNNNorm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (SeminormedAddCommGroup.toSeminormedAddGroup.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (PiLp.seminormedAddCommGroup.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 _inst_2 (fun (i : ι) => _inst_10)))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.11901 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11)))))) (HMul.hMul.{0, 0, 0} NNReal NNReal NNReal (instHMul.{0} NNReal (CanonicallyOrderedCommSemiring.toMul.{0} NNReal instNNRealCanonicallyOrderedCommSemiring)) (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p))) (NNNorm.nnnorm.{u2} β (SeminormedAddGroup.toNNNorm.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10)) (OfNat.ofNat.{u2} β 1 (One.toOfNat1.{u2} β _inst_11)))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.nnnorm_equiv_symm_one PiLp.nnnorm_equiv_symm_oneₓ'. -/
theorem nnnorm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
‖(PiLp.equiv p fun _ : ι => β).symm 1‖₊ = Fintype.card ι ^ (1 / p).toReal * ‖(1 : β)‖₊ :=
(nnnorm_equiv_symm_const hp (1 : β)).trans rfl
#align pi_Lp.nnnorm_equiv_symm_one PiLp.nnnorm_equiv_symm_one
+/- warning: pi_Lp.norm_equiv_symm_one -> PiLp.norm_equiv_symm_one is a dubious translation:
+lean 3 declaration is
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toHasTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} Real (Norm.norm.{max u1 u2} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (fun (i : ι) => AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β (SeminormedAddGroup.toAddGroup.{u2} β (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} β _inst_10))))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (fun (_x : Equiv.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) => (forall (i : ι), (fun (_x : ι) => β) i) -> (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), succ (max u1 u2)} (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{succ (max u1 u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (forall (i : ι), (fun (_x : ι) => β) i) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (OfNat.mk.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) 1 (One.one.{max u1 u2} (forall (i : ι), (fun (_x : ι) => β) i) (Pi.instOne.{u1, u2} ι (fun (i : ι) => (fun (_x : ι) => β) i) (fun (i : ι) => _inst_11))))))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (HPow.hPow.{0, 0, 0} Real Real Real (instHPow.{0, 0} Real Real Real.hasPow) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toHasDiv.{0} ENNReal ENNReal.divInvMonoid)) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toHasNorm.{u2} β _inst_10) (OfNat.ofNat.{u2} β 1 (OfNat.mk.{u2} β 1 (One.one.{u2} β _inst_11))))))
+but is expected to have type
+ forall {p : ENNReal} {ι : Type.{u1}} [_inst_1 : Fintype.{u1} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] {β : Type.{u2}} [_inst_10 : SeminormedAddCommGroup.{u2} β], (Ne.{1} ENNReal p (Top.top.{0} ENNReal (CompleteLattice.toTop.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal)))) -> (forall [_inst_11 : One.{u2} β], Eq.{1} Real (Norm.norm.{max u1 u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12054 : ι) => β)) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11))))) (PiLp.hasNorm.{u1, u2} p ι (fun (_x : ι) => β) _inst_1 (fun (i : ι) => SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (fun (i : ι) => NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β (SeminormedAddCommGroup.toAddCommGroup.{u2} β _inst_10))))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12054 : ι) => β))) (ι -> β) (fun (_x : ι -> β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> β) => PiLp.{u1, u2} p ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12054 : ι) => β)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> β) (PiLp.{u1, u2} p ι (fun (_x : ι) => β))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (PiLp.{u1, u2} p ι (fun (_x : ι) => β)) (ι -> β) (PiLp.equiv.{u1, u2} p ι (fun (_x : ι) => β))) (OfNat.ofNat.{max u1 u2} (ι -> β) 1 (One.toOfNat1.{max u1 u2} (ι -> β) (Pi.instOne.{u1, u2} ι (fun (i : ι) => β) (fun (i : ι) => _inst_11)))))) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (NNReal.toReal (HPow.hPow.{0, 0, 0} NNReal Real NNReal (instHPow.{0, 0} NNReal Real NNReal.instPowNNRealReal) (Nat.cast.{0} NNReal (CanonicallyOrderedCommSemiring.toNatCast.{0} NNReal instNNRealCanonicallyOrderedCommSemiring) (Fintype.card.{u1} ι _inst_1)) (ENNReal.toReal (HDiv.hDiv.{0, 0, 0} ENNReal ENNReal ENNReal (instHDiv.{0} ENNReal (DivInvMonoid.toDiv.{0} ENNReal ENNReal.instDivInvMonoidENNReal)) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)))) (Norm.norm.{u2} β (SeminormedAddCommGroup.toNorm.{u2} β _inst_10) (OfNat.ofNat.{u2} β 1 (One.toOfNat1.{u2} β _inst_11)))))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.norm_equiv_symm_one PiLp.norm_equiv_symm_oneₓ'. -/
theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
‖(PiLp.equiv p fun _ : ι => β).symm 1‖ = Fintype.card ι ^ (1 / p).toReal * ‖(1 : β)‖ :=
(norm_equiv_symm_const hp (1 : β)).trans rfl
@@ -921,6 +1330,12 @@ theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [O
variable (𝕜 p)
+/- warning: pi_Lp.linear_equiv -> PiLp.linearEquiv is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearEquiv.{u1, u1, max u2 u3, max u2 u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (PiLp.linearEquiv._proof_1.{u1} 𝕜 _inst_3) (PiLp.linearEquiv._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u3} p ι β) (forall (i : ι), β i) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)) (PiLp.normedSpace.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i))) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
+but is expected to have type
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], LinearEquiv.{u1, u1, max u3 u2, max u2 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u3} p ι β) (forall (i : ι), β i) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (PiLp.module.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.linear_equiv PiLp.linearEquivₓ'. -/
/-- `pi_Lp.equiv` as a linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
@@ -929,6 +1344,12 @@ protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
invFun := (PiLp.equiv _ _).symm }
#align pi_Lp.linear_equiv PiLp.linearEquiv
+/- warning: pi_Lp.continuous_linear_equiv -> PiLp.continuousLinearEquiv is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], ContinuousLinearEquiv.{u1, u1, max u2 u3, max u2 u3} 𝕜 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))))) (PiLp.continuousLinearEquiv._proof_1.{u1} 𝕜 _inst_3) (PiLp.continuousLinearEquiv._proof_2.{u1} 𝕜 _inst_3) (PiLp.{u2, u3} p ι β) (UniformSpace.toTopologicalSpace.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.uniformSpace.{u2, u3} p ι β (fun (i : ι) => PseudoMetricSpace.toUniformSpace.{u3} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β i) (_inst_5 i))))) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (forall (i : ι), β i) (Pi.topologicalSpace.{u2, u3} ι (fun (i : ι) => β i) (fun (a : ι) => UniformSpace.toTopologicalSpace.{u3} (β a) (PseudoMetricSpace.toUniformSpace.{u3} (β a) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β a) (_inst_5 a))))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (NormedSpace.toModule.{u1, max u2 u3} 𝕜 (PiLp.{u2, u3} p ι β) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (a : ι) => _inst_5 a)) (PiLp.normedSpace.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (a : ι) => _inst_5 a) (fun (i : ι) => _inst_6 i))) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
+but is expected to have type
+ forall (p : ENNReal) (𝕜 : Type.{u1}) {ι : Type.{u2}} (β : ι -> Type.{u3}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜] [_inst_5 : forall (i : ι), SeminormedAddCommGroup.{u3} (β i)] [_inst_6 : forall (i : ι), NormedSpace.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i)], ContinuousLinearEquiv.{u1, u1, max u3 u2, max u2 u3} 𝕜 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHom.id.{u1} 𝕜 (Semiring.toNonAssocSemiring.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (RingHomInvPair.ids.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3))))) (PiLp.{u2, u3} p ι β) (UniformSpace.toTopologicalSpace.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.uniformSpace.{u2, u3} p ι β (fun (i : ι) => PseudoMetricSpace.toUniformSpace.{u3} (β i) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β i) (_inst_5 i))))) (AddCommGroup.toAddCommMonoid.{max u2 u3} (PiLp.{u2, u3} p ι β) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u3} (PiLp.{u2, u3} p ι β) (PiLp.seminormedAddCommGroup.{u2, u3} p ι β _inst_1 _inst_2 (fun (i : ι) => _inst_5 i)))) (forall (i : ι), β i) (Pi.topologicalSpace.{u2, u3} ι (fun (i : ι) => β i) (fun (a : ι) => UniformSpace.toTopologicalSpace.{u3} (β a) (PseudoMetricSpace.toUniformSpace.{u3} (β a) (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} (β a) (_inst_5 a))))) (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => β i) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i)))) (PiLp.module.{u1, u2, u3} p 𝕜 ι β _inst_1 _inst_2 _inst_3 (fun (i : ι) => _inst_5 i) (fun (i : ι) => _inst_6 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => β i) 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u3} (β i) (SeminormedAddCommGroup.toAddCommGroup.{u3} (β i) (_inst_5 i))) (fun (i : ι) => NormedSpace.toModule.{u1, u3} 𝕜 (β i) _inst_3 (_inst_5 i) (_inst_6 i)))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquivₓ'. -/
/-- `pi_Lp.equiv` as a continuous linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i
@@ -942,32 +1363,53 @@ section Basis
variable (ι)
+/- warning: pi_Lp.basis_fun -> PiLp.basisFun is a dubious translation:
+lean 3 declaration is
+ forall (p : ENNReal) (𝕜 : Type.{u1}) (ι : Type.{u2}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toHasLe.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (CompleteSemilatticeInf.toPartialOrder.{0} ENNReal (CompleteLattice.toCompleteSemilatticeInf.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.completeLinearOrder))))) (OfNat.ofNat.{0} ENNReal 1 (OfNat.mk.{0} ENNReal 1 (One.one.{0} ENNReal (AddMonoidWithOne.toOne.{0} ENNReal (AddCommMonoidWithOne.toAddMonoidWithOne.{0} ENNReal ENNReal.addCommMonoidWithOne))))) p)] [_inst_3 : NormedField.{u1} 𝕜], Basis.{u2, u1, max u2 u1} ι 𝕜 (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (Ring.toSemiring.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) (AddCommGroup.toAddCommMonoid.{max u2 u1} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (SeminormedAddCommGroup.toAddCommGroup.{max u2 u1} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (PiLp.seminormedAddCommGroup.{u2, u1} p ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 (fun (i : ι) => (fun (i : ι) => NonUnitalSeminormedRing.toSeminormedAddCommGroup.{u1} ((fun (_x : ι) => 𝕜) i) (NonUnitalNormedRing.toNonUnitalSeminormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedRing.toNonUnitalNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedCommRing.toNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedField.toNormedCommRing.{u1} ((fun (_x : ι) => 𝕜) i) _inst_3))))) i)))) (NormedSpace.toModule.{u1, max u2 u1} 𝕜 (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) _inst_3 (PiLp.seminormedAddCommGroup.{u2, u1} p ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 (fun (i : ι) => (fun (i : ι) => NonUnitalSeminormedRing.toSeminormedAddCommGroup.{u1} ((fun (_x : ι) => 𝕜) i) (NonUnitalNormedRing.toNonUnitalSeminormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedRing.toNonUnitalNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedCommRing.toNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedField.toNormedCommRing.{u1} ((fun (_x : ι) => 𝕜) i) _inst_3))))) i)) (PiLp.normedSpace.{u1, u2, u1} p 𝕜 ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 _inst_3 (fun (i : ι) => (fun (i : ι) => NonUnitalSeminormedRing.toSeminormedAddCommGroup.{u1} ((fun (_x : ι) => 𝕜) i) (NonUnitalNormedRing.toNonUnitalSeminormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedRing.toNonUnitalNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedCommRing.toNormedRing.{u1} ((fun (_x : ι) => 𝕜) i) (NormedField.toNormedCommRing.{u1} ((fun (_x : ι) => 𝕜) i) _inst_3))))) i) (fun (i : ι) => (fun (i : ι) => NormedField.toNormedSpace.{u1} 𝕜 _inst_3) i)))
+but is expected to have type
+ forall (p : ENNReal) (𝕜 : Type.{u1}) (ι : Type.{u2}) [_inst_1 : Fintype.{u2} ι] [_inst_2 : Fact (LE.le.{0} ENNReal (Preorder.toLE.{0} ENNReal (PartialOrder.toPreorder.{0} ENNReal (OmegaCompletePartialOrder.toPartialOrder.{0} ENNReal (CompleteLattice.instOmegaCompletePartialOrder.{0} ENNReal (CompleteLinearOrder.toCompleteLattice.{0} ENNReal ENNReal.instCompleteLinearOrderENNReal))))) (OfNat.ofNat.{0} ENNReal 1 (One.toOfNat1.{0} ENNReal (CanonicallyOrderedCommSemiring.toOne.{0} ENNReal ENNReal.instCanonicallyOrderedCommSemiringENNReal))) p)] [_inst_3 : NormedField.{u1} 𝕜], Basis.{u2, u1, max u1 u2} ι 𝕜 (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_3)))) (AddCommGroup.toAddCommMonoid.{max u1 u2} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (NormedAddCommGroup.toAddCommGroup.{max u1 u2} (PiLp.{u2, u1} p ι (fun (_x : ι) => 𝕜)) (PiLp.normedAddCommGroup.{u2, u1} p ι (fun (_x : ι) => 𝕜) _inst_1 _inst_2 (fun (i : ι) => NonUnitalNormedRing.toNormedAddCommGroup.{u1} 𝕜 (NormedRing.toNonUnitalNormedRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3))))))) (PiLp.module.{u1, u2, u1} p 𝕜 ι (fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12725 : ι) => 𝕜) _inst_1 _inst_2 _inst_3 (fun (i : ι) => NormedAddCommGroup.toSeminormedAddCommGroup.{u1} ((fun (x._@.Mathlib.Analysis.NormedSpace.PiLp._hyg.12725 : ι) => 𝕜) i) ((fun (i : ι) => NonUnitalNormedRing.toNormedAddCommGroup.{u1} 𝕜 (NormedRing.toNonUnitalNormedRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_3)))) i)) (fun (i : ι) => NormedField.toNormedSpace.{u1} 𝕜 _inst_3))
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun PiLp.basisFunₓ'. -/
/-- A version of `pi.basis_fun` for `pi_Lp`. -/
def basisFun : Basis ι 𝕜 (PiLp p fun _ => 𝕜) :=
Basis.ofEquivFun (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜)
#align pi_Lp.basis_fun PiLp.basisFun
+/- warning: pi_Lp.basis_fun_apply -> PiLp.basisFun_apply is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_apply PiLp.basisFun_applyₓ'. -/
@[simp]
theorem basisFun_apply [DecidableEq ι] (i) :
basisFun p 𝕜 ι i = (PiLp.equiv p _).symm (Pi.single i 1) := by
simp_rw [basis_fun, Basis.coe_ofEquivFun, PiLp.linearEquiv_symm_apply, Pi.single]
#align pi_Lp.basis_fun_apply PiLp.basisFun_apply
+/- warning: pi_Lp.basis_fun_repr -> PiLp.basisFun_repr is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_repr PiLp.basisFun_reprₓ'. -/
@[simp]
theorem basisFun_repr (x : PiLp p fun i : ι => 𝕜) (i : ι) : (basisFun p 𝕜 ι).repr x i = x i :=
rfl
#align pi_Lp.basis_fun_repr PiLp.basisFun_repr
+/- warning: pi_Lp.basis_fun_equiv_fun -> PiLp.basisFun_equivFun is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFunₓ'. -/
@[simp]
theorem basisFun_equivFun : (basisFun p 𝕜 ι).equivFun = PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜 :=
Basis.equivFun_ofEquivFun _
#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFun
+/- warning: pi_Lp.basis_fun_eq_pi_basis_fun -> PiLp.basisFun_eq_pi_basisFun is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_eq_pi_basis_fun PiLp.basisFun_eq_pi_basisFunₓ'. -/
theorem basisFun_eq_pi_basisFun :
basisFun p 𝕜 ι = (Pi.basisFun 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜).symm :=
rfl
#align pi_Lp.basis_fun_eq_pi_basis_fun PiLp.basisFun_eq_pi_basisFun
+/- warning: pi_Lp.basis_fun_map -> PiLp.basisFun_map is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_fun_map PiLp.basisFun_mapₓ'. -/
@[simp]
theorem basisFun_map :
(basisFun p 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜) = Pi.basisFun 𝕜 ι :=
@@ -976,6 +1418,9 @@ theorem basisFun_map :
open Matrix
+/- warning: pi_Lp.basis_to_matrix_basis_fun_mul -> PiLp.basis_toMatrix_basisFun_mul is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mulₓ'. -/
theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun i : ι => 𝕜)) (A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) ⬝ A =
Matrix.of fun i j => b.repr ((PiLp.equiv _ _).symm (Aᵀ j)) i :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
+! leanprover-community/mathlib commit 13bce9a6b6c44f6b4c91ac1c1d2a816e2533d395
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -958,6 +958,11 @@ theorem basisFun_repr (x : PiLp p fun i : ι => 𝕜) (i : ι) : (basisFun p
rfl
#align pi_Lp.basis_fun_repr PiLp.basisFun_repr
+@[simp]
+theorem basisFun_equivFun : (basisFun p 𝕜 ι).equivFun = PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜 :=
+ Basis.equivFun_ofEquivFun _
+#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFun
+
theorem basisFun_eq_pi_basisFun :
basisFun p 𝕜 ι = (Pi.basisFun 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜).symm :=
rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -4,12 +4,13 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 8ff51ea9f2f5875755582577883fc99db1cfab88
+! leanprover-community/mathlib commit 8f9fea08977f7e450770933ee6abb20733b47c92
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.MeanInequalities
import Mathbin.Data.Fintype.Order
+import Mathbin.LinearAlgebra.Matrix.Basis
/-!
# `L^p` distance on finite products of metric spaces
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit e9f2a838ee9090764d63f65168bb11d6ac732145
+! leanprover-community/mathlib commit 8ff51ea9f2f5875755582577883fc99db1cfab88
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -739,7 +739,8 @@ theorem LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
@[simp]
theorem LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι'] (e : ι ≃ ι')
(i : ι) (v : E) :
- LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e (Pi.single i v) = Pi.single (e i) v :=
+ LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e ((PiLp.equiv p fun _ => E).symm <| Pi.single i v) =
+ (PiLp.equiv p fun _ => E).symm (Pi.single (e i) v) :=
by
funext x
simp [LinearIsometryEquiv.piLpCongrLeft, LinearEquiv.piCongrLeft', Equiv.piCongrLeft', Pi.single,
@@ -798,6 +799,64 @@ theorem equiv_symm_smul : (PiLp.equiv p β).symm (c • x') = c • (PiLp.equiv
rfl
#align pi_Lp.equiv_symm_smul PiLp.equiv_symm_smul
+section Single
+
+variable (p)
+
+variable [DecidableEq ι]
+
+@[simp]
+theorem nnnorm_equiv_symm_single (i : ι) (b : β i) :
+ ‖(PiLp.equiv p β).symm (Pi.single i b)‖₊ = ‖b‖₊ :=
+ by
+ haveI : Nonempty ι := ⟨i⟩
+ induction p using WithTop.recTopCoe
+ · simp_rw [nnnorm_eq_csupr, equiv_symm_apply]
+ refine' ciSup_eq_of_forall_le_of_forall_lt_exists_gt (fun j => _) fun n hn => ⟨i, hn.trans_eq _⟩
+ · obtain rfl | hij := Decidable.eq_or_ne i j
+ · rw [Pi.single_eq_same]
+ · rw [Pi.single_eq_of_ne' hij, nnnorm_zero]
+ exact zero_le _
+ · rw [Pi.single_eq_same]
+ · have hp0 : (p : ℝ) ≠ 0 := by
+ exact_mod_cast (zero_lt_one.trans_le <| Fact.out (1 ≤ (p : ℝ≥0∞))).ne'
+ rw [nnnorm_eq_sum ENNReal.coe_ne_top, ENNReal.coe_toReal, Fintype.sum_eq_single i,
+ equiv_symm_apply, Pi.single_eq_same, ← NNReal.rpow_mul, one_div, mul_inv_cancel hp0,
+ NNReal.rpow_one]
+ intro j hij
+ rw [equiv_symm_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
+#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_single
+
+@[simp]
+theorem norm_equiv_symm_single (i : ι) (b : β i) : ‖(PiLp.equiv p β).symm (Pi.single i b)‖ = ‖b‖ :=
+ congr_arg coe <| nnnorm_equiv_symm_single p β i b
+#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_single
+
+@[simp]
+theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
+ nndist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
+ nndist b₁ b₂ :=
+ by
+ rw [nndist_eq_nnnorm, nndist_eq_nnnorm, ← equiv_symm_sub, ← Pi.single_sub,
+ nnnorm_equiv_symm_single]
+#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_same
+
+@[simp]
+theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
+ dist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
+ dist b₁ b₂ :=
+ congr_arg coe <| nndist_equiv_symm_single_same p β i b₁ b₂
+#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_same
+
+@[simp]
+theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
+ edist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
+ edist b₁ b₂ :=
+ by simpa only [edist_nndist] using congr_arg coe (nndist_equiv_symm_single_same p β i b₁ b₂)
+#align pi_Lp.edist_equiv_symm_single_same PiLp.edist_equiv_symm_single_same
+
+end Single
+
/-- When `p = ∞`, this lemma does not hold without the additional assumption `nonempty ι` because
the left-hand side simplifies to `0`, while the right-hand side simplifies to `‖b‖₊`. See
`pi_Lp.nnnorm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 2fd0de23fbbf0f8a84dbb7bc2e7a2da45de67f8b
+! leanprover-community/mathlib commit e9f2a838ee9090764d63f65168bb11d6ac732145
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -861,7 +861,7 @@ theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [O
variable (𝕜 p)
-/-- `pi_Lp.equiv` as a linear map. -/
+/-- `pi_Lp.equiv` as a linear equivalence. -/
@[simps (config := { fullyApplied := false })]
protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
{ LinearEquiv.refl _ _ with
@@ -869,6 +869,15 @@ protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
invFun := (PiLp.equiv _ _).symm }
#align pi_Lp.linear_equiv PiLp.linearEquiv
+/-- `pi_Lp.equiv` as a continuous linear equivalence. -/
+@[simps (config := { fullyApplied := false })]
+protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i
+ where
+ toLinearEquiv := PiLp.linearEquiv _ _ _
+ continuous_toFun := continuous_equiv _ _
+ continuous_invFun := continuous_equiv_symm _ _
+#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquiv
+
section Basis
variable (ι)
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -148,11 +148,11 @@ theorem edist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p β) :
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.edist_eq_sum PiLp.edist_eq_sum
-theorem edist_eq_supᵢ (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) :=
+theorem edist_eq_iSup (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) :=
by
dsimp [edist]
exact if_neg ENNReal.top_ne_zero
-#align pi_Lp.edist_eq_supr PiLp.edist_eq_supᵢ
+#align pi_Lp.edist_eq_supr PiLp.edist_eq_iSup
end Edist
@@ -292,9 +292,9 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β)
rcases p.dichotomy with (rfl | hp)
· simp only [edist_eq_supr]
cases isEmpty_or_nonempty ι
- · simp only [csupᵢ_of_empty, ENNReal.bot_eq_zero, add_zero, nonpos_iff_eq_zero]
+ · simp only [ciSup_of_empty, ENNReal.bot_eq_zero, add_zero, nonpos_iff_eq_zero]
exact
- supᵢ_le fun i => (edist_triangle _ (g i) _).trans <| add_le_add (le_supᵢ _ i) (le_supᵢ _ i)
+ iSup_le fun i => (edist_triangle _ (g i) _).trans <| add_le_add (le_iSup _ i) (le_iSup _ i)
· simp only [edist_eq_sum (zero_lt_one.trans_le hp)]
calc
(∑ i, edist (f i) (h i) ^ p.to_real) ^ (1 / p.to_real) ≤
@@ -314,15 +314,15 @@ attribute [local instance] PiLp.pseudoEmetricAux
/-- An auxiliary lemma used twice in the proof of `pi_Lp.pseudo_metric_aux` below. Not intended for
use outside this file. -/
-theorem supᵢ_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
+theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
[∀ i, PseudoMetricSpace (α i)] (f g : PiLp ∞ α) : (⨆ i, edist (f i) (g i)) ≠ ⊤ :=
by
cases nonempty_fintype ι
obtain ⟨M, hM⟩ := Fintype.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
- refine' ne_of_lt ((supᵢ_le fun i => _).trans_lt (@ENNReal.coe_lt_top M))
+ refine' ne_of_lt ((iSup_le fun i => _).trans_lt (@ENNReal.coe_lt_top M))
simp only [edist, PseudoMetricSpace.edist_dist, ENNReal.ofReal_eq_coe_nnreal dist_nonneg]
exact_mod_cast hM i
-#align pi_Lp.supr_edist_ne_top_aux PiLp.supᵢ_edist_ne_top_aux
+#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_aux
/-- Endowing the space `pi_Lp p α` with the `L^p` pseudometric structure. This definition is not
satisfactory, as it does not register the fact that the topology, the uniform structure, and the
@@ -349,17 +349,17 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
rcases p.dichotomy with (rfl | h)
· rw [edist_eq_supr, dist_eq_csupr]
· cases isEmpty_or_nonempty ι
- · simp only [Real.csupᵢ_empty, csupᵢ_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
- · refine' le_antisymm (csupᵢ_le fun i => _) _
+ · simp only [Real.ciSup_empty, ciSup_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
+ · refine' le_antisymm (ciSup_le fun i => _) _
· rw [← ENNReal.ofReal_le_iff_le_toReal (supr_edist_ne_top_aux f g), ←
PseudoMetricSpace.edist_dist]
- exact le_supᵢ _ i
- · refine' ENNReal.toReal_le_of_le_ofReal (Real.supₛ_nonneg _ _) (supᵢ_le fun i => _)
+ exact le_iSup _ i
+ · refine' ENNReal.toReal_le_of_le_ofReal (Real.sSup_nonneg _ _) (iSup_le fun i => _)
· rintro - ⟨i, rfl⟩
exact dist_nonneg
· unfold edist
rw [PseudoMetricSpace.edist_dist]
- exact ENNReal.ofReal_le_ofReal (le_csupᵢ (Fintype.bddAbove_range _) i)
+ exact ENNReal.ofReal_le_ofReal (le_ciSup (Fintype.bddAbove_range _) i)
· have A : ∀ i, edist (f i) (g i) ^ p.to_real ≠ ⊤ := fun i =>
ENNReal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)
simp only [edist_eq_sum (zero_lt_one.trans_le h), dist_edist, ENNReal.toReal_rpow,
@@ -374,7 +374,7 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
rcases p.dichotomy with (rfl | h)
·
simpa only [ENNReal.coe_one, one_mul, edist_eq_supr, edist, Finset.sup_le_iff, Finset.mem_univ,
- forall_true_left] using le_supᵢ fun i => edist (x i) (y i)
+ forall_true_left] using le_iSup fun i => edist (x i) (y i)
· have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le h).ne'
rw [edist_eq_sum (zero_lt_one.trans_le h)]
simp only [edist, forall_prop_of_true, one_mul, Finset.mem_univ, Finset.sup_le_iff,
@@ -396,7 +396,7 @@ theorem antilipschitzWith_equiv_aux :
intro x y
rcases p.dichotomy with (rfl | h)
· simp only [edist_eq_supr, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero,
- ENNReal.coe_one, one_mul, supᵢ_le_iff]
+ ENNReal.coe_one, one_mul, iSup_le_iff]
exact fun i => Finset.le_sup (Finset.mem_univ i)
· have pos : 0 < p.to_real := zero_lt_one.trans_le h
have nonneg : 0 ≤ 1 / p.to_real := one_div_nonneg.2 (le_of_lt Pos)
@@ -508,12 +508,12 @@ theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [
exact dist_eq_sum (p.to_real_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
-theorem nndist_eq_supᵢ {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
+theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
Subtype.ext <| by
push_cast
exact dist_eq_csupr _ _
-#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_supᵢ
+#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
lipschitzWith_equiv_aux p β
@@ -566,7 +566,7 @@ theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp
theorem nnnorm_eq_csupr {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
‖f‖₊ = ⨆ i, ‖f i‖₊ := by
ext
- simp [NNReal.coe_supᵢ, norm_eq_csupr]
+ simp [NNReal.coe_iSup, norm_eq_csupr]
#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_csupr
theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
@@ -627,7 +627,7 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
rcases p.dichotomy with (rfl | hp)
· letI : Module 𝕜 (PiLp ∞ β) := Pi.module ι β 𝕜
suffices ‖c • f‖₊ = ‖c‖₊ * ‖f‖₊ by exact_mod_cast NNReal.coe_mono this.le
- simpa only [nnnorm_eq_csupr, NNReal.mul_supᵢ, ← nnnorm_smul]
+ simpa only [nnnorm_eq_csupr, NNReal.mul_iSup, ← nnnorm_smul]
· have : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le hp).ne'
simp only [norm_eq_sum (zero_lt_one.trans_le hp), norm_smul, mul_rpow, norm_nonneg, ←
Finset.mul_sum, Pi.smul_apply]
@@ -691,12 +691,12 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
norm_map' := fun f =>
by
suffices (finset.univ.sup fun i => ‖f i‖₊) = ⨆ i, ‖f i‖₊ by
- simpa only [NNReal.coe_supᵢ] using congr_arg (coe : ℝ≥0 → ℝ) this
+ simpa only [NNReal.coe_iSup] using congr_arg (coe : ℝ≥0 → ℝ) this
refine'
- antisymm (Finset.sup_le fun i _ => le_csupᵢ (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
+ antisymm (Finset.sup_le fun i _ => le_ciSup (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
cases isEmpty_or_nonempty ι
- · simp only [csupᵢ_of_empty, Finset.univ_eq_empty, Finset.sup_empty]
- · exact csupᵢ_le fun i => Finset.le_sup (Finset.mem_univ i) }
+ · simp only [ciSup_of_empty, Finset.univ_eq_empty, Finset.sup_empty]
+ · exact ciSup_le fun i => Finset.le_sup (Finset.mem_univ i) }
#align pi_Lp.equivₗᵢ PiLp.equivₗᵢ
variable {ι' : Type _}
@@ -825,7 +825,7 @@ theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι]
rcases em <| p = ∞ with (rfl | hp)
·
simp only [equiv_symm_apply, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero, one_mul,
- nnnorm_eq_csupr, Function.const_apply, csupᵢ_const]
+ nnnorm_eq_csupr, Function.const_apply, ciSup_const]
· exact nnnorm_equiv_symm_const hp b
#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a313d8bba1bad05faba71a4a4e9742ab5bd9efd
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 195fcd60ff2bfe392543bceb0ec2adcdb472db4c
+! leanprover-community/mathlib commit 2fd0de23fbbf0f8a84dbb7bc2e7a2da45de67f8b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -84,7 +84,7 @@ instance (p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) [∀ i, Inhabited (
namespace PiLp
-variable (p : ℝ≥0∞) (𝕜 : Type _) {ι : Type _} (α : ι → Type _) (β : ι → Type _)
+variable (p : ℝ≥0∞) (𝕜 𝕜' : Type _) {ι : Type _} (α : ι → Type _) (β : ι → Type _)
/-- Canonical bijection between `pi_Lp p α` and the original Pi type. We introduce it to be able
to compare the `L^p` and `L^∞` distances through it. -/
@@ -617,7 +617,7 @@ theorem edist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
-variable [NormedField 𝕜]
+variable [NormedField 𝕜] [NormedField 𝕜']
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
@@ -636,6 +636,16 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
exact Finset.sum_nonneg fun i hi => rpow_nonneg_of_nonneg (norm_nonneg _) _ }
#align pi_Lp.normed_space PiLp.normedSpace
+instance isScalarTower [∀ i, SeminormedAddCommGroup (β i)] [SMul 𝕜 𝕜'] [∀ i, NormedSpace 𝕜 (β i)]
+ [∀ i, NormedSpace 𝕜' (β i)] [∀ i, IsScalarTower 𝕜 𝕜' (β i)] : IsScalarTower 𝕜 𝕜' (PiLp p β) :=
+ Pi.isScalarTower
+#align pi_Lp.is_scalar_tower PiLp.isScalarTower
+
+instance sMulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
+ [∀ i, NormedSpace 𝕜' (β i)] [∀ i, SMulCommClass 𝕜 𝕜' (β i)] : SMulCommClass 𝕜 𝕜' (PiLp p β) :=
+ Pi.smulCommClass
+#align pi_Lp.smul_comm_class PiLp.sMulCommClass
+
instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
[I : ∀ i, FiniteDimensional 𝕜 (β i)] : FiniteDimensional 𝕜 (PiLp p β) :=
FiniteDimensional.finiteDimensional_pi' _ _
@@ -643,7 +653,7 @@ instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, Normed
/- Register simplification lemmas for the applications of `pi_Lp` elements, as the usual lemmas
for Pi types will not trigger. -/
-variable {𝕜 p α} [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] (c : 𝕜)
+variable {𝕜 𝕜' p α} [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] (c : 𝕜)
variable (x y : PiLp p β) (x' y' : ∀ i, β i) (i : ι)
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -221,7 +221,7 @@ end Dist
section Norm
-variable [∀ i, HasNorm (β i)] [∀ i, Zero (β i)]
+variable [∀ i, Norm (β i)] [∀ i, Zero (β i)]
/-- Endowing the space `pi_Lp p β` with the `L^p` norm. We register this instance
separate from `pi_Lp.seminormed_add_comm_group` since the latter requires the type class hypothesis
@@ -229,7 +229,7 @@ separate from `pi_Lp.seminormed_add_comm_group` since the latter requires the ty
Registering this separately allows for a future norm-like structure on `pi_Lp p β` for `p < 1`
satisfying a relaxed triangle inequality. These are called *quasi-norms*. -/
-instance hasNorm : HasNorm (PiLp p β)
+instance hasNorm : Norm (PiLp p β)
where norm f :=
if hp : p = 0 then { i | f i ≠ 0 }.toFinite.toFinset.card
else if p = ∞ then ⨆ i, ‖f i‖ else (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal)
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -184,7 +184,7 @@ end EdistProp
section Dist
-variable [∀ i, HasDist (α i)]
+variable [∀ i, Dist (α i)]
/-- Endowing the space `pi_Lp p β` with the `L^p` distance. We register this instance
separate from `pi_Lp.pseudo_metric` since the latter requires the type class hypothesis
@@ -193,7 +193,7 @@ separate from `pi_Lp.pseudo_metric` since the latter requires the type class hyp
Registering this separately allows for a future metric-like structure on `pi_Lp p β` for `p < 1`
satisfying a relaxed triangle inequality. The terminology for this varies throughout the
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
-instance : HasDist (PiLp p α)
+instance : Dist (PiLp p α)
where dist f g :=
if hp : p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
else
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -121,7 +121,7 @@ lemmas for each of three cases `p = 0`, `p = ∞` and `0 < p.to_real`.
section Edist
-variable [∀ i, HasEdist (β i)]
+variable [∀ i, EDist (β i)]
/-- Endowing the space `pi_Lp p β` with the `L^p` edistance. We register this instance
separate from `pi_Lp.pseudo_emetric` since the latter requires the type class hypothesis
@@ -130,7 +130,7 @@ separate from `pi_Lp.pseudo_emetric` since the latter requires the type class hy
Registering this separately allows for a future emetric-like structure on `pi_Lp p β` for `p < 1`
satisfying a relaxed triangle inequality. The terminology for this varies throughout the
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
-instance : HasEdist (PiLp p β)
+instance : EDist (PiLp p β)
where edist f g :=
if hp : p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
else
@@ -158,7 +158,7 @@ end Edist
section EdistProp
-variable {β} [∀ i, PseudoEmetricSpace (β i)]
+variable {β} [∀ i, PseudoEMetricSpace (β i)]
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
@@ -274,7 +274,7 @@ explaining why having definitionally the right uniformity is often important.
-/
-variable [Fact (1 ≤ p)] [∀ i, PseudoMetricSpace (α i)] [∀ i, PseudoEmetricSpace (β i)]
+variable [Fact (1 ≤ p)] [∀ i, PseudoMetricSpace (α i)] [∀ i, PseudoEMetricSpace (β i)]
variable [Fintype ι]
@@ -284,7 +284,7 @@ with the product one. Therefore, we do not register it as an instance. Using thi
pseudoemetric space instance, we will show that the uniform structure is equal (but not defeq) to
the product one, and then register an instance in which we replace the uniform structure by the
product one using this pseudoemetric space and `pseudo_emetric_space.replace_uniformity`. -/
-def pseudoEmetricAux : PseudoEmetricSpace (PiLp p β)
+def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β)
where
edist_self := PiLp.edist_self p
edist_comm := PiLp.edist_comm p
@@ -335,7 +335,7 @@ structure and the bornology by the product ones using this pseudometric space,
See note [reducible non-instances] -/
@[reducible]
def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
- PseudoEmetricSpace.toPseudoMetricSpaceOfDist dist
+ PseudoEMetricSpace.toPseudoMetricSpaceOfDist dist
(fun f g => by
rcases p.dichotomy with (rfl | h)
· exact supr_edist_ne_top_aux f g
@@ -481,13 +481,13 @@ variable [Fact (1 ≤ p)]
/-- pseudoemetric space instance on the product of finitely many pseudoemetric spaces, using the
`L^p` pseudoedistance, and having as uniformity the product uniformity. -/
-instance [∀ i, PseudoEmetricSpace (β i)] : PseudoEmetricSpace (PiLp p β) :=
+instance [∀ i, PseudoEMetricSpace (β i)] : PseudoEMetricSpace (PiLp p β) :=
(pseudoEmetricAux p β).replaceUniformity (aux_uniformity_eq p β).symm
/-- emetric space instance on the product of finitely many emetric spaces, using the `L^p`
edistance, and having as uniformity the product uniformity. -/
-instance [∀ i, EmetricSpace (α i)] : EmetricSpace (PiLp p α) :=
- @EmetricSpace.ofT0PseudoEmetricSpace (PiLp p α) _ Pi.t0Space
+instance [∀ i, EMetricSpace (α i)] : EMetricSpace (PiLp p α) :=
+ @EMetricSpace.ofT0PseudoEMetricSpace (PiLp p α) _ Pi.t0Space
/-- pseudometric space instance on the product of finitely many psuedometric spaces, using the
`L^p` distance, and having as uniformity the product uniformity. -/
@@ -515,16 +515,16 @@ theorem nndist_eq_supᵢ {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
exact dist_eq_csupr _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_supᵢ
-theorem lipschitzWith_equiv [∀ i, PseudoEmetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
+theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
lipschitzWith_equiv_aux p β
#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equiv
-theorem antilipschitzWith_equiv [∀ i, PseudoEmetricSpace (β i)] :
+theorem antilipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
antilipschitzWith_equiv_aux p β
#align pi_Lp.antilipschitz_with_equiv PiLp.antilipschitzWith_equiv
-theorem infty_equiv_isometry [∀ i, PseudoEmetricSpace (β i)] : Isometry (PiLp.equiv ∞ β) :=
+theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp.equiv ∞ β) :=
fun x y =>
le_antisymm (by simpa only [ENNReal.coe_one, one_mul] using lipschitz_with_equiv ∞ β x y)
(by
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 38d38e090c9bcfba03ecbe350534d1b1a2660bd6
+! leanprover-community/mathlib commit 195fcd60ff2bfe392543bceb0ec2adcdb472db4c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -487,7 +487,7 @@ instance [∀ i, PseudoEmetricSpace (β i)] : PseudoEmetricSpace (PiLp p β) :=
/-- emetric space instance on the product of finitely many emetric spaces, using the `L^p`
edistance, and having as uniformity the product uniformity. -/
instance [∀ i, EmetricSpace (α i)] : EmetricSpace (PiLp p α) :=
- @Emetric.ofT0PseudoEmetricSpace (PiLp p α) _ Pi.t0Space
+ @EmetricSpace.ofT0PseudoEmetricSpace (PiLp p α) _ Pi.t0Space
/-- pseudometric space instance on the product of finitely many psuedometric spaces, using the
`L^p` distance, and having as uniformity the product uniformity. -/
@@ -498,7 +498,7 @@ instance [∀ i, PseudoMetricSpace (β i)] : PseudoMetricSpace (PiLp p β) :=
/-- metric space instance on the product of finitely many metric spaces, using the `L^p` distance,
and having as uniformity the product uniformity. -/
instance [∀ i, MetricSpace (α i)] : MetricSpace (PiLp p α) :=
- Metric.ofT0PseudoMetricSpace _
+ MetricSpace.ofT0PseudoMetricSpace _
theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -66,7 +66,7 @@ We also set up the theory for `pseudo_emetric_space` and `pseudo_metric_space`.
open Real Set Filter IsROrC Bornology
-open BigOperators uniformity Topology NNReal Ennreal
+open BigOperators uniformity Topology NNReal ENNReal
noncomputable section
@@ -144,14 +144,14 @@ theorem edist_eq_card (f g : PiLp 0 β) : edist f g = { i | f i ≠ g i }.toFini
theorem edist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p β) :
edist f g = (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
- let hp' := Ennreal.toReal_pos_iff.mp hp
+ let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.edist_eq_sum PiLp.edist_eq_sum
theorem edist_eq_supᵢ (f g : PiLp ∞ β) : edist f g = ⨆ i, edist (f i) (g i) :=
by
dsimp [edist]
- exact if_neg Ennreal.top_ne_zero
+ exact if_neg ENNReal.top_ne_zero
#align pi_Lp.edist_eq_supr PiLp.edist_eq_supᵢ
end Edist
@@ -167,7 +167,7 @@ protected theorem edist_self (f : PiLp p β) : edist f f = 0 :=
rcases p.trichotomy with (rfl | rfl | h)
· simp [edist_eq_card]
· simp [edist_eq_supr]
- · simp [edist_eq_sum h, Ennreal.zero_rpow_of_pos h, Ennreal.zero_rpow_of_pos (inv_pos.2 <| h)]
+ · simp [edist_eq_sum h, ENNReal.zero_rpow_of_pos h, ENNReal.zero_rpow_of_pos (inv_pos.2 <| h)]
#align pi_Lp.edist_self PiLp.edist_self
/-- This holds independent of `p` and does not require `[fact (1 ≤ p)]`. We keep it separate
@@ -207,14 +207,14 @@ theorem dist_eq_card (f g : PiLp 0 α) : dist f g = { i | f i ≠ g i }.toFinite
theorem dist_eq_sum {p : ℝ≥0∞} (hp : 0 < p.toReal) (f g : PiLp p α) :
dist f g = (∑ i, dist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) :=
- let hp' := Ennreal.toReal_pos_iff.mp hp
+ let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.dist_eq_sum PiLp.dist_eq_sum
theorem dist_eq_csupr (f g : PiLp ∞ α) : dist f g = ⨆ i, dist (f i) (g i) :=
by
dsimp [dist]
- exact if_neg Ennreal.top_ne_zero
+ exact if_neg ENNReal.top_ne_zero
#align pi_Lp.dist_eq_csupr PiLp.dist_eq_csupr
end Dist
@@ -244,12 +244,12 @@ theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = { i | f i ≠ 0 }.toFinite.toFi
theorem norm_eq_csupr (f : PiLp ∞ β) : ‖f‖ = ⨆ i, ‖f i‖ :=
by
dsimp [norm]
- exact if_neg Ennreal.top_ne_zero
+ exact if_neg ENNReal.top_ne_zero
#align pi_Lp.norm_eq_csupr PiLp.norm_eq_csupr
theorem norm_eq_sum (hp : 0 < p.toReal) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal) :=
- let hp' := Ennreal.toReal_pos_iff.mp hp
+ let hp' := ENNReal.toReal_pos_iff.mp hp
(if_neg hp'.1.ne').trans (if_neg hp'.2.Ne)
#align pi_Lp.norm_eq_sum PiLp.norm_eq_sum
@@ -292,7 +292,7 @@ def pseudoEmetricAux : PseudoEmetricSpace (PiLp p β)
rcases p.dichotomy with (rfl | hp)
· simp only [edist_eq_supr]
cases isEmpty_or_nonempty ι
- · simp only [csupᵢ_of_empty, Ennreal.bot_eq_zero, add_zero, nonpos_iff_eq_zero]
+ · simp only [csupᵢ_of_empty, ENNReal.bot_eq_zero, add_zero, nonpos_iff_eq_zero]
exact
supᵢ_le fun i => (edist_triangle _ (g i) _).trans <| add_le_add (le_supᵢ _ i) (le_supᵢ _ i)
· simp only [edist_eq_sum (zero_lt_one.trans_le hp)]
@@ -300,13 +300,13 @@ def pseudoEmetricAux : PseudoEmetricSpace (PiLp p β)
(∑ i, edist (f i) (h i) ^ p.to_real) ^ (1 / p.to_real) ≤
(∑ i, (edist (f i) (g i) + edist (g i) (h i)) ^ p.to_real) ^ (1 / p.to_real) :=
by
- apply Ennreal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans hp)
+ apply ENNReal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans hp)
refine' Finset.sum_le_sum fun i hi => _
- exact Ennreal.rpow_le_rpow (edist_triangle _ _ _) (zero_le_one.trans hp)
+ exact ENNReal.rpow_le_rpow (edist_triangle _ _ _) (zero_le_one.trans hp)
_ ≤
(∑ i, edist (f i) (g i) ^ p.to_real) ^ (1 / p.to_real) +
(∑ i, edist (g i) (h i) ^ p.to_real) ^ (1 / p.to_real) :=
- Ennreal.Lp_add_le _ _ _ hp
+ ENNReal.Lp_add_le _ _ _ hp
#align pi_Lp.pseudo_emetric_aux PiLp.pseudoEmetricAux
@@ -319,8 +319,8 @@ theorem supᵢ_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
by
cases nonempty_fintype ι
obtain ⟨M, hM⟩ := Fintype.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
- refine' ne_of_lt ((supᵢ_le fun i => _).trans_lt (@Ennreal.coe_lt_top M))
- simp only [edist, PseudoMetricSpace.edist_dist, Ennreal.ofReal_eq_coe_nNReal dist_nonneg]
+ refine' ne_of_lt ((supᵢ_le fun i => _).trans_lt (@ENNReal.coe_lt_top M))
+ simp only [edist, PseudoMetricSpace.edist_dist, ENNReal.ofReal_eq_coe_nnreal dist_nonneg]
exact_mod_cast hM i
#align pi_Lp.supr_edist_ne_top_aux PiLp.supᵢ_edist_ne_top_aux
@@ -341,29 +341,29 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
· exact supr_edist_ne_top_aux f g
· rw [edist_eq_sum (zero_lt_one.trans_le h)]
exact
- Ennreal.rpow_ne_top_of_nonneg (one_div_nonneg.2 (zero_le_one.trans h))
+ ENNReal.rpow_ne_top_of_nonneg (one_div_nonneg.2 (zero_le_one.trans h))
(ne_of_lt <|
- Ennreal.sum_lt_top fun i hi =>
- Ennreal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)))
+ ENNReal.sum_lt_top fun i hi =>
+ ENNReal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)))
fun f g => by
rcases p.dichotomy with (rfl | h)
· rw [edist_eq_supr, dist_eq_csupr]
· cases isEmpty_or_nonempty ι
- · simp only [Real.csupᵢ_empty, csupᵢ_of_empty, Ennreal.bot_eq_zero, Ennreal.zero_toReal]
+ · simp only [Real.csupᵢ_empty, csupᵢ_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
· refine' le_antisymm (csupᵢ_le fun i => _) _
- · rw [← Ennreal.ofReal_le_iff_le_toReal (supr_edist_ne_top_aux f g), ←
+ · rw [← ENNReal.ofReal_le_iff_le_toReal (supr_edist_ne_top_aux f g), ←
PseudoMetricSpace.edist_dist]
exact le_supᵢ _ i
- · refine' Ennreal.toReal_le_of_le_ofReal (Real.supₛ_nonneg _ _) (supᵢ_le fun i => _)
+ · refine' ENNReal.toReal_le_of_le_ofReal (Real.supₛ_nonneg _ _) (supᵢ_le fun i => _)
· rintro - ⟨i, rfl⟩
exact dist_nonneg
· unfold edist
rw [PseudoMetricSpace.edist_dist]
- exact Ennreal.ofReal_le_ofReal (le_csupᵢ (Fintype.bddAbove_range _) i)
+ exact ENNReal.ofReal_le_ofReal (le_csupᵢ (Fintype.bddAbove_range _) i)
· have A : ∀ i, edist (f i) (g i) ^ p.to_real ≠ ⊤ := fun i =>
- Ennreal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)
- simp only [edist_eq_sum (zero_lt_one.trans_le h), dist_edist, Ennreal.toReal_rpow,
- dist_eq_sum (zero_lt_one.trans_le h), ← Ennreal.toReal_sum fun i _ => A i]
+ ENNReal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)
+ simp only [edist_eq_sum (zero_lt_one.trans_le h), dist_edist, ENNReal.toReal_rpow,
+ dist_eq_sum (zero_lt_one.trans_le h), ← ENNReal.toReal_sum fun i _ => A i]
#align pi_Lp.pseudo_metric_aux PiLp.pseudoMetricAux
attribute [local instance] PiLp.pseudoMetricAux
@@ -373,19 +373,19 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) :=
intro x y
rcases p.dichotomy with (rfl | h)
·
- simpa only [Ennreal.coe_one, one_mul, edist_eq_supr, edist, Finset.sup_le_iff, Finset.mem_univ,
+ simpa only [ENNReal.coe_one, one_mul, edist_eq_supr, edist, Finset.sup_le_iff, Finset.mem_univ,
forall_true_left] using le_supᵢ fun i => edist (x i) (y i)
· have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le h).ne'
rw [edist_eq_sum (zero_lt_one.trans_le h)]
simp only [edist, forall_prop_of_true, one_mul, Finset.mem_univ, Finset.sup_le_iff,
- Ennreal.coe_one]
+ ENNReal.coe_one]
intro i
calc
edist (x i) (y i) = (edist (x i) (y i) ^ p.to_real) ^ (1 / p.to_real) := by
- simp [← Ennreal.rpow_mul, cancel, -one_div]
+ simp [← ENNReal.rpow_mul, cancel, -one_div]
_ ≤ (∑ i, edist (x i) (y i) ^ p.to_real) ^ (1 / p.to_real) :=
by
- apply Ennreal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans h)
+ apply ENNReal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans h)
exact Finset.single_le_sum (fun i hi => (bot_le : (0 : ℝ≥0∞) ≤ _)) (Finset.mem_univ i)
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
@@ -395,31 +395,31 @@ theorem antilipschitzWith_equiv_aux :
by
intro x y
rcases p.dichotomy with (rfl | h)
- · simp only [edist_eq_supr, Ennreal.div_top, Ennreal.zero_toReal, NNReal.rpow_zero,
- Ennreal.coe_one, one_mul, supᵢ_le_iff]
+ · simp only [edist_eq_supr, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero,
+ ENNReal.coe_one, one_mul, supᵢ_le_iff]
exact fun i => Finset.le_sup (Finset.mem_univ i)
· have pos : 0 < p.to_real := zero_lt_one.trans_le h
have nonneg : 0 ≤ 1 / p.to_real := one_div_nonneg.2 (le_of_lt Pos)
have cancel : p.to_real * (1 / p.to_real) = 1 := mul_div_cancel' 1 (ne_of_gt Pos)
- rw [edist_eq_sum Pos, Ennreal.toReal_div 1 p]
- simp only [edist, ← one_div, Ennreal.one_toReal]
+ rw [edist_eq_sum Pos, ENNReal.toReal_div 1 p]
+ simp only [edist, ← one_div, ENNReal.one_toReal]
calc
(∑ i, edist (x i) (y i) ^ p.to_real) ^ (1 / p.to_real) ≤
(∑ i, edist (PiLp.equiv p β x) (PiLp.equiv p β y) ^ p.to_real) ^ (1 / p.to_real) :=
by
- apply Ennreal.rpow_le_rpow _ nonneg
+ apply ENNReal.rpow_le_rpow _ nonneg
apply Finset.sum_le_sum fun i hi => _
- apply Ennreal.rpow_le_rpow _ (le_of_lt Pos)
+ apply ENNReal.rpow_le_rpow _ (le_of_lt Pos)
exact Finset.le_sup (Finset.mem_univ i)
_ =
((Fintype.card ι : ℝ≥0) ^ (1 / p.to_real) : ℝ≥0) *
edist (PiLp.equiv p β x) (PiLp.equiv p β y) :=
by
- simp only [nsmul_eq_mul, Finset.card_univ, Ennreal.rpow_one, Finset.sum_const,
- Ennreal.mul_rpow_of_nonneg _ _ nonneg, ← Ennreal.rpow_mul, cancel]
+ simp only [nsmul_eq_mul, Finset.card_univ, ENNReal.rpow_one, Finset.sum_const,
+ ENNReal.mul_rpow_of_nonneg _ _ nonneg, ← ENNReal.rpow_mul, cancel]
have : (Fintype.card ι : ℝ≥0∞) = (Fintype.card ι : ℝ≥0) :=
- (Ennreal.coe_nat (Fintype.card ι)).symm
- rw [this, Ennreal.coe_rpow_of_nonneg _ nonneg]
+ (ENNReal.coe_nat (Fintype.card ι)).symm
+ rw [this, ENNReal.coe_rpow_of_nonneg _ nonneg]
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
@@ -526,9 +526,9 @@ theorem antilipschitzWith_equiv [∀ i, PseudoEmetricSpace (β i)] :
theorem infty_equiv_isometry [∀ i, PseudoEmetricSpace (β i)] : Isometry (PiLp.equiv ∞ β) :=
fun x y =>
- le_antisymm (by simpa only [Ennreal.coe_one, one_mul] using lipschitz_with_equiv ∞ β x y)
+ le_antisymm (by simpa only [ENNReal.coe_one, one_mul] using lipschitz_with_equiv ∞ β x y)
(by
- simpa only [Ennreal.div_top, Ennreal.zero_toReal, NNReal.rpow_zero, Ennreal.coe_one,
+ simpa only [ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero, ENNReal.coe_one,
one_mul] using antilipschitz_with_equiv ∞ β x y)
#align pi_Lp.infty_equiv_isometry PiLp.infty_equiv_isometry
@@ -544,7 +544,7 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
· simpa only [dist_eq_csupr, norm_eq_csupr, dist_eq_norm]
· have : p ≠ ∞ := by
intro hp
- rw [hp, Ennreal.top_toReal] at h
+ rw [hp, ENNReal.top_toReal] at h
linarith
simpa only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
dist_eq_norm] }
@@ -573,8 +573,8 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) :=
by
- have := p.to_real_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| Ennreal.nat_ne_top n)
- simp only [one_div, h, Real.rpow_nat_cast, Ennreal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
+ have := p.to_real_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.nat_ne_top n)
+ simp only [one_div, h, Real.rpow_nat_cast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
@@ -801,7 +801,7 @@ theorem nnnorm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞
· have ne_zero : p.to_real ≠ 0 := (zero_lt_one.trans_le h).ne'
simp_rw [nnnorm_eq_sum hp, equiv_symm_apply, Function.const_apply, Finset.sum_const,
Finset.card_univ, nsmul_eq_mul, NNReal.mul_rpow, ← NNReal.rpow_mul, mul_one_div_cancel NeZero,
- NNReal.rpow_one, Ennreal.toReal_div, Ennreal.one_toReal]
+ NNReal.rpow_one, ENNReal.toReal_div, ENNReal.one_toReal]
#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_const
/-- When `is_empty ι`, this lemma does not hold without the additional assumption `p ≠ ∞` because
@@ -814,7 +814,7 @@ theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι]
by
rcases em <| p = ∞ with (rfl | hp)
·
- simp only [equiv_symm_apply, Ennreal.div_top, Ennreal.zero_toReal, NNReal.rpow_zero, one_mul,
+ simp only [equiv_symm_apply, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero, one_mul,
nnnorm_eq_csupr, Function.const_apply, csupᵢ_const]
· exact nnnorm_equiv_symm_const hp b
#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
LinearIsometryEquiv.piLpCongrRight
(#12437)
Also relax some typeclasses on piLpCongrLeft
.
@@ -679,8 +679,8 @@ instance normedSpace [NormedField 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
#align pi_Lp.normed_space PiLp.normedSpace
variable {𝕜 p α}
-variable [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
-variable [∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] (c : 𝕜)
+variable [Semiring 𝕜] [∀ i, SeminormedAddCommGroup (α i)] [∀ i, SeminormedAddCommGroup (β i)]
+variable [∀ i, Module 𝕜 (α i)] [∀ i, Module 𝕜 (β i)] (c : 𝕜)
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
equivalence. -/
@@ -691,10 +691,11 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
norm_map' := norm_equiv }
#align pi_Lp.equivₗᵢ PiLp.equivₗᵢ
+section piLpCongrLeft
variable {ι' : Type*}
variable [Fintype ι']
variable (p 𝕜)
-variable (E : Type*) [NormedAddCommGroup E] [Module 𝕜 E] [BoundedSMul 𝕜 E]
+variable (E : Type*) [SeminormedAddCommGroup E] [Module 𝕜 E]
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
@@ -741,6 +742,58 @@ theorem _root_.LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [Decida
Pi.single, Function.update, Equiv.symm_apply_eq]
#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_single
+end piLpCongrLeft
+
+section piLpCongrRight
+variable {β}
+
+variable (p) in
+/-- A family of linearly isometric equivalences in the codomain induces an isometric equivalence
+between Pi types with the Lp norm.
+
+This is the isometry version of `LinearEquiv.piCongrRight`. -/
+protected def _root_.LinearIsometryEquiv.piLpCongrRight (e : ∀ i, α i ≃ₗᵢ[𝕜] β i) :
+ PiLp p α ≃ₗᵢ[𝕜] PiLp p β where
+ toLinearEquiv :=
+ WithLp.linearEquiv _ _ _
+ ≪≫ₗ (LinearEquiv.piCongrRight fun i => (e i).toLinearEquiv)
+ ≪≫ₗ (WithLp.linearEquiv _ _ _).symm
+ norm_map' := (WithLp.linearEquiv p 𝕜 _).symm.surjective.forall.2 fun x => by
+ simp only [LinearEquiv.trans_apply, LinearEquiv.piCongrRight_apply,
+ Equiv.apply_symm_apply, WithLp.linearEquiv_symm_apply, WithLp.linearEquiv_apply]
+ obtain rfl | hp := p.dichotomy
+ · simp_rw [PiLp.norm_equiv_symm, Pi.norm_def, LinearEquiv.piCongrRight_apply,
+ LinearIsometryEquiv.coe_toLinearEquiv, LinearIsometryEquiv.nnnorm_map]
+ · have : 0 < p.toReal := zero_lt_one.trans_le <| by norm_cast
+ simp only [PiLp.norm_eq_sum this, WithLp.equiv_symm_pi_apply, LinearEquiv.piCongrRight_apply,
+ LinearIsometryEquiv.coe_toLinearEquiv, LinearIsometryEquiv.norm_map]
+
+@[simp]
+theorem _root_.LinearIsometryEquiv.piLpCongrRight_apply (e : ∀ i, α i ≃ₗᵢ[𝕜] β i) (x : PiLp p α) :
+ LinearIsometryEquiv.piLpCongrRight p e x =
+ (WithLp.equiv p _).symm (fun i => e i (x i)) :=
+ rfl
+
+@[simp]
+theorem _root_.LinearIsometryEquiv.piLpCongrRight_refl :
+ LinearIsometryEquiv.piLpCongrRight p (fun i => .refl 𝕜 (α i)) = .refl _ _ :=
+ rfl
+
+@[simp]
+theorem _root_.LinearIsometryEquiv.piLpCongrRight_symm (e : ∀ i, α i ≃ₗᵢ[𝕜] β i) :
+ (LinearIsometryEquiv.piLpCongrRight p e).symm =
+ LinearIsometryEquiv.piLpCongrRight p (fun i => (e i).symm) :=
+ rfl
+
+@[simp high]
+theorem _root_.LinearIsometryEquiv.piLpCongrRight_single (e : ∀ i, α i ≃ₗᵢ[𝕜] β i) [DecidableEq ι]
+ (i : ι) (v : α i) :
+ LinearIsometryEquiv.piLpCongrRight p e ((WithLp.equiv p (∀ i, α i)).symm <| Pi.single i v) =
+ (WithLp.equiv p (∀ i, β i)).symm (Pi.single i (e _ v)) :=
+ funext <| Pi.apply_single (e ·) (fun _ => map_zero _) _ _
+
+end piLpCongrRight
+
section Single
variable (p)
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -615,7 +615,7 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) := by
have := p.toReal_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.natCast_ne_top n)
- simp only [one_div, h, Real.rpow_nat_cast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
+ simp only [one_div, h, Real.rpow_natCast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
This adds the notation √r
for Real.sqrt r
. The precedence is such that √x⁻¹
is parsed as √(x⁻¹)
; not because this is particularly desirable, but because it's the default and the choice doesn't really matter.
This is extracted from #7907, which adds a more general nth root typeclass.
The idea is to perform all the boring substitutions downstream quickly, so that we can play around with custom elaborators with a much slower rate of code-rot.
This PR also won't rot as quickly, as it does not forbid writing x.sqrt
as that PR does.
While perhaps claiming √
for Real.sqrt
is greedy; it:
NNReal.sqrt
and Nat.sqrt
sqrt
on Float
Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -620,7 +620,7 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*}
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
theorem norm_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
- ‖x‖ = Real.sqrt (∑ i : ι, ‖x i‖ ^ 2) := by
+ ‖x‖ = √(∑ i : ι, ‖x i‖ ^ 2) := by
rw [norm_eq_of_nat 2 (by norm_cast) _] -- Porting note: was `convert`
rw [Real.sqrt_eq_rpow]
norm_cast
@@ -642,7 +642,7 @@ theorem norm_sq_eq_of_L2 (β : ι → Type*) [∀ i, SeminormedAddCommGroup (β
#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2
theorem dist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
- dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
+ dist x y = √(∑ i, dist (x i) (y i) ^ 2) := by
simp_rw [dist_eq_norm, norm_eq_of_L2, sub_apply]
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
CoeFun
Instance for PiLp
(#11943)
This instance should make things easier to read and avoid defeq abuse. That is, given a term x : PiLp p α
(or for instance x : EuclideanSpace 𝕜 n
), we can ensure that Lean interprets this is a function by writing ⇑x
. This shouldn't be a FunLike
instance because then the coercion ⇑
would get unfolded to FunLike.coe
instead of WithLp.equiv
.
@@ -76,6 +76,11 @@ abbrev PiLp (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : Type _ :=
WithLp p (∀ i : ι, α i)
#align pi_Lp PiLp
+/-The following should not be a `FunLike` instance because then the coercion `⇑` would get
+unfolded to `FunLike.coe` instead of `WithLp.equiv`. -/
+instance (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : CoeFun (PiLp p α) (fun _ ↦ (i : ι) → α i) where
+ coe := WithLp.equiv p _
+
instance (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
⟨fun _ => default⟩
@@ -434,7 +434,7 @@ theorem antilipschitzWith_equiv_aux :
simp only [nsmul_eq_mul, Finset.card_univ, ENNReal.rpow_one, Finset.sum_const,
ENNReal.mul_rpow_of_nonneg _ _ nonneg, ← ENNReal.rpow_mul, cancel]
have : (Fintype.card ι : ℝ≥0∞) = (Fintype.card ι : ℝ≥0) :=
- (ENNReal.coe_nat (Fintype.card ι)).symm
+ (ENNReal.coe_natCast (Fintype.card ι)).symm
rw [this, ENNReal.coe_rpow_of_nonneg _ nonneg]
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
@@ -609,7 +609,7 @@ end Linfty
theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) := by
- have := p.toReal_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.nat_ne_top n)
+ have := p.toReal_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.natCast_ne_top n)
simp only [one_div, h, Real.rpow_nat_cast, ENNReal.toReal_nat, eq_self_iff_true, Finset.sum_congr,
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
IsROrC
to RCLike
(#10819)
IsROrC
contains data, which goes against the expectation that classes prefixed with Is
are prop-valued. People have been complaining about this on and off, so this PR renames IsROrC
to RCLike
.
@@ -64,7 +64,7 @@ We also set up the theory for `PseudoEMetricSpace` and `PseudoMetricSpace`.
set_option linter.uppercaseLean3 false
-open Real Set Filter IsROrC Bornology BigOperators Uniformity Topology NNReal ENNReal
+open Real Set Filter RCLike Bornology BigOperators Uniformity Topology NNReal ENNReal
noncomputable section
@@ -395,13 +395,12 @@ attribute [local instance] PiLp.pseudoMetricAux
theorem lipschitzWith_equiv_aux : LipschitzWith 1 (WithLp.equiv p (∀ i, β i)) := by
intro x y
+ simp_rw [ENNReal.coe_one, one_mul, edist_pi_def, Finset.sup_le_iff, Finset.mem_univ,
+ forall_true_left, WithLp.equiv_pi_apply]
rcases p.dichotomy with (rfl | h)
- · simpa only [ENNReal.coe_one, one_mul, edist_eq_iSup, edist, Finset.sup_le_iff, Finset.mem_univ,
- forall_true_left] using le_iSup fun i => edist (x i) (y i)
+ · simpa only [edist_eq_iSup] using le_iSup fun i => edist (x i) (y i)
· have cancel : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel₀ 1 (zero_lt_one.trans_le h).ne'
rw [edist_eq_sum (zero_lt_one.trans_le h)]
- simp only [edist, forall_prop_of_true, one_mul, Finset.mem_univ, Finset.sup_le_iff,
- ENNReal.coe_one]
intro i
calc
edist (x i) (y i) = (edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) := by
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -398,7 +398,7 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (WithLp.equiv p (∀ i, β i))
rcases p.dichotomy with (rfl | h)
· simpa only [ENNReal.coe_one, one_mul, edist_eq_iSup, edist, Finset.sup_le_iff, Finset.mem_univ,
forall_true_left] using le_iSup fun i => edist (x i) (y i)
- · have cancel : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le h).ne'
+ · have cancel : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel₀ 1 (zero_lt_one.trans_le h).ne'
rw [edist_eq_sum (zero_lt_one.trans_le h)]
simp only [edist, forall_prop_of_true, one_mul, Finset.mem_univ, Finset.sup_le_iff,
ENNReal.coe_one]
@@ -421,7 +421,7 @@ theorem antilipschitzWith_equiv_aux :
exact fun i => Finset.le_sup (f := fun i => edist (x i) (y i)) (Finset.mem_univ i)
· have pos : 0 < p.toReal := zero_lt_one.trans_le h
have nonneg : 0 ≤ 1 / p.toReal := one_div_nonneg.2 (le_of_lt pos)
- have cancel : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel' 1 (ne_of_gt pos)
+ have cancel : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel₀ 1 (ne_of_gt pos)
rw [edist_eq_sum pos, ENNReal.toReal_div 1 p]
simp only [edist, ← one_div, ENNReal.one_toReal]
calc
@@ -664,7 +664,7 @@ instance instBoundedSMul [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (
· have hp0 : 0 < p.toReal := zero_lt_one.trans_le hp
have hpt : p ≠ ⊤ := p.toReal_pos_iff_ne_top.mp hp0
rw [nnnorm_eq_sum hpt, nnnorm_eq_sum hpt, NNReal.rpow_one_div_le_iff hp0, NNReal.mul_rpow,
- ← NNReal.rpow_mul, div_mul_cancel 1 hp0.ne', NNReal.rpow_one, Finset.mul_sum]
+ ← NNReal.rpow_mul, div_mul_cancel₀ 1 hp0.ne', NNReal.rpow_one, Finset.mul_sum]
simp_rw [← NNReal.mul_rpow, smul_apply]
exact Finset.sum_le_sum fun i _ => NNReal.rpow_le_rpow (nnnorm_smul_le _ _) hp0.le
Fintype
/Finite
(#11428)
Also rename *lpBcf
to *lpBCF
and drop 2 duplicate instances.
@@ -486,8 +486,6 @@ theorem continuous_equiv_symm [∀ i, UniformSpace (β i)] :
continuous_id
#align pi_Lp.continuous_equiv_symm PiLp.continuous_equiv_symm
-variable [Fintype ι]
-
instance bornology [∀ i, Bornology (β i)] : Bornology (PiLp p β) :=
Pi.instBornology
#align pi_Lp.bornology PiLp.bornology
@@ -495,6 +493,10 @@ instance bornology [∀ i, Bornology (β i)] : Bornology (PiLp p β) :=
-- throughout the rest of the file, we assume `1 ≤ p`
variable [Fact (1 ≤ p)]
+section Fintype
+
+variable [Fintype ι]
+
/-- pseudoemetric space instance on the product of finitely many pseudoemetric spaces, using the
`L^p` pseudoedistance, and having as uniformity the product uniformity. -/
instance [∀ i, PseudoEMetricSpace (β i)] : PseudoEMetricSpace (PiLp p β) :=
@@ -870,8 +872,11 @@ protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i where
continuous_invFun := continuous_equiv_symm _ _
#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquiv
+end Fintype
+
section Basis
+variable [Finite ι] [Ring 𝕜]
variable (ι)
/-- A version of `Pi.basisFun` for `PiLp`. -/
@@ -906,9 +911,11 @@ theorem basisFun_map :
rfl
#align pi_Lp.basis_fun_map PiLp.basisFun_map
+end Basis
+
open Matrix
-nonrec theorem basis_toMatrix_basisFun_mul
+nonrec theorem basis_toMatrix_basisFun_mul [Fintype ι]
{𝕜} [SeminormedCommRing 𝕜] (b : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜))
(A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) * A =
@@ -920,6 +927,4 @@ nonrec theorem basis_toMatrix_basisFun_mul
exact this
#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mul
-end Basis
-
end PiLp
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -92,7 +92,6 @@ for Pi types will not trigger. -/
variable {𝕜 p α}
variable [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
variable [∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] (c : 𝕜)
-
variable (x y : PiLp p β) (i : ι)
@[simp]
@@ -302,7 +301,6 @@ explaining why having definitionally the right uniformity is often important.
variable [Fact (1 ≤ p)] [∀ i, PseudoMetricSpace (α i)] [∀ i, PseudoEMetricSpace (β i)]
-
variable [Fintype ι]
/-- Endowing the space `PiLp p β` with the `L^p` pseudoemetric structure. This definition is not
@@ -688,9 +686,7 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
#align pi_Lp.equivₗᵢ PiLp.equivₗᵢ
variable {ι' : Type*}
-
variable [Fintype ι']
-
variable (p 𝕜)
variable (E : Type*) [NormedAddCommGroup E] [Module 𝕜 E] [BoundedSMul 𝕜 E]
@@ -742,7 +738,6 @@ theorem _root_.LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [Decida
section Single
variable (p)
-
variable [DecidableEq ι]
-- Porting note: added `hp`
@@ -79,7 +79,7 @@ abbrev PiLp (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : Type _ :=
instance (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
⟨fun _ => default⟩
-@[ext] -- Porting note: new lemma
+@[ext] -- Porting note (#10756): new lemma
protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type*} {α : ι → Type*} {x y : PiLp p α}
(h : ∀ i, x i = y i) : x = y := funext h
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -79,7 +79,7 @@ abbrev PiLp (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : Type _ :=
instance (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
⟨fun _ => default⟩
-@[ext] -- porting note: new lemma
+@[ext] -- Porting note: new lemma
protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type*} {α : ι → Type*} {x y : PiLp p α}
(h : ∀ i, x i = y i) : x = y := funext h
@@ -720,7 +720,7 @@ theorem _root_.LinearIsometryEquiv.piLpCongrLeft_apply (e : ι ≃ ι') (v : PiL
theorem _root_.LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
(LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e).symm =
LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e.symm :=
- LinearIsometryEquiv.ext fun z => by -- porting note: was `rfl`
+ LinearIsometryEquiv.ext fun z => by -- Porting note: was `rfl`
simp only [LinearIsometryEquiv.piLpCongrLeft, LinearIsometryEquiv.symm,
LinearIsometryEquiv.coe_mk]
unfold PiLp WithLp
Real.ciSup_empty
(#10217)
and a few more to clarify that they are about IsEmpty
, not about ∅
. Make a few more lemmas simp.`
@@ -373,7 +373,7 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
rcases p.dichotomy with (rfl | h)
· rw [edist_eq_iSup, dist_eq_iSup]
· cases isEmpty_or_nonempty ι
- · simp only [Real.ciSup_empty, ciSup_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
+ · simp only [Real.iSup_of_isEmpty, ciSup_of_empty, ENNReal.bot_eq_zero, ENNReal.zero_toReal]
· refine' le_antisymm (ciSup_le fun i => _) _
· rw [← ENNReal.ofReal_le_iff_le_toReal (iSup_edist_ne_top_aux f g), ←
PseudoMetricSpace.edist_dist]
@@ -86,6 +86,40 @@ protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type*} {α : ι → Type*} {x
namespace PiLp
variable (p : ℝ≥0∞) (𝕜 : Type*) {ι : Type*} (α : ι → Type*) (β : ι → Type*)
+section
+/- Register simplification lemmas for the applications of `PiLp` elements, as the usual lemmas
+for Pi types will not trigger. -/
+variable {𝕜 p α}
+variable [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
+variable [∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] (c : 𝕜)
+
+variable (x y : PiLp p β) (i : ι)
+
+@[simp]
+theorem zero_apply : (0 : PiLp p β) i = 0 :=
+ rfl
+#align pi_Lp.zero_apply PiLp.zero_apply
+
+@[simp]
+theorem add_apply : (x + y) i = x i + y i :=
+ rfl
+#align pi_Lp.add_apply PiLp.add_apply
+
+@[simp]
+theorem sub_apply : (x - y) i = x i - y i :=
+ rfl
+#align pi_Lp.sub_apply PiLp.sub_apply
+
+@[simp]
+theorem smul_apply : (c • x) i = c • x i :=
+ rfl
+#align pi_Lp.smul_apply PiLp.smul_apply
+
+@[simp]
+theorem neg_apply : (-x) i = -x i :=
+ rfl
+#align pi_Lp.neg_apply PiLp.neg_apply
+end
/-! Note that the unapplied versions of these lemmas are deliberately omitted, as they break
the use of the type synonym. -/
@@ -223,11 +257,11 @@ separate from `PiLp.seminormedAddCommGroup` since the latter requires the type c
Registering this separately allows for a future norm-like structure on `PiLp p β` for `p < 1`
satisfying a relaxed triangle inequality. These are called *quasi-norms*. -/
-instance hasNorm : Norm (PiLp p β) where
+instance instNorm : Norm (PiLp p β) where
norm f :=
if p = 0 then {i | ‖f i‖ ≠ 0}.toFinite.toFinset.card
else if p = ∞ then ⨆ i, ‖f i‖ else (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal)
-#align pi_Lp.has_norm PiLp.hasNorm
+#align pi_Lp.has_norm PiLp.instNorm
variable {p β}
@@ -299,7 +333,6 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β) where
(∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) +
(∑ i, edist (g i) (h i) ^ p.toReal) ^ (1 / p.toReal) :=
ENNReal.Lp_add_le _ _ _ hp
-
#align pi_Lp.pseudo_emetric_aux PiLp.pseudoEmetricAux
attribute [local instance] PiLp.pseudoEmetricAux
@@ -528,17 +561,13 @@ instance seminormedAddCommGroup [∀ i, SeminormedAddCommGroup (β i)] :
{ Pi.addCommGroup with
dist_eq := fun x y => by
rcases p.dichotomy with (rfl | h)
- · simp only [dist_eq_iSup, norm_eq_ciSup, dist_eq_norm]
- -- Porting note: added
- congr
+ · simp only [dist_eq_iSup, norm_eq_ciSup, dist_eq_norm, sub_apply]
· have : p ≠ ∞ := by
intro hp
rw [hp, ENNReal.top_toReal] at h
linarith
simp only [dist_eq_sum (zero_lt_one.trans_le h), norm_eq_sum (zero_lt_one.trans_le h),
- dist_eq_norm]
- -- Porting note: added
- congr }
+ dist_eq_norm, sub_apply] }
#align pi_Lp.seminormed_add_comm_group PiLp.seminormedAddCommGroup
/-- normed group instance on the product of finitely many normed groups, using the `L^p` norm. -/
@@ -610,8 +639,7 @@ theorem norm_sq_eq_of_L2 (β : ι → Type*) [∀ i, SeminormedAddCommGroup (β
theorem dist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
- simp_rw [dist_eq_norm, norm_eq_of_L2]
- rfl
+ simp_rw [dist_eq_norm, norm_eq_of_L2, sub_apply]
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
theorem nndist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
@@ -626,7 +654,7 @@ theorem edist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
-instance instboundedSMul [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
+instance instBoundedSMul [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
[∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] :
BoundedSMul 𝕜 (PiLp p β) :=
.of_nnnorm_smul_le fun c f => by
@@ -637,8 +665,6 @@ instance instboundedSMul [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (
have hpt : p ≠ ⊤ := p.toReal_pos_iff_ne_top.mp hp0
rw [nnnorm_eq_sum hpt, nnnorm_eq_sum hpt, NNReal.rpow_one_div_le_iff hp0, NNReal.mul_rpow,
← NNReal.rpow_mul, div_mul_cancel 1 hp0.ne', NNReal.rpow_one, Finset.mul_sum]
- -- Porting note: added to replace Pi.smul_apply
- have smul_apply : ∀ i : ι, (c • f) i = c • (f i) := fun i => rfl
simp_rw [← NNReal.mul_rpow, smul_apply]
exact Finset.sum_le_sum fun i _ => NNReal.rpow_le_rpow (nnnorm_smul_le _ _) hp0.le
@@ -648,39 +674,10 @@ instance normedSpace [NormedField 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
norm_smul_le := norm_smul_le
#align pi_Lp.normed_space PiLp.normedSpace
-/- Register simplification lemmas for the applications of `PiLp` elements, as the usual lemmas
-for Pi types will not trigger. -/
variable {𝕜 p α}
variable [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
variable [∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] (c : 𝕜)
-variable (x y : PiLp p β) (x' y' : ∀ i, β i) (i : ι)
-
-@[simp]
-theorem zero_apply : (0 : PiLp p β) i = 0 :=
- rfl
-#align pi_Lp.zero_apply PiLp.zero_apply
-
-@[simp]
-theorem add_apply : (x + y) i = x i + y i :=
- rfl
-#align pi_Lp.add_apply PiLp.add_apply
-
-@[simp]
-theorem sub_apply : (x - y) i = x i - y i :=
- rfl
-#align pi_Lp.sub_apply PiLp.sub_apply
-
-@[simp]
-theorem smul_apply : (c • x) i = c • x i :=
- rfl
-#align pi_Lp.smul_apply PiLp.smul_apply
-
-@[simp]
-theorem neg_apply : (-x) i = -x i :=
- rfl
-#align pi_Lp.neg_apply PiLp.neg_apply
-
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
equivalence. -/
def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
@@ -703,8 +700,6 @@ def _root_.LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
(PiLp p fun _ : ι => E) ≃ₗᵢ[𝕜] PiLp p fun _ : ι' => E where
toLinearEquiv := LinearEquiv.piCongrLeft' 𝕜 (fun _ : ι => E) e
norm_map' x' := by
- -- Porting note: this avoids spurious `x` and `y` arguments
- clear x y
rcases p.dichotomy with (rfl | h)
· simp_rw [norm_eq_ciSup]
exact e.symm.iSup_congr fun _ => rfl
@@ -754,7 +749,6 @@ variable [DecidableEq ι]
@[simp]
theorem nnnorm_equiv_symm_single [hp : Fact (1 ≤ p)] (i : ι) (b : β i) :
‖(WithLp.equiv p (∀ i, β i)).symm (Pi.single i b)‖₊ = ‖b‖₊ := by
- clear x y -- Porting note: added
haveI : Nonempty ι := ⟨i⟩
induction p using ENNReal.recTopCoe generalizing hp with
| top =>
@@ -834,7 +828,6 @@ for `p ≠ ∞`. -/
theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι] (b : β) :
‖(WithLp.equiv p (ι → β)).symm (Function.const _ b)‖₊ =
(Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖b‖₊ := by
- clear x y -- Porting note: added to avoid spurious arguments
rcases em <| p = ∞ with (rfl | hp)
· simp only [WithLp.equiv_symm_pi_apply, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero,
one_mul, nnnorm_eq_ciSup, Function.const_apply, ciSup_const]
BoundedSMul
instances (#9796)
Also adds:
WithLp
to the standard one on productsBoundedSMul.of_nnnorm_smul_le
which eliminates all the positivity juggling.In theory we could generalize even further to non-unital rings, but that would require more generalization of WithLp
, and is trivial for someone to do later; the proofs here will still work.
@@ -85,7 +85,7 @@ protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type*} {α : ι → Type*} {x
namespace PiLp
-variable (p : ℝ≥0∞) (𝕜 𝕜' : Type*) {ι : Type*} (α : ι → Type*) (β : ι → Type*)
+variable (p : ℝ≥0∞) (𝕜 : Type*) {ι : Type*} (α : ι → Type*) (β : ι → Type*)
/-! Note that the unapplied versions of these lemmas are deliberately omitted, as they break
the use of the type synonym. -/
@@ -554,12 +554,30 @@ theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*} (hp
simp [NNReal.coe_sum, norm_eq_sum (p.toReal_pos_iff_ne_top.mpr hp)]
#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sum
-theorem nnnorm_eq_ciSup {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
- ‖f‖₊ = ⨆ i, ‖f i‖₊ := by
+section Linfty
+variable {β}
+variable [∀ i, SeminormedAddCommGroup (β i)]
+
+theorem nnnorm_eq_ciSup (f : PiLp ∞ β) : ‖f‖₊ = ⨆ i, ‖f i‖₊ := by
ext
simp [NNReal.coe_iSup, norm_eq_ciSup]
#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSup
+@[simp] theorem nnnorm_equiv (f : PiLp ∞ β) : ‖WithLp.equiv ⊤ _ f‖₊ = ‖f‖₊ := by
+ rw [nnnorm_eq_ciSup, Pi.nnnorm_def, Finset.sup_univ_eq_ciSup]
+ dsimp only [WithLp.equiv_pi_apply]
+
+@[simp] theorem nnnorm_equiv_symm (f : ∀ i, β i) : ‖(WithLp.equiv ⊤ _).symm f‖₊ = ‖f‖₊ :=
+ (nnnorm_equiv _).symm
+
+@[simp] theorem norm_equiv (f : PiLp ∞ β) : ‖WithLp.equiv ⊤ _ f‖ = ‖f‖ :=
+ congr_arg NNReal.toReal <| nnnorm_equiv f
+
+@[simp] theorem norm_equiv_symm (f : ∀ i, β i) : ‖(WithLp.equiv ⊤ _).symm f‖ = ‖f‖ :=
+ (norm_equiv _).symm
+
+end Linfty
+
theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) := by
@@ -608,32 +626,33 @@ theorem edist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
-variable [NormedField 𝕜] [NormedField 𝕜']
+instance instboundedSMul [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
+ [∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] :
+ BoundedSMul 𝕜 (PiLp p β) :=
+ .of_nnnorm_smul_le fun c f => by
+ rcases p.dichotomy with (rfl | hp)
+ · rw [← nnnorm_equiv, ← nnnorm_equiv, WithLp.equiv_smul]
+ exact nnnorm_smul_le c (WithLp.equiv ∞ (∀ i, β i) f)
+ · have hp0 : 0 < p.toReal := zero_lt_one.trans_le hp
+ have hpt : p ≠ ⊤ := p.toReal_pos_iff_ne_top.mp hp0
+ rw [nnnorm_eq_sum hpt, nnnorm_eq_sum hpt, NNReal.rpow_one_div_le_iff hp0, NNReal.mul_rpow,
+ ← NNReal.rpow_mul, div_mul_cancel 1 hp0.ne', NNReal.rpow_one, Finset.mul_sum]
+ -- Porting note: added to replace Pi.smul_apply
+ have smul_apply : ∀ i : ι, (c • f) i = c • (f i) := fun i => rfl
+ simp_rw [← NNReal.mul_rpow, smul_apply]
+ exact Finset.sum_le_sum fun i _ => NNReal.rpow_le_rpow (nnnorm_smul_le _ _) hp0.le
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
-instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
- NormedSpace 𝕜 (PiLp p β) :=
- { norm_smul_le := fun c f => by
- rcases p.dichotomy with (rfl | hp)
- · letI : Module 𝕜 (PiLp ∞ β) := Pi.module ι β 𝕜
- suffices ‖c • f‖₊ = ‖c‖₊ * ‖f‖₊ from mod_cast NNReal.coe_mono this.le
- simp only [nnnorm_eq_ciSup, NNReal.mul_iSup, ← nnnorm_smul]
- -- Porting note: added
- congr
- · have : p.toReal * (1 / p.toReal) = 1 := mul_div_cancel' 1 (zero_lt_one.trans_le hp).ne'
- -- Porting note: added to replace Pi.smul_apply
- have smul_apply : ∀ i : ι, (c • f) i = c • (f i) := fun i => rfl
- simp only [norm_eq_sum (zero_lt_one.trans_le hp), norm_smul, Real.mul_rpow, norm_nonneg, ←
- Finset.mul_sum, smul_apply]
- rw [mul_rpow (rpow_nonneg (norm_nonneg _) _), ← rpow_mul (norm_nonneg _), this,
- Real.rpow_one]
- exact Finset.sum_nonneg fun i _ => rpow_nonneg (norm_nonneg _) _ }
+instance normedSpace [NormedField 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
+ [∀ i, NormedSpace 𝕜 (β i)] : NormedSpace 𝕜 (PiLp p β) where
+ norm_smul_le := norm_smul_le
#align pi_Lp.normed_space PiLp.normedSpace
/- Register simplification lemmas for the applications of `PiLp` elements, as the usual lemmas
for Pi types will not trigger. -/
-variable {𝕜 𝕜' p α}
-variable [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] (c : 𝕜)
+variable {𝕜 p α}
+variable [SeminormedRing 𝕜] [∀ i, SeminormedAddCommGroup (β i)]
+variable [∀ i, Module 𝕜 (β i)] [∀ i, BoundedSMul 𝕜 (β i)] (c : 𝕜)
variable (x y : PiLp p β) (x' y' : ∀ i, β i) (i : ι)
@@ -666,17 +685,9 @@ theorem neg_apply : (-x) i = -x i :=
equivalence. -/
def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
{ WithLp.equiv ∞ (∀ i, β i) with
- map_add' := fun f g => rfl
- map_smul' := fun c f => rfl
- norm_map' := fun f => by
- suffices (Finset.univ.sup fun i => ‖f i‖₊) = ⨆ i, ‖f i‖₊ by
- simpa only [NNReal.coe_iSup] using congr_arg ((↑) : ℝ≥0 → ℝ) this
- refine'
- antisymm (Finset.sup_le fun i _ => le_ciSup (Finite.bddAbove_range fun i => ‖f i‖₊) _) _
- cases isEmpty_or_nonempty ι
- · simp only [ciSup_of_empty, Finset.univ_eq_empty, Finset.sup_empty, le_rfl]
- · -- Porting note: `Finset.le_sup` needed some helps
- exact ciSup_le fun i => Finset.le_sup (f := fun k => ‖f k‖₊) (Finset.mem_univ i) }
+ map_add' := fun _f _g => rfl
+ map_smul' := fun _c _f => rfl
+ norm_map' := norm_equiv }
#align pi_Lp.equivₗᵢ PiLp.equivₗᵢ
variable {ι' : Type*}
@@ -684,7 +695,7 @@ variable {ι' : Type*}
variable [Fintype ι']
variable (p 𝕜)
-variable (E : Type*) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
+variable (E : Type*) [NormedAddCommGroup E] [Module 𝕜 E] [BoundedSMul 𝕜 E]
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
@@ -909,7 +920,8 @@ theorem basisFun_map :
open Matrix
-nonrec theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜))
+nonrec theorem basis_toMatrix_basisFun_mul
+ {𝕜} [SeminormedCommRing 𝕜] (b : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜))
(A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) * A =
Matrix.of fun i j => b.repr ((WithLp.equiv _ _).symm (Aᵀ j)) i := by
@@ -309,7 +309,7 @@ use outside this file. -/
theorem iSup_edist_ne_top_aux {ι : Type*} [Finite ι] {α : ι → Type*}
[∀ i, PseudoMetricSpace (α i)] (f g : PiLp ∞ α) : (⨆ i, edist (f i) (g i)) ≠ ⊤ := by
cases nonempty_fintype ι
- obtain ⟨M, hM⟩ := Fintype.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
+ obtain ⟨M, hM⟩ := Finite.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
refine' ne_of_lt ((iSup_le fun i => _).trans_lt (@ENNReal.coe_lt_top M))
simp only [edist, PseudoMetricSpace.edist_dist, ENNReal.ofReal_eq_coe_nnreal dist_nonneg]
exact mod_cast hM i
@@ -353,7 +353,7 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
rw [PseudoMetricSpace.edist_dist]
-- Porting note: `le_ciSup` needed some help
exact ENNReal.ofReal_le_ofReal
- (le_ciSup (Fintype.bddAbove_range (fun k => dist (f k) (g k))) i)
+ (le_ciSup (Finite.bddAbove_range (fun k => dist (f k) (g k))) i)
· have A : ∀ i, edist (f i) (g i) ^ p.toReal ≠ ⊤ := fun i =>
ENNReal.rpow_ne_top_of_nonneg (zero_le_one.trans h) (edist_ne_top _ _)
simp only [edist_eq_sum (zero_lt_one.trans_le h), dist_edist, ENNReal.toReal_rpow,
@@ -672,7 +672,7 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
suffices (Finset.univ.sup fun i => ‖f i‖₊) = ⨆ i, ‖f i‖₊ by
simpa only [NNReal.coe_iSup] using congr_arg ((↑) : ℝ≥0 → ℝ) this
refine'
- antisymm (Finset.sup_le fun i _ => le_ciSup (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
+ antisymm (Finset.sup_le fun i _ => le_ciSup (Finite.bddAbove_range fun i => ‖f i‖₊) _) _
cases isEmpty_or_nonempty ι
· simp only [ciSup_of_empty, Finset.univ_eq_empty, Finset.sup_empty, le_rfl]
· -- Porting note: `Finset.le_sup` needed some helps
rpow_nonneg_of_nonneg
to rpow_nonneg
(#9518)
This better matches other lemma names.
From LeanAPAP
@@ -625,9 +625,9 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
have smul_apply : ∀ i : ι, (c • f) i = c • (f i) := fun i => rfl
simp only [norm_eq_sum (zero_lt_one.trans_le hp), norm_smul, Real.mul_rpow, norm_nonneg, ←
Finset.mul_sum, smul_apply]
- rw [mul_rpow (rpow_nonneg_of_nonneg (norm_nonneg _) _), ← rpow_mul (norm_nonneg _), this,
+ rw [mul_rpow (rpow_nonneg (norm_nonneg _) _), ← rpow_mul (norm_nonneg _), this,
Real.rpow_one]
- exact Finset.sum_nonneg fun i _ => rpow_nonneg_of_nonneg (norm_nonneg _) _ }
+ exact Finset.sum_nonneg fun i _ => rpow_nonneg (norm_nonneg _) _ }
#align pi_Lp.normed_space PiLp.normedSpace
/- Register simplification lemmas for the applications of `PiLp` elements, as the usual lemmas
Following on from previous gcongr
golfing PRs #4702 and #4784.
This is a replacement for #7901: this round of golfs, first introduced there, there exposed some performance issues in gcongr
, hopefully fixed by #8731, and I am opening a new PR so that the performance can be checked against current master rather than master at the time of #7901.
@@ -293,9 +293,8 @@ def pseudoEmetricAux : PseudoEMetricSpace (PiLp p β) where
calc
(∑ i, edist (f i) (h i) ^ p.toReal) ^ (1 / p.toReal) ≤
(∑ i, (edist (f i) (g i) + edist (g i) (h i)) ^ p.toReal) ^ (1 / p.toReal) := by
- apply ENNReal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans hp)
- refine' Finset.sum_le_sum fun i _ => _
- exact ENNReal.rpow_le_rpow (edist_triangle _ _ _) (zero_le_one.trans hp)
+ gcongr
+ apply edist_triangle
_ ≤
(∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal) +
(∑ i, edist (g i) (h i) ^ p.toReal) ^ (1 / p.toReal) :=
@@ -377,7 +376,7 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (WithLp.equiv p (∀ i, β i))
edist (x i) (y i) = (edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) := by
simp [← ENNReal.rpow_mul, cancel, -one_div]
_ ≤ (∑ i, edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) := by
- apply ENNReal.rpow_le_rpow _ (one_div_nonneg.2 <| zero_le_one.trans h)
+ gcongr
exact Finset.single_le_sum (fun i _ => (bot_le : (0 : ℝ≥0∞) ≤ _)) (Finset.mem_univ i)
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
@@ -397,9 +396,7 @@ theorem antilipschitzWith_equiv_aux :
calc
(∑ i, edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) ≤
(∑ _i, edist (WithLp.equiv p _ x) (WithLp.equiv p _ y) ^ p.toReal) ^ (1 / p.toReal) := by
- refine ENNReal.rpow_le_rpow ?_ nonneg
- refine Finset.sum_le_sum fun i _ => ?_
- apply ENNReal.rpow_le_rpow _ (le_of_lt pos)
+ gcongr with i
exact Finset.le_sup (f := fun i => edist (x i) (y i)) (Finset.mem_univ i)
_ =
((Fintype.card ι : ℝ≥0) ^ (1 / p.toReal) : ℝ≥0) *
exact_mod_cast
tactic with mod_cast
elaborator where possible (#8404)
We still have the exact_mod_cast
tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast
are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -313,7 +313,7 @@ theorem iSup_edist_ne_top_aux {ι : Type*} [Finite ι] {α : ι → Type*}
obtain ⟨M, hM⟩ := Fintype.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
refine' ne_of_lt ((iSup_le fun i => _).trans_lt (@ENNReal.coe_lt_top M))
simp only [edist, PseudoMetricSpace.edist_dist, ENNReal.ofReal_eq_coe_nnreal dist_nonneg]
- exact_mod_cast hM i
+ exact mod_cast hM i
#align pi_Lp.supr_edist_ne_top_aux PiLp.iSup_edist_ne_top_aux
/-- Endowing the space `PiLp p α` with the `L^p` pseudometric structure. This definition is not
@@ -619,7 +619,7 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
{ norm_smul_le := fun c f => by
rcases p.dichotomy with (rfl | hp)
· letI : Module 𝕜 (PiLp ∞ β) := Pi.module ι β 𝕜
- suffices ‖c • f‖₊ = ‖c‖₊ * ‖f‖₊ by exact_mod_cast NNReal.coe_mono this.le
+ suffices ‖c • f‖₊ = ‖c‖₊ * ‖f‖₊ from mod_cast NNReal.coe_mono this.le
simp only [nnnorm_eq_ciSup, NNReal.mul_iSup, ← nnnorm_smul]
-- Porting note: added
congr
@@ -758,8 +758,8 @@ theorem nnnorm_equiv_symm_single [hp : Fact (1 ≤ p)] (i : ι) (b : β i) :
exact zero_le _
· rw [Pi.single_eq_same]
| coe p =>
- have hp0 : (p : ℝ) ≠ 0 := by
- exact_mod_cast (zero_lt_one.trans_le <| Fact.out (p := 1 ≤ (p : ℝ≥0∞))).ne'
+ have hp0 : (p : ℝ) ≠ 0 :=
+ mod_cast (zero_lt_one.trans_le <| Fact.out (p := 1 ≤ (p : ℝ≥0∞))).ne'
rw [nnnorm_eq_sum ENNReal.coe_ne_top, ENNReal.coe_toReal, Fintype.sum_eq_single i,
WithLp.equiv_symm_pi_apply, Pi.single_eq_same, ← NNReal.rpow_mul, one_div, mul_inv_cancel hp0,
NNReal.rpow_one]
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -64,8 +64,6 @@ We also set up the theory for `PseudoEMetricSpace` and `PseudoMetricSpace`.
set_option linter.uppercaseLean3 false
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
-
open Real Set Filter IsROrC Bornology BigOperators Uniformity Topology NNReal ENNReal
noncomputable section
@@ -574,7 +572,7 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*}
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
theorem norm_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
- ‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) := by
+ ‖x‖ = Real.sqrt (∑ i : ι, ‖x i‖ ^ 2) := by
rw [norm_eq_of_nat 2 (by norm_cast) _] -- Porting note: was `convert`
rw [Real.sqrt_eq_rpow]
norm_cast
Use .asFn
and .lemmasOnly
as simps
configuration options.
For reference, these are defined here:
@@ -869,7 +869,7 @@ theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [O
variable (𝕜 p)
/-- `WithLp.equiv` as a continuous linear equivalence. -/
-@[simps! (config := { fullyApplied := false }) apply symm_apply]
+@[simps! (config := .asFn) apply symm_apply]
protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i where
toLinearEquiv := WithLp.linearEquiv _ _ _
continuous_toFun := continuous_equiv _ _
p = 0
in piLp
(#8290)
The current definition of the distance in piLp
uses the distance for p > 0
, but avoids it for p = 0
. We change the definition for p = 0
to also have it in terms of the distance, to make sure it is reasonable even when one uses non-Hausdorff spaces.This matches what has been done for prodLp
in #6136.
@@ -19,8 +19,8 @@ is given by
$$
d(x, y) = \left(\sum d(x_i, y_i)^p\right)^{1/p}.
$$,
-whereas for `p = 0` it is the cardinality of the set ${ i | x_i ≠ y_i}$. For `p = ∞` the distance
-is the supremum of the distances.
+whereas for `p = 0` it is the cardinality of the set ${i | d (x_i, y_i) ≠ 0}$. For `p = ∞` the
+distance is the supremum of the distances.
We give instances of this construction for emetric spaces, metric spaces, normed groups and normed
spaces.
@@ -129,13 +129,14 @@ satisfying a relaxed triangle inequality. The terminology for this varies throug
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
instance : EDist (PiLp p β) where
edist f g :=
- if p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
+ if p = 0 then {i | edist (f i) (g i) ≠ 0}.toFinite.toFinset.card
else
if p = ∞ then ⨆ i, edist (f i) (g i) else (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal)
variable {β}
-theorem edist_eq_card (f g : PiLp 0 β) : edist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
+theorem edist_eq_card (f g : PiLp 0 β) :
+ edist f g = {i | edist (f i) (g i) ≠ 0}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.edist_eq_card PiLp.edist_eq_card
@@ -170,7 +171,7 @@ protected theorem edist_self (f : PiLp p β) : edist f f = 0 := by
from `pi_Lp.pseudo_emetric_space` so it can be used also for `p < 1`. -/
protected theorem edist_comm (f g : PiLp p β) : edist f g = edist g f := by
rcases p.trichotomy with (rfl | rfl | h)
- · simp only [edist_eq_card, eq_comm, Ne.def]
+ · simp only [edist_eq_card, edist_comm]
· simp only [edist_eq_iSup, edist_comm]
· simp only [edist_eq_sum h, edist_comm]
#align pi_Lp.edist_comm PiLp.edist_comm
@@ -190,13 +191,14 @@ satisfying a relaxed triangle inequality. The terminology for this varies throug
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
instance : Dist (PiLp p α) where
dist f g :=
- if _hp : p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
+ if p = 0 then {i | dist (f i) (g i) ≠ 0}.toFinite.toFinset.card
else
if p = ∞ then ⨆ i, dist (f i) (g i) else (∑ i, dist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal)
variable {α}
-theorem dist_eq_card (f g : PiLp 0 α) : dist f g = { i | f i ≠ g i }.toFinite.toFinset.card :=
+theorem dist_eq_card (f g : PiLp 0 α) :
+ dist f g = {i | dist (f i) (g i) ≠ 0}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.dist_eq_card PiLp.dist_eq_card
@@ -215,7 +217,7 @@ end Dist
section Norm
-variable [∀ i, Norm (β i)] [∀ i, Zero (β i)]
+variable [∀ i, Norm (β i)]
/-- Endowing the space `PiLp p β` with the `L^p` norm. We register this instance
separate from `PiLp.seminormedAddCommGroup` since the latter requires the type class hypothesis
@@ -225,13 +227,13 @@ Registering this separately allows for a future norm-like structure on `PiLp p
satisfying a relaxed triangle inequality. These are called *quasi-norms*. -/
instance hasNorm : Norm (PiLp p β) where
norm f :=
- if _hp : p = 0 then { i | f i ≠ 0 }.toFinite.toFinset.card
+ if p = 0 then {i | ‖f i‖ ≠ 0}.toFinite.toFinset.card
else if p = ∞ then ⨆ i, ‖f i‖ else (∑ i, ‖f i‖ ^ p.toReal) ^ (1 / p.toReal)
#align pi_Lp.has_norm PiLp.hasNorm
variable {p β}
-theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = { i | f i ≠ 0 }.toFinite.toFinset.card :=
+theorem norm_eq_card (f : PiLp 0 β) : ‖f‖ = {i | ‖f i‖ ≠ 0}.toFinite.toFinset.card :=
if_pos rfl
#align pi_Lp.norm_eq_card PiLp.norm_eq_card
@@ -129,8 +129,7 @@ satisfying a relaxed triangle inequality. The terminology for this varies throug
literature, but it is sometimes called a *quasi-metric* or *semi-metric*. -/
instance : EDist (PiLp p β) where
edist f g :=
- -- Porting note: can we drop the `_hp` entirely?
- if _hp : p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
+ if p = 0 then { i | f i ≠ g i }.toFinite.toFinset.card
else
if p = ∞ then ⨆ i, edist (f i) (g i) else (∑ i, edist (f i) (g i) ^ p.toReal) ^ (1 / p.toReal)
@@ -399,7 +399,6 @@ theorem antilipschitzWith_equiv_aux :
(∑ i, edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) ≤
(∑ _i, edist (WithLp.equiv p _ x) (WithLp.equiv p _ y) ^ p.toReal) ^ (1 / p.toReal) := by
refine ENNReal.rpow_le_rpow ?_ nonneg
- swap
refine Finset.sum_le_sum fun i _ => ?_
apply ENNReal.rpow_le_rpow _ (le_of_lt pos)
exact Finset.le_sup (f := fun i => edist (x i) (y i)) (Finset.mem_univ i)
This removes the (PiLp.equiv 2 fun i => α i)
abbreviation, replacing it with its implementation (WithLp.equiv 2 (∀ i, α i))
. The same thing is done for PiLp.linearEquiv
.
@@ -89,23 +89,19 @@ namespace PiLp
variable (p : ℝ≥0∞) (𝕜 𝕜' : Type*) {ι : Type*} (α : ι → Type*) (β : ι → Type*)
-/-- Canonical bijection between `PiLp p α` and the original Pi type. We introduce it to be able
-to compare the `L^p` and `L^∞` distances through it. -/
-abbrev equiv : PiLp p α ≃ ∀ i : ι, α i := WithLp.equiv _ _
-#align pi_Lp.equiv PiLp.equiv
-
/-! Note that the unapplied versions of these lemmas are deliberately omitted, as they break
the use of the type synonym. -/
@[simp]
-theorem equiv_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
+theorem _root_.WithLp.equiv_pi_apply (x : PiLp p α) (i : ι) : WithLp.equiv p _ x i = x i :=
rfl
-#align pi_Lp.equiv_apply PiLp.equiv_apply
+#align pi_Lp.equiv_apply WithLp.equiv_pi_apply
@[simp]
-theorem equiv_symm_apply (x : ∀ i, α i) (i : ι) : (PiLp.equiv p α).symm x i = x i :=
+theorem _root_.WithLp.equiv_symm_pi_apply (x : ∀ i, α i) (i : ι) :
+ (WithLp.equiv p _).symm x i = x i :=
rfl
-#align pi_Lp.equiv_symm_apply PiLp.equiv_symm_apply
+#align pi_Lp.equiv_symm_apply WithLp.equiv_symm_pi_apply
section DistNorm
@@ -368,7 +364,7 @@ def pseudoMetricAux : PseudoMetricSpace (PiLp p α) :=
attribute [local instance] PiLp.pseudoMetricAux
-theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) := by
+theorem lipschitzWith_equiv_aux : LipschitzWith 1 (WithLp.equiv p (∀ i, β i)) := by
intro x y
rcases p.dichotomy with (rfl | h)
· simpa only [ENNReal.coe_one, one_mul, edist_eq_iSup, edist, Finset.sup_le_iff, Finset.mem_univ,
@@ -387,7 +383,7 @@ theorem lipschitzWith_equiv_aux : LipschitzWith 1 (PiLp.equiv p β) := by
#align pi_Lp.lipschitz_with_equiv_aux PiLp.lipschitzWith_equiv_aux
theorem antilipschitzWith_equiv_aux :
- AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) := by
+ AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (WithLp.equiv p (∀ i, β i)) := by
intro x y
rcases p.dichotomy with (rfl | h)
· simp only [edist_eq_iSup, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero,
@@ -401,7 +397,7 @@ theorem antilipschitzWith_equiv_aux :
simp only [edist, ← one_div, ENNReal.one_toReal]
calc
(∑ i, edist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) ≤
- (∑ _i, edist (PiLp.equiv p β x) (PiLp.equiv p β y) ^ p.toReal) ^ (1 / p.toReal) := by
+ (∑ _i, edist (WithLp.equiv p _ x) (WithLp.equiv p _ y) ^ p.toReal) ^ (1 / p.toReal) := by
refine ENNReal.rpow_le_rpow ?_ nonneg
swap
refine Finset.sum_le_sum fun i _ => ?_
@@ -409,7 +405,7 @@ theorem antilipschitzWith_equiv_aux :
exact Finset.le_sup (f := fun i => edist (x i) (y i)) (Finset.mem_univ i)
_ =
((Fintype.card ι : ℝ≥0) ^ (1 / p.toReal) : ℝ≥0) *
- edist (PiLp.equiv p β x) (PiLp.equiv p β y) := by
+ edist (WithLp.equiv p _ x) (WithLp.equiv p _ y) := by
simp only [nsmul_eq_mul, Finset.card_univ, ENNReal.rpow_one, Finset.sum_const,
ENNReal.mul_rpow_of_nonneg _ _ nonneg, ← ENNReal.rpow_mul, cancel]
have : (Fintype.card ι : ℝ≥0∞) = (Fintype.card ι : ℝ≥0) :=
@@ -418,17 +414,17 @@ theorem antilipschitzWith_equiv_aux :
#align pi_Lp.antilipschitz_with_equiv_aux PiLp.antilipschitzWith_equiv_aux
theorem aux_uniformity_eq : 𝓤 (PiLp p β) = 𝓤[Pi.uniformSpace _] := by
- have A : UniformInducing (PiLp.equiv p β) :=
+ have A : UniformInducing (WithLp.equiv p (∀ i, β i)) :=
(antilipschitzWith_equiv_aux p β).uniformInducing
(lipschitzWith_equiv_aux p β).uniformContinuous
- have : (fun x : PiLp p β × PiLp p β => ((PiLp.equiv p β) x.fst, (PiLp.equiv p β) x.snd)) = id :=
+ have : (fun x : PiLp p β × PiLp p β => (WithLp.equiv p _ x.fst, WithLp.equiv p _ x.snd)) = id :=
by ext i <;> rfl
rw [← A.comap_uniformity, this, comap_id]
#align pi_Lp.aux_uniformity_eq PiLp.aux_uniformity_eq
theorem aux_cobounded_eq : cobounded (PiLp p α) = @cobounded _ Pi.instBornology :=
calc
- cobounded (PiLp p α) = comap (PiLp.equiv p α) (cobounded _) :=
+ cobounded (PiLp p α) = comap (WithLp.equiv p (∀ i, α i)) (cobounded _) :=
le_antisymm (antilipschitzWith_equiv_aux p α).tendsto_cobounded.le_comap
(lipschitzWith_equiv_aux p α).comap_cobounded_le
_ = _ := comap_id
@@ -443,22 +439,24 @@ instance uniformSpace [∀ i, UniformSpace (β i)] : UniformSpace (PiLp p β) :=
Pi.uniformSpace _
#align pi_Lp.uniform_space PiLp.uniformSpace
-theorem uniformContinuous_equiv [∀ i, UniformSpace (β i)] : UniformContinuous (PiLp.equiv p β) :=
+theorem uniformContinuous_equiv [∀ i, UniformSpace (β i)] :
+ UniformContinuous (WithLp.equiv p (∀ i, β i)) :=
uniformContinuous_id
#align pi_Lp.uniform_continuous_equiv PiLp.uniformContinuous_equiv
theorem uniformContinuous_equiv_symm [∀ i, UniformSpace (β i)] :
- UniformContinuous (PiLp.equiv p β).symm :=
+ UniformContinuous (WithLp.equiv p (∀ i, β i)).symm :=
uniformContinuous_id
#align pi_Lp.uniform_continuous_equiv_symm PiLp.uniformContinuous_equiv_symm
@[continuity]
-theorem continuous_equiv [∀ i, UniformSpace (β i)] : Continuous (PiLp.equiv p β) :=
+theorem continuous_equiv [∀ i, UniformSpace (β i)] : Continuous (WithLp.equiv p (∀ i, β i)) :=
continuous_id
#align pi_Lp.continuous_equiv PiLp.continuous_equiv
@[continuity]
-theorem continuous_equiv_symm [∀ i, UniformSpace (β i)] : Continuous (PiLp.equiv p β).symm :=
+theorem continuous_equiv_symm [∀ i, UniformSpace (β i)] :
+ Continuous (WithLp.equiv p (∀ i, β i)).symm :=
continuous_id
#align pi_Lp.continuous_equiv_symm PiLp.continuous_equiv_symm
@@ -509,16 +507,18 @@ theorem nndist_eq_iSup {β : ι → Type*} [∀ i, PseudoMetricSpace (β i)] (x
exact dist_eq_iSup _ _
#align pi_Lp.nndist_eq_supr PiLp.nndist_eq_iSup
-theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] : LipschitzWith 1 (PiLp.equiv p β) :=
+theorem lipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
+ LipschitzWith 1 (WithLp.equiv p (∀ i, β i)) :=
lipschitzWith_equiv_aux p β
#align pi_Lp.lipschitz_with_equiv PiLp.lipschitzWith_equiv
theorem antilipschitzWith_equiv [∀ i, PseudoEMetricSpace (β i)] :
- AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (PiLp.equiv p β) :=
+ AntilipschitzWith ((Fintype.card ι : ℝ≥0) ^ (1 / p).toReal) (WithLp.equiv p (∀ i, β i)) :=
antilipschitzWith_equiv_aux p β
#align pi_Lp.antilipschitz_with_equiv PiLp.antilipschitzWith_equiv
-theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] : Isometry (PiLp.equiv ∞ β) :=
+theorem infty_equiv_isometry [∀ i, PseudoEMetricSpace (β i)] :
+ Isometry (WithLp.equiv ∞ (∀ i, β i)) :=
fun x y =>
le_antisymm (by simpa only [ENNReal.coe_one, one_mul] using lipschitzWith_equiv ∞ β x y)
(by
@@ -667,10 +667,10 @@ theorem neg_apply : (-x) i = -x i :=
rfl
#align pi_Lp.neg_apply PiLp.neg_apply
-/-- The canonical map `PiLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
+/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
equivalence. -/
def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
- { PiLp.equiv ∞ β with
+ { WithLp.equiv ∞ (∀ i, β i) with
map_add' := fun f g => rfl
map_smul' := fun c f => rfl
norm_map' := fun f => by
@@ -731,8 +731,8 @@ theorem _root_.LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
@[simp high]
theorem _root_.LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι']
(e : ι ≃ ι') (i : ι) (v : E) :
- LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e ((PiLp.equiv p fun _ => E).symm <| Pi.single i v) =
- (PiLp.equiv p fun _ => E).symm (Pi.single (e i) v) := by
+ LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e ((WithLp.equiv p (_ → E)).symm <| Pi.single i v) =
+ (WithLp.equiv p (_ → E)).symm (Pi.single (e i) v) := by
funext x
simp [LinearIsometryEquiv.piLpCongrLeft_apply, LinearEquiv.piCongrLeft', Equiv.piCongrLeft',
Pi.single, Function.update, Equiv.symm_apply_eq]
@@ -747,12 +747,12 @@ variable [DecidableEq ι]
-- Porting note: added `hp`
@[simp]
theorem nnnorm_equiv_symm_single [hp : Fact (1 ≤ p)] (i : ι) (b : β i) :
- ‖(PiLp.equiv p β).symm (Pi.single i b)‖₊ = ‖b‖₊ := by
+ ‖(WithLp.equiv p (∀ i, β i)).symm (Pi.single i b)‖₊ = ‖b‖₊ := by
clear x y -- Porting note: added
haveI : Nonempty ι := ⟨i⟩
induction p using ENNReal.recTopCoe generalizing hp with
| top =>
- simp_rw [nnnorm_eq_ciSup, equiv_symm_apply]
+ simp_rw [nnnorm_eq_ciSup, WithLp.equiv_symm_pi_apply]
refine' ciSup_eq_of_forall_le_of_forall_lt_exists_gt (fun j => _) fun n hn => ⟨i, hn.trans_eq _⟩
· obtain rfl | hij := Decidable.eq_or_ne i j
· rw [Pi.single_eq_same]
@@ -763,20 +763,23 @@ theorem nnnorm_equiv_symm_single [hp : Fact (1 ≤ p)] (i : ι) (b : β i) :
have hp0 : (p : ℝ) ≠ 0 := by
exact_mod_cast (zero_lt_one.trans_le <| Fact.out (p := 1 ≤ (p : ℝ≥0∞))).ne'
rw [nnnorm_eq_sum ENNReal.coe_ne_top, ENNReal.coe_toReal, Fintype.sum_eq_single i,
- equiv_symm_apply, Pi.single_eq_same, ← NNReal.rpow_mul, one_div, mul_inv_cancel hp0,
+ WithLp.equiv_symm_pi_apply, Pi.single_eq_same, ← NNReal.rpow_mul, one_div, mul_inv_cancel hp0,
NNReal.rpow_one]
intro j hij
- rw [equiv_symm_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
+ rw [WithLp.equiv_symm_pi_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
#align pi_Lp.nnnorm_equiv_symm_single PiLp.nnnorm_equiv_symm_single
@[simp]
-theorem norm_equiv_symm_single (i : ι) (b : β i) : ‖(PiLp.equiv p β).symm (Pi.single i b)‖ = ‖b‖ :=
+theorem norm_equiv_symm_single (i : ι) (b : β i) :
+ ‖(WithLp.equiv p (∀ i, β i)).symm (Pi.single i b)‖ = ‖b‖ :=
congr_arg ((↑) : ℝ≥0 → ℝ) <| nnnorm_equiv_symm_single p β i b
#align pi_Lp.norm_equiv_symm_single PiLp.norm_equiv_symm_single
@[simp]
theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
- nndist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
+ nndist
+ ((WithLp.equiv p (∀ i, β i)).symm (Pi.single i b₁))
+ ((WithLp.equiv p (∀ i, β i)).symm (Pi.single i b₂)) =
nndist b₁ b₂ := by
rw [nndist_eq_nnnorm, nndist_eq_nnnorm, ← WithLp.equiv_symm_sub, ← Pi.single_sub,
nnnorm_equiv_symm_single]
@@ -784,14 +787,18 @@ theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
@[simp]
theorem dist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
- dist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
+ dist
+ ((WithLp.equiv p (∀ i, β i)).symm (Pi.single i b₁))
+ ((WithLp.equiv p (∀ i, β i)).symm (Pi.single i b₂)) =
dist b₁ b₂ :=
congr_arg ((↑) : ℝ≥0 → ℝ) <| nndist_equiv_symm_single_same p β i b₁ b₂
#align pi_Lp.dist_equiv_symm_single_same PiLp.dist_equiv_symm_single_same
@[simp]
theorem edist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
- edist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
+ edist
+ ((WithLp.equiv p (∀ i, β i)).symm (Pi.single i b₁))
+ ((WithLp.equiv p (∀ i, β i)).symm (Pi.single i b₂)) =
edist b₁ b₂ := by
-- Porting note: was `simpa using`
simp only [edist_nndist, nndist_equiv_symm_single_same p β i b₁ b₂]
@@ -804,12 +811,12 @@ the left-hand side simplifies to `0`, while the right-hand side simplifies to `
`PiLp.nnnorm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
`Nonempty ι`. -/
theorem nnnorm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) (b : β) :
- ‖(PiLp.equiv p fun _ : ι => β).symm (Function.const _ b)‖₊ =
+ ‖(WithLp.equiv p (ι → β)).symm (Function.const _ b)‖₊ =
(Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖b‖₊ := by
rcases p.dichotomy with (h | h)
· exact False.elim (hp h)
· have ne_zero : p.toReal ≠ 0 := (zero_lt_one.trans_le h).ne'
- simp_rw [nnnorm_eq_sum hp, equiv_symm_apply, Function.const_apply, Finset.sum_const,
+ simp_rw [nnnorm_eq_sum hp, WithLp.equiv_symm_pi_apply, Function.const_apply, Finset.sum_const,
Finset.card_univ, nsmul_eq_mul, NNReal.mul_rpow, ← NNReal.rpow_mul,
mul_one_div_cancel ne_zero, NNReal.rpow_one, ENNReal.toReal_div, ENNReal.one_toReal]
#align pi_Lp.nnnorm_equiv_symm_const PiLp.nnnorm_equiv_symm_const
@@ -819,12 +826,12 @@ the left-hand side simplifies to `0`, while the right-hand side simplifies to `
`PiLp.nnnorm_equiv_symm_const` for a version which exchanges the hypothesis `Nonempty ι`.
for `p ≠ ∞`. -/
theorem nnnorm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι] (b : β) :
- ‖(PiLp.equiv p fun _ : ι => β).symm (Function.const _ b)‖₊ =
+ ‖(WithLp.equiv p (ι → β)).symm (Function.const _ b)‖₊ =
(Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖b‖₊ := by
clear x y -- Porting note: added to avoid spurious arguments
rcases em <| p = ∞ with (rfl | hp)
- · simp only [equiv_symm_apply, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero, one_mul,
- nnnorm_eq_ciSup, Function.const_apply, ciSup_const]
+ · simp only [WithLp.equiv_symm_pi_apply, ENNReal.div_top, ENNReal.zero_toReal, NNReal.rpow_zero,
+ one_mul, nnnorm_eq_ciSup, Function.const_apply, ciSup_const]
· exact nnnorm_equiv_symm_const hp b
#align pi_Lp.nnnorm_equiv_symm_const' PiLp.nnnorm_equiv_symm_const'
@@ -833,7 +840,7 @@ the left-hand side simplifies to `0`, while the right-hand side simplifies to `
`PiLp.norm_equiv_symm_const'` for a version which exchanges the hypothesis `p ≠ ∞` for
`Nonempty ι`. -/
theorem norm_equiv_symm_const {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) (b : β) :
- ‖(PiLp.equiv p fun _ : ι => β).symm (Function.const _ b)‖ =
+ ‖(WithLp.equiv p (ι → β)).symm (Function.const _ b)‖ =
(Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖b‖ :=
(congr_arg ((↑) : ℝ≥0 → ℝ) <| nnnorm_equiv_symm_const hp b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const PiLp.norm_equiv_symm_const
@@ -843,32 +850,28 @@ the left-hand side simplifies to `0`, while the right-hand side simplifies to `
`PiLp.norm_equiv_symm_const` for a version which exchanges the hypothesis `Nonempty ι`.
for `p ≠ ∞`. -/
theorem norm_equiv_symm_const' {β} [SeminormedAddCommGroup β] [Nonempty ι] (b : β) :
- ‖(PiLp.equiv p fun _ : ι => β).symm (Function.const _ b)‖ =
+ ‖(WithLp.equiv p (ι → β)).symm (Function.const _ b)‖ =
(Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖b‖ :=
(congr_arg ((↑) : ℝ≥0 → ℝ) <| nnnorm_equiv_symm_const' b).trans <| by simp
#align pi_Lp.norm_equiv_symm_const' PiLp.norm_equiv_symm_const'
theorem nnnorm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
- ‖(PiLp.equiv p fun _ : ι => β).symm 1‖₊ =
+ ‖(WithLp.equiv p (ι → β)).symm 1‖₊ =
(Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖(1 : β)‖₊ :=
(nnnorm_equiv_symm_const hp (1 : β)).trans rfl
#align pi_Lp.nnnorm_equiv_symm_one PiLp.nnnorm_equiv_symm_one
theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [One β] :
- ‖(PiLp.equiv p fun _ : ι => β).symm 1‖ = (Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖(1 : β)‖ :=
+ ‖(WithLp.equiv p (ι → β)).symm 1‖ = (Fintype.card ι : ℝ≥0) ^ (1 / p).toReal * ‖(1 : β)‖ :=
(norm_equiv_symm_const hp (1 : β)).trans rfl
#align pi_Lp.norm_equiv_symm_one PiLp.norm_equiv_symm_one
variable (𝕜 p)
-/-- `PiLp.equiv` as a linear equivalence. -/
-abbrev linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i := WithLp.linearEquiv _ _ _
-#align pi_Lp.linear_equiv PiLp.linearEquiv
-
-/-- `PiLp.equiv` as a continuous linear equivalence. -/
+/-- `WithLp.equiv` as a continuous linear equivalence. -/
@[simps! (config := { fullyApplied := false }) apply symm_apply]
protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i where
- toLinearEquiv := PiLp.linearEquiv _ _ _
+ toLinearEquiv := WithLp.linearEquiv _ _ _
continuous_toFun := continuous_equiv _ _
continuous_invFun := continuous_equiv_symm _ _
#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquiv
@@ -879,12 +882,12 @@ variable (ι)
/-- A version of `Pi.basisFun` for `PiLp`. -/
def basisFun : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜) :=
- Basis.ofEquivFun (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜)
+ Basis.ofEquivFun (WithLp.linearEquiv p 𝕜 (ι → 𝕜))
#align pi_Lp.basis_fun PiLp.basisFun
@[simp]
theorem basisFun_apply [DecidableEq ι] (i) :
- basisFun p 𝕜 ι i = (PiLp.equiv p _).symm (Pi.single i 1) := by
+ basisFun p 𝕜 ι i = (WithLp.equiv p _).symm (Pi.single i 1) := by
simp_rw [basisFun, Basis.coe_ofEquivFun, WithLp.linearEquiv_symm_apply, Pi.single]
#align pi_Lp.basis_fun_apply PiLp.basisFun_apply
@@ -894,18 +897,18 @@ theorem basisFun_repr (x : PiLp p fun _ : ι => 𝕜) (i : ι) : (basisFun p
#align pi_Lp.basis_fun_repr PiLp.basisFun_repr
@[simp]
-theorem basisFun_equivFun : (basisFun p 𝕜 ι).equivFun = PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜 :=
+theorem basisFun_equivFun : (basisFun p 𝕜 ι).equivFun = WithLp.linearEquiv p 𝕜 (ι → 𝕜) :=
Basis.equivFun_ofEquivFun _
#align pi_Lp.basis_fun_equiv_fun PiLp.basisFun_equivFun
theorem basisFun_eq_pi_basisFun :
- basisFun p 𝕜 ι = (Pi.basisFun 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜).symm :=
+ basisFun p 𝕜 ι = (Pi.basisFun 𝕜 ι).map (WithLp.linearEquiv p 𝕜 (ι → 𝕜)).symm :=
rfl
#align pi_Lp.basis_fun_eq_pi_basis_fun PiLp.basisFun_eq_pi_basisFun
@[simp]
theorem basisFun_map :
- (basisFun p 𝕜 ι).map (PiLp.linearEquiv p 𝕜 fun _ : ι => 𝕜) = Pi.basisFun 𝕜 ι :=
+ (basisFun p 𝕜 ι).map (WithLp.linearEquiv p 𝕜 (ι → 𝕜)) = Pi.basisFun 𝕜 ι :=
rfl
#align pi_Lp.basis_fun_map PiLp.basisFun_map
@@ -914,8 +917,8 @@ open Matrix
nonrec theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜))
(A : Matrix ι ι 𝕜) :
b.toMatrix (PiLp.basisFun _ _ _) * A =
- Matrix.of fun i j => b.repr ((PiLp.equiv _ _).symm (Aᵀ j)) i := by
- have := basis_toMatrix_basisFun_mul (b.map (PiLp.linearEquiv _ 𝕜 _)) A
+ Matrix.of fun i j => b.repr ((WithLp.equiv _ _).symm (Aᵀ j)) i := by
+ have := basis_toMatrix_basisFun_mul (b.map (WithLp.linearEquiv _ 𝕜 _)) A
simp_rw [← PiLp.basisFun_map p, Basis.map_repr, LinearEquiv.trans_apply,
WithLp.linearEquiv_symm_apply, Basis.toMatrix_map, Function.comp, Basis.map_apply,
LinearEquiv.symm_apply_apply] at this
@@ -597,8 +597,8 @@ theorem norm_sq_eq_of_L2 (β : ι → Type*) [∀ i, SeminormedAddCommGroup (β
theorem dist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
- simp_rw [dist_eq_norm, norm_eq_of_L2, Pi.sub_apply]
- rfl -- Porting note: `Pi.sub_apply` doesn't work
+ simp_rw [dist_eq_norm, norm_eq_of_L2]
+ rfl
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
theorem nndist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
@@ -700,10 +700,9 @@ def _root_.LinearIsometryEquiv.piLpCongrLeft (e : ι ≃ ι') :
-- Porting note: this avoids spurious `x` and `y` arguments
clear x y
rcases p.dichotomy with (rfl | h)
- · simp_rw [norm_eq_ciSup, LinearEquiv.piCongrLeft'_apply 𝕜 (fun _ : ι => E) e x' _]
+ · simp_rw [norm_eq_ciSup]
exact e.symm.iSup_congr fun _ => rfl
· simp only [norm_eq_sum (zero_lt_one.trans_le h)]
- simp_rw [LinearEquiv.piCongrLeft'_apply 𝕜 (fun _ : ι => E) e x' _]
congr 1
exact Fintype.sum_equiv e.symm _ _ fun _ => rfl
#align linear_isometry_equiv.pi_Lp_congr_left LinearIsometryEquiv.piLpCongrLeft
⬝
notation in favor of HMul
(#6487)
The main difficulty here is that *
has a slightly difference precedence to ⬝
. notably around smul
and neg
.
The other annoyance is that ↑U ⬝ A ⬝ ↑U⁻¹ : Matrix m m 𝔸
now has to be written U.val * A * (U⁻¹).val
in order to typecheck.
A downside of this change to consider: if you have a goal of A * (B * C) = (A * B) * C
, mul_assoc
now gives the illusion of matching, when in fact Matrix.mul_assoc
is needed. Previously the distinct symbol made it easy to avoid this mistake.
On the flipside, there is now no need to rewrite by Matrix.mul_eq_mul
all the time (indeed, the lemma is now removed).
@@ -914,7 +914,7 @@ open Matrix
nonrec theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜))
(A : Matrix ι ι 𝕜) :
- b.toMatrix (PiLp.basisFun _ _ _) ⬝ A =
+ b.toMatrix (PiLp.basisFun _ _ _) * A =
Matrix.of fun i j => b.repr ((PiLp.equiv _ _).symm (Aᵀ j)) i := by
have := basis_toMatrix_basisFun_mul (b.map (PiLp.linearEquiv _ 𝕜 _)) A
simp_rw [← PiLp.basisFun_map p, Basis.map_repr, LinearEquiv.trans_apply,
@@ -6,6 +6,7 @@ Authors: Sébastien Gouëzel, Jireh Loreaux
import Mathlib.Analysis.MeanInequalities
import Mathlib.Data.Fintype.Order
import Mathlib.LinearAlgebra.Matrix.Basis
+import Mathlib.Analysis.NormedSpace.WithLp
#align_import analysis.normed_space.pi_Lp from "leanprover-community/mathlib"@"9d013ad8430ddddd350cff5c3db830278ded3c79"
@@ -73,9 +74,8 @@ noncomputable section
already endowed with the `L^∞` distance, we need the type synonym to avoid confusing typeclass
resolution. Also, we let it depend on `p`, to get a whole family of type on which we can put
different distances. -/
-@[nolint unusedArguments]
-def PiLp (_p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : Type _ :=
- ∀ i : ι, α i
+abbrev PiLp (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : Type _ :=
+ WithLp p (∀ i : ι, α i)
#align pi_Lp PiLp
instance (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
@@ -91,14 +91,12 @@ variable (p : ℝ≥0∞) (𝕜 𝕜' : Type*) {ι : Type*} (α : ι → Type*)
/-- Canonical bijection between `PiLp p α` and the original Pi type. We introduce it to be able
to compare the `L^p` and `L^∞` distances through it. -/
-protected def equiv : PiLp p α ≃ ∀ i : ι, α i :=
- Equiv.refl _
+abbrev equiv : PiLp p α ≃ ∀ i : ι, α i := WithLp.equiv _ _
#align pi_Lp.equiv PiLp.equiv
/-! Note that the unapplied versions of these lemmas are deliberately omitted, as they break
the use of the type synonym. -/
-
@[simp]
theorem equiv_apply (x : PiLp p α) (i : ι) : PiLp.equiv p α x i = x i :=
rfl
@@ -617,16 +615,10 @@ theorem edist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)
variable [NormedField 𝕜] [NormedField 𝕜']
--- Porting note: added
-instance module [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
- Module 𝕜 (PiLp p β) :=
- { Pi.module ι β 𝕜 with }
-
/-- The product of finitely many normed spaces is a normed space, with the `L^p` norm. -/
instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)] :
NormedSpace 𝕜 (PiLp p β) :=
- { module p 𝕜 β with
- norm_smul_le := fun c f => by
+ { norm_smul_le := fun c f => by
rcases p.dichotomy with (rfl | hp)
· letI : Module 𝕜 (PiLp ∞ β) := Pi.module ι β 𝕜
suffices ‖c • f‖₊ = ‖c‖₊ * ‖f‖₊ by exact_mod_cast NNReal.coe_mono this.le
@@ -643,21 +635,6 @@ instance normedSpace [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace
exact Finset.sum_nonneg fun i _ => rpow_nonneg_of_nonneg (norm_nonneg _) _ }
#align pi_Lp.normed_space PiLp.normedSpace
-instance isScalarTower [∀ i, SeminormedAddCommGroup (β i)] [SMul 𝕜 𝕜'] [∀ i, NormedSpace 𝕜 (β i)]
- [∀ i, NormedSpace 𝕜' (β i)] [∀ i, IsScalarTower 𝕜 𝕜' (β i)] : IsScalarTower 𝕜 𝕜' (PiLp p β) :=
- Pi.isScalarTower
-#align pi_Lp.is_scalar_tower PiLp.isScalarTower
-
-instance smulCommClass [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
- [∀ i, NormedSpace 𝕜' (β i)] [∀ i, SMulCommClass 𝕜 𝕜' (β i)] : SMulCommClass 𝕜 𝕜' (PiLp p β) :=
- Pi.smulCommClass
-#align pi_Lp.smul_comm_class PiLp.smulCommClass
-
-instance finiteDimensional [∀ i, SeminormedAddCommGroup (β i)] [∀ i, NormedSpace 𝕜 (β i)]
- [∀ i, FiniteDimensional 𝕜 (β i)] : FiniteDimensional 𝕜 (PiLp p β) :=
- FiniteDimensional.finiteDimensional_pi' _ _
-#align pi_Lp.finite_dimensional PiLp.finiteDimensional
-
/- Register simplification lemmas for the applications of `PiLp` elements, as the usual lemmas
for Pi types will not trigger. -/
variable {𝕜 𝕜' p α}
@@ -746,7 +723,7 @@ theorem _root_.LinearIsometryEquiv.piLpCongrLeft_symm (e : ι ≃ ι') :
LinearIsometryEquiv.ext fun z => by -- porting note: was `rfl`
simp only [LinearIsometryEquiv.piLpCongrLeft, LinearIsometryEquiv.symm,
LinearIsometryEquiv.coe_mk]
- unfold PiLp
+ unfold PiLp WithLp
ext
simp only [LinearEquiv.piCongrLeft'_symm_apply, eq_rec_constant,
LinearEquiv.piCongrLeft'_apply, Equiv.symm_symm_apply]
@@ -762,58 +739,6 @@ theorem _root_.LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [Decida
Pi.single, Function.update, Equiv.symm_apply_eq]
#align linear_isometry_equiv.pi_Lp_congr_left_single LinearIsometryEquiv.piLpCongrLeft_single
-@[simp]
-theorem equiv_zero : PiLp.equiv p β 0 = 0 :=
- rfl
-#align pi_Lp.equiv_zero PiLp.equiv_zero
-
-@[simp]
-theorem equiv_symm_zero : (PiLp.equiv p β).symm 0 = 0 :=
- rfl
-#align pi_Lp.equiv_symm_zero PiLp.equiv_symm_zero
-
-@[simp]
-theorem equiv_add : PiLp.equiv p β (x + y) = PiLp.equiv p β x + PiLp.equiv p β y :=
- rfl
-#align pi_Lp.equiv_add PiLp.equiv_add
-
-@[simp]
-theorem equiv_symm_add :
- (PiLp.equiv p β).symm (x' + y') = (PiLp.equiv p β).symm x' + (PiLp.equiv p β).symm y' :=
- rfl
-#align pi_Lp.equiv_symm_add PiLp.equiv_symm_add
-
-@[simp]
-theorem equiv_sub : PiLp.equiv p β (x - y) = PiLp.equiv p β x - PiLp.equiv p β y :=
- rfl
-#align pi_Lp.equiv_sub PiLp.equiv_sub
-
-@[simp]
-theorem equiv_symm_sub :
- (PiLp.equiv p β).symm (x' - y') = (PiLp.equiv p β).symm x' - (PiLp.equiv p β).symm y' :=
- rfl
-#align pi_Lp.equiv_symm_sub PiLp.equiv_symm_sub
-
-@[simp]
-theorem equiv_neg : PiLp.equiv p β (-x) = -PiLp.equiv p β x :=
- rfl
-#align pi_Lp.equiv_neg PiLp.equiv_neg
-
-@[simp]
-theorem equiv_symm_neg : (PiLp.equiv p β).symm (-x') = -(PiLp.equiv p β).symm x' :=
- rfl
-#align pi_Lp.equiv_symm_neg PiLp.equiv_symm_neg
-
-@[simp]
-theorem equiv_smul : PiLp.equiv p β (c • x) = c • PiLp.equiv p β x :=
- rfl
-#align pi_Lp.equiv_smul PiLp.equiv_smul
-
-@[simp]
-theorem equiv_symm_smul : (PiLp.equiv p β).symm (c • x') = c • (PiLp.equiv p β).symm x' :=
- rfl
-#align pi_Lp.equiv_symm_smul PiLp.equiv_symm_smul
-
section Single
variable (p)
@@ -854,7 +779,7 @@ theorem norm_equiv_symm_single (i : ι) (b : β i) : ‖(PiLp.equiv p β).symm (
theorem nndist_equiv_symm_single_same (i : ι) (b₁ b₂ : β i) :
nndist ((PiLp.equiv p β).symm (Pi.single i b₁)) ((PiLp.equiv p β).symm (Pi.single i b₂)) =
nndist b₁ b₂ := by
- rw [nndist_eq_nnnorm, nndist_eq_nnnorm, ← equiv_symm_sub, ← Pi.single_sub,
+ rw [nndist_eq_nnnorm, nndist_eq_nnnorm, ← WithLp.equiv_symm_sub, ← Pi.single_sub,
nnnorm_equiv_symm_single]
#align pi_Lp.nndist_equiv_symm_single_same PiLp.nndist_equiv_symm_single_same
@@ -938,11 +863,7 @@ theorem norm_equiv_symm_one {β} [SeminormedAddCommGroup β] (hp : p ≠ ∞) [O
variable (𝕜 p)
/-- `PiLp.equiv` as a linear equivalence. -/
-@[simps (config := { fullyApplied := false })]
-protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
- { LinearEquiv.refl _ _ with
- toFun := PiLp.equiv _ _
- invFun := (PiLp.equiv _ _).symm }
+abbrev linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i := WithLp.linearEquiv _ _ _
#align pi_Lp.linear_equiv PiLp.linearEquiv
/-- `PiLp.equiv` as a continuous linear equivalence. -/
@@ -965,7 +886,7 @@ def basisFun : Basis ι 𝕜 (PiLp p fun _ : ι => 𝕜) :=
@[simp]
theorem basisFun_apply [DecidableEq ι] (i) :
basisFun p 𝕜 ι i = (PiLp.equiv p _).symm (Pi.single i 1) := by
- simp_rw [basisFun, Basis.coe_ofEquivFun, PiLp.linearEquiv_symm_apply, Pi.single]
+ simp_rw [basisFun, Basis.coe_ofEquivFun, WithLp.linearEquiv_symm_apply, Pi.single]
#align pi_Lp.basis_fun_apply PiLp.basisFun_apply
@[simp]
@@ -997,7 +918,7 @@ nonrec theorem basis_toMatrix_basisFun_mul (b : Basis ι 𝕜 (PiLp p fun _ : ι
Matrix.of fun i j => b.repr ((PiLp.equiv _ _).symm (Aᵀ j)) i := by
have := basis_toMatrix_basisFun_mul (b.map (PiLp.linearEquiv _ 𝕜 _)) A
simp_rw [← PiLp.basisFun_map p, Basis.map_repr, LinearEquiv.trans_apply,
- PiLp.linearEquiv_symm_apply, Basis.toMatrix_map, Function.comp, Basis.map_apply,
+ WithLp.linearEquiv_symm_apply, Basis.toMatrix_map, Function.comp, Basis.map_apply,
LinearEquiv.symm_apply_apply] at this
exact this
#align pi_Lp.basis_to_matrix_basis_fun_mul PiLp.basis_toMatrix_basisFun_mul
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -74,20 +74,20 @@ already endowed with the `L^∞` distance, we need the type synonym to avoid con
resolution. Also, we let it depend on `p`, to get a whole family of type on which we can put
different distances. -/
@[nolint unusedArguments]
-def PiLp (_p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) : Type _ :=
+def PiLp (_p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) : Type _ :=
∀ i : ι, α i
#align pi_Lp PiLp
-instance (p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
+instance (p : ℝ≥0∞) {ι : Type*} (α : ι → Type*) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
⟨fun _ => default⟩
@[ext] -- porting note: new lemma
-protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type _} {α : ι → Type _} {x y : PiLp p α}
+protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type*} {α : ι → Type*} {x y : PiLp p α}
(h : ∀ i, x i = y i) : x = y := funext h
namespace PiLp
-variable (p : ℝ≥0∞) (𝕜 𝕜' : Type _) {ι : Type _} (α : ι → Type _) (β : ι → Type _)
+variable (p : ℝ≥0∞) (𝕜 𝕜' : Type*) {ι : Type*} (α : ι → Type*) (β : ι → Type*)
/-- Canonical bijection between `PiLp p α` and the original Pi type. We introduce it to be able
to compare the `L^p` and `L^∞` distances through it. -/
@@ -314,7 +314,7 @@ attribute [local instance] PiLp.pseudoEmetricAux
/-- An auxiliary lemma used twice in the proof of `PiLp.pseudoMetricAux` below. Not intended for
use outside this file. -/
-theorem iSup_edist_ne_top_aux {ι : Type _} [Finite ι] {α : ι → Type _}
+theorem iSup_edist_ne_top_aux {ι : Type*} [Finite ι] {α : ι → Type*}
[∀ i, PseudoMetricSpace (α i)] (f g : PiLp ∞ α) : (⨆ i, edist (f i) (g i)) ≠ ⊤ := by
cases nonempty_fintype ι
obtain ⟨M, hM⟩ := Fintype.exists_le fun i => (⟨dist (f i) (g i), dist_nonneg⟩ : ℝ≥0)
@@ -494,7 +494,7 @@ and having as uniformity the product uniformity. -/
instance [∀ i, MetricSpace (α i)] : MetricSpace (PiLp p α) :=
MetricSpace.ofT0PseudoMetricSpace _
-theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)]
+theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*} [∀ i, PseudoMetricSpace (β i)]
(hp : p ≠ ∞) (x y : PiLp p β) :
nndist x y = (∑ i : ι, nndist (x i) (y i) ^ p.toReal) ^ (1 / p.toReal) :=
-- Porting note: was `Subtype.ext`
@@ -503,7 +503,7 @@ theorem nndist_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} [
exact dist_eq_sum (p.toReal_pos_iff_ne_top.mpr hp) _ _
#align pi_Lp.nndist_eq_sum PiLp.nndist_eq_sum
-theorem nndist_eq_iSup {β : ι → Type _} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
+theorem nndist_eq_iSup {β : ι → Type*} [∀ i, PseudoMetricSpace (β i)] (x y : PiLp ∞ β) :
nndist x y = ⨆ i, nndist (x i) (y i) :=
-- Porting note: was `Subtype.ext`
NNReal.eq <| by
@@ -554,20 +554,20 @@ instance normedAddCommGroup [∀ i, NormedAddCommGroup (α i)] : NormedAddCommGr
eq_of_dist_eq_zero := eq_of_dist_eq_zero }
#align pi_Lp.normed_add_comm_group PiLp.normedAddCommGroup
-theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _} (hp : p ≠ ∞)
+theorem nnnorm_eq_sum {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*} (hp : p ≠ ∞)
[∀ i, SeminormedAddCommGroup (β i)] (f : PiLp p β) :
‖f‖₊ = (∑ i, ‖f i‖₊ ^ p.toReal) ^ (1 / p.toReal) := by
ext
simp [NNReal.coe_sum, norm_eq_sum (p.toReal_pos_iff_ne_top.mpr hp)]
#align pi_Lp.nnnorm_eq_sum PiLp.nnnorm_eq_sum
-theorem nnnorm_eq_ciSup {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
+theorem nnnorm_eq_ciSup {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (f : PiLp ∞ β) :
‖f‖₊ = ⨆ i, ‖f i‖₊ := by
ext
simp [NNReal.coe_iSup, norm_eq_ciSup]
#align pi_Lp.nnnorm_eq_csupr PiLp.nnnorm_eq_ciSup
-theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
+theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type*}
[∀ i, SeminormedAddCommGroup (β i)] (n : ℕ) (h : p = n) (f : PiLp p β) :
‖f‖ = (∑ i, ‖f i‖ ^ n) ^ (1 / (n : ℝ)) := by
have := p.toReal_pos_iff_ne_top.mpr (ne_of_eq_of_ne h <| ENNReal.nat_ne_top n)
@@ -575,14 +575,14 @@ theorem norm_eq_of_nat {p : ℝ≥0∞} [Fact (1 ≤ p)] {β : ι → Type _}
norm_eq_sum this]
#align pi_Lp.norm_eq_of_nat PiLp.norm_eq_of_nat
-theorem norm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
+theorem norm_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ = sqrt (∑ i : ι, ‖x i‖ ^ 2) := by
rw [norm_eq_of_nat 2 (by norm_cast) _] -- Porting note: was `convert`
rw [Real.sqrt_eq_rpow]
norm_cast
#align pi_Lp.norm_eq_of_L2 PiLp.norm_eq_of_L2
-theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
+theorem nnnorm_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖₊ = NNReal.sqrt (∑ i : ι, ‖x i‖₊ ^ 2) :=
-- Porting note: was `Subtype.ext`
NNReal.eq <| by
@@ -590,20 +590,20 @@ theorem nnnorm_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β
exact norm_eq_of_L2 x
#align pi_Lp.nnnorm_eq_of_L2 PiLp.nnnorm_eq_of_L2
-theorem norm_sq_eq_of_L2 (β : ι → Type _) [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
+theorem norm_sq_eq_of_L2 (β : ι → Type*) [∀ i, SeminormedAddCommGroup (β i)] (x : PiLp 2 β) :
‖x‖ ^ 2 = ∑ i : ι, ‖x i‖ ^ 2 := by
suffices ‖x‖₊ ^ 2 = ∑ i : ι, ‖x i‖₊ ^ 2 by
simpa only [NNReal.coe_sum] using congr_arg ((↑) : ℝ≥0 → ℝ) this
rw [nnnorm_eq_of_L2, NNReal.sq_sqrt]
#align pi_Lp.norm_sq_eq_of_L2 PiLp.norm_sq_eq_of_L2
-theorem dist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
+theorem dist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
dist x y = (∑ i, dist (x i) (y i) ^ 2).sqrt := by
simp_rw [dist_eq_norm, norm_eq_of_L2, Pi.sub_apply]
rfl -- Porting note: `Pi.sub_apply` doesn't work
#align pi_Lp.dist_eq_of_L2 PiLp.dist_eq_of_L2
-theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
+theorem nndist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
nndist x y = NNReal.sqrt (∑ i, nndist (x i) (y i) ^ 2) :=
-- Porting note: was `Subtype.ext`
NNReal.eq <| by
@@ -611,7 +611,7 @@ theorem nndist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β
exact dist_eq_of_L2 _ _
#align pi_Lp.nndist_eq_of_L2 PiLp.nndist_eq_of_L2
-theorem edist_eq_of_L2 {β : ι → Type _} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
+theorem edist_eq_of_L2 {β : ι → Type*} [∀ i, SeminormedAddCommGroup (β i)] (x y : PiLp 2 β) :
edist x y = (∑ i, edist (x i) (y i) ^ 2) ^ (1 / 2 : ℝ) := by simp [PiLp.edist_eq_sum]
#align pi_Lp.edist_eq_of_L2 PiLp.edist_eq_of_L2
@@ -707,12 +707,12 @@ def equivₗᵢ : PiLp ∞ β ≃ₗᵢ[𝕜] ∀ i, β i :=
exact ciSup_le fun i => Finset.le_sup (f := fun k => ‖f k‖₊) (Finset.mem_univ i) }
#align pi_Lp.equivₗᵢ PiLp.equivₗᵢ
-variable {ι' : Type _}
+variable {ι' : Type*}
variable [Fintype ι']
variable (p 𝕜)
-variable (E : Type _) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
+variable (E : Type*) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
@@ -63,7 +63,7 @@ We also set up the theory for `PseudoEMetricSpace` and `PseudoMetricSpace`.
set_option linter.uppercaseLean3 false
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue #2220
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
open Real Set Filter IsROrC Bornology BigOperators Uniformity Topology NNReal ENNReal
@@ -2,16 +2,13 @@
Copyright (c) 2020 Sébastien Gouëzel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
-
-! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 9d013ad8430ddddd350cff5c3db830278ded3c79
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.MeanInequalities
import Mathlib.Data.Fintype.Order
import Mathlib.LinearAlgebra.Matrix.Basis
+#align_import analysis.normed_space.pi_Lp from "leanprover-community/mathlib"@"9d013ad8430ddddd350cff5c3db830278ded3c79"
+
/-!
# `L^p` distance on finite products of metric spaces
Given finitely many metric spaces, one can put the max distance on their product, but there is also
@@ -85,7 +85,7 @@ instance (p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) [∀ i, Inhabited (
⟨fun _ => default⟩
@[ext] -- porting note: new lemma
-protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type _} {α : ι → Type _} {x y : PiLp p α}
+protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type _} {α : ι → Type _} {x y : PiLp p α}
(h : ∀ i, x i = y i) : x = y := funext h
namespace PiLp
@@ -715,7 +715,7 @@ variable {ι' : Type _}
variable [Fintype ι']
variable (p 𝕜)
-variable (E : Type _) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
+variable (E : Type _) [NormedAddCommGroup E] [NormedSpace 𝕜 E]
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
@@ -490,7 +490,7 @@ instance [∀ i, EMetricSpace (α i)] : EMetricSpace (PiLp p α) :=
`L^p` distance, and having as uniformity the product uniformity. -/
instance [∀ i, PseudoMetricSpace (β i)] : PseudoMetricSpace (PiLp p β) :=
((pseudoMetricAux p β).replaceUniformity (aux_uniformity_eq p β).symm).replaceBornology fun s =>
- Filter.ext_iff.1 (aux_cobounded_eq p β).symm (sᶜ)
+ Filter.ext_iff.1 (aux_cobounded_eq p β).symm sᶜ
/-- metric space instance on the product of finitely many metric spaces, using the `L^p` distance,
and having as uniformity the product uniformity. -/
@@ -28,7 +28,7 @@ We give instances of this construction for emetric spaces, metric spaces, normed
spaces.
To avoid conflicting instances, all these are defined on a copy of the original Π-type, named
-`PiLp p α`. The assumpion `[Fact (1 ≤ p)]` is required for the metric and normed space instances.
+`PiLp p α`. The assumption `[Fact (1 ≤ p)]` is required for the metric and normed space instances.
We ensure that the topology, bornology and uniform structure on `PiLp p α` are (defeq to) the
product topology, product bornology and product uniformity, to be able to use freely continuity
@@ -486,7 +486,7 @@ edistance, and having as uniformity the product uniformity. -/
instance [∀ i, EMetricSpace (α i)] : EMetricSpace (PiLp p α) :=
@EMetricSpace.ofT0PseudoEMetricSpace (PiLp p α) _ Pi.instT0Space
-/-- pseudometric space instance on the product of finitely many psuedometric spaces, using the
+/-- pseudometric space instance on the product of finitely many pseudometric spaces, using the
`L^p` distance, and having as uniformity the product uniformity. -/
instance [∀ i, PseudoMetricSpace (β i)] : PseudoMetricSpace (PiLp p β) :=
((pseudoMetricAux p β).replaceUniformity (aux_uniformity_eq p β).symm).replaceBornology fun s =>
@@ -84,6 +84,10 @@ def PiLp (_p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) : Type _ :=
instance (p : ℝ≥0∞) {ι : Type _} (α : ι → Type _) [∀ i, Inhabited (α i)] : Inhabited (PiLp p α) :=
⟨fun _ => default⟩
+@[ext] -- porting note: new lemma
+protected theorem PiLp.ext {p : ℝ≥0∞} {ι : Type _} {α : ι → Type _} {x y : PiLp p α}
+ (h : ∀ i, x i = y i) : x = y := funext h
+
namespace PiLp
variable (p : ℝ≥0∞) (𝕜 𝕜' : Type _) {ι : Type _} (α : ι → Type _) (β : ι → Type _)
The mathlib3 change was fixing a synchronization comment, so there is nothing to port.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Sébastien Gouëzel, Jireh Loreaux
! This file was ported from Lean 3 source module analysis.normed_space.pi_Lp
-! leanprover-community/mathlib commit 13bce9a6b6c44f6b4c91ac1c1d2a816e2533d395
+! leanprover-community/mathlib commit 9d013ad8430ddddd350cff5c3db830278ded3c79
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
Forward-port leanprover-community/mathlib#19107
@@ -945,19 +945,13 @@ protected def linearEquiv : PiLp p β ≃ₗ[𝕜] ∀ i, β i :=
#align pi_Lp.linear_equiv PiLp.linearEquiv
/-- `PiLp.equiv` as a continuous linear equivalence. -/
-@[simps! (config := { fullyApplied := false }) toFun apply symm_apply]
+@[simps! (config := { fullyApplied := false }) apply symm_apply]
protected def continuousLinearEquiv : PiLp p β ≃L[𝕜] ∀ i, β i where
toLinearEquiv := PiLp.linearEquiv _ _ _
continuous_toFun := continuous_equiv _ _
continuous_invFun := continuous_equiv_symm _ _
#align pi_Lp.continuous_linear_equiv PiLp.continuousLinearEquiv
--- Porting note: defined separately to appease simpNF linter
-@[simp high]
-theorem continuousLinearEquiv_invFun :
- (PiLp.continuousLinearEquiv p 𝕜 β).toLinearEquiv.invFun = ↑(PiLp.equiv p fun i ↦ β i).symm :=
- rfl
-
section Basis
variable (ι)
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file