l3lab/ntp-mathlib huggingface dataset:
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
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
        

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁵ : Fintype ι
inst✝⁴ : Fact (1 ≤ p)
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
inst✝¹ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
src✝ : WithLp ⊤ ((i : ι) → β i) ≃ ((i : ι) → β i) := WithLp.equiv ⊤ ((i : ι) → β i)
f : PiLp ⊤ β
this : (Finset.sup Finset.univ fun i => ‖f i‖₊) = ⨆ i, ‖f i‖₊
⊢ ‖{
          toLinearMap :=
            {
              toAddHom :=
                { toFun := src✝.toFun,
                  map_add' := (_ : ∀ (f g : PiLp ⊤ β), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ (f + g)) },
              map_smul' :=
                (_ :
                  ∀ (c : 𝕜) (f : PiLp ⊤ β),
                    AddHom.toFun
                        { toFun := src✝.toFun,
                          map_add' := (_ : ∀ (f g : PiLp ⊤ β), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ (f + g)) }
                        (c • f) =
                      AddHom.toFun
                        { toFun := src✝.toFun,
                          map_add' := (_ : ∀ (f g : PiLp ⊤ β), Equiv.toFun src✝ (f + g) = Equiv.toFun src✝ (f + g)) }
                        (c • f)) },
          invFun := src✝.invFun, left_inv := (_ : Function.LeftInverse src✝.invFun src✝.toFun),
          right_inv := (_ : Function.RightInverse src✝.invFun src✝.toFun) }
        f‖ =
    ‖f‖

Next tactic:
simpa only [NNReal.coe_iSup] using congr_arg ((↑) : ℝ≥0 → ℝ) this
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
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
      

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁵ : Fintype ι
inst✝⁴ : Fact (1 ≤ p)
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
inst✝¹ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
src✝ : WithLp ⊤ ((i : ι) → β i) ≃ ((i : ι) → β i) := WithLp.equiv ⊤ ((i : ι) → β i)
f : PiLp ⊤ β
⊢ (Finset.sup Finset.univ fun i => ‖f i‖₊) = ⨆ i, ‖f i‖₊

Next tactic:
refine'
        antisymm (Finset.sup_le fun i _ => le_ciSup (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
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 (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
      

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁵ : Fintype ι
inst✝⁴ : Fact (1 ≤ p)
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
inst✝¹ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
src✝ : WithLp ⊤ ((i : ι) → β i) ≃ ((i : ι) → β i) := WithLp.equiv ⊤ ((i : ι) → β i)
f : PiLp ⊤ β
⊢ ⨆ i, ‖f i‖₊ ≤ Finset.sup Finset.univ fun i => ‖f i‖₊

Next tactic:
cases isEmpty_or_nonempty ι
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
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 (Fintype.bddAbove_range fun i => ‖f i‖₊) _) _
      cases isEmpty_or_nonempty ι
      · 

Proof state:
case inl
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁵ : Fintype ι
inst✝⁴ : Fact (1 ≤ p)
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
inst✝¹ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
src✝ : WithLp ⊤ ((i : ι) → β i) ≃ ((i : ι) → β i) := WithLp.equiv ⊤ ((i : ι) → β i)
f : PiLp ⊤ β
h✝ : IsEmpty ι
⊢ ⨆ i, ‖f i‖₊ ≤ Finset.sup Finset.univ fun i => ‖f i‖₊

Next tactic:
simp only [ciSup_of_empty, Finset.univ_eq_empty, Finset.sup_empty, le_rfl]
/-- The canonical map `WithLp.equiv` between `PiLp ∞ β` and `Π i, β i` as a linear isometric
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 (Fintype.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
        

Proof state:
case inr
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁵ : Fintype ι
inst✝⁴ : Fact (1 ≤ p)
inst✝³ : NormedField 𝕜
inst✝² : NormedField 𝕜'
inst✝¹ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
src✝ : WithLp ⊤ ((i : ι) → β i) ≃ ((i : ι) → β i) := WithLp.equiv ⊤ ((i : ι) → β i)
f : PiLp ⊤ β
h✝ : Nonempty ι
⊢ ⨆ i, ‖f i‖₊ ≤ Finset.sup Finset.univ fun i => ‖f i‖₊

Next tactic:
exact ciSup_le fun i => Finset.le_sup (f := fun k => ‖f k‖₊) (Finset.mem_univ i)
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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
    

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
x' : PiLp p fun x => E
⊢ ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x'‖ = ‖x'‖

Next tactic:
clear x y
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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
    

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
x' : PiLp p fun x => E
⊢ ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x'‖ = ‖x'‖

Next tactic:
rcases p.dichotomy with (rfl | h)
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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)
    · 

Proof state:
case inl
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : NormedField 𝕜
inst✝⁶ : NormedField 𝕜'
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝³ : Fintype ι'
E : Type u_7
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
e : ι ≃ ι'
inst✝ : Fact (1 ≤ ⊤)
x' : PiLp ⊤ fun x => E
⊢ ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x'‖ = ‖x'‖

Next tactic:
simp_rw [norm_eq_ciSup]
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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]
      

Proof state:
case inl
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : NormedField 𝕜
inst✝⁶ : NormedField 𝕜'
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝³ : Fintype ι'
E : Type u_7
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
e : ι ≃ ι'
inst✝ : Fact (1 ≤ ⊤)
x' : PiLp ⊤ fun x => E
⊢ ⨆ i, ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x' i‖ = ⨆ i, ‖x' i‖

Next tactic:
exact e.symm.iSup_congr fun _ => rfl
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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
    · 

Proof state:
case inr
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
x' : PiLp p fun x => E
h : 1 ≤ ENNReal.toReal p
⊢ ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x'‖ = ‖x'‖

Next tactic:
simp only [norm_eq_sum (zero_lt_one.trans_le h)]
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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
    · simp only [norm_eq_sum (zero_lt_one.trans_le h)]
      

Proof state:
case inr
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
x' : PiLp p fun x => E
h : 1 ≤ ENNReal.toReal p
⊢ (∑ x : ι', ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x' x‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p) =
    (∑ x : ι, ‖x' x‖ ^ ENNReal.toReal p) ^ (1 / ENNReal.toReal p)

Next tactic:
congr 1
/-- An equivalence of finite domains induces a linearly isometric equivalence of finitely supported
functions-/
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
    · simp only [norm_eq_sum (zero_lt_one.trans_le h)]
      congr 1
      

Proof state:
case inr.e_a
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x'✝ y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
x' : PiLp p fun x => E
h : 1 ≤ ENNReal.toReal p
⊢ ∑ x : ι', ‖(LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e) x' x‖ ^ ENNReal.toReal p = ∑ x : ι, ‖x' x‖ ^ ENNReal.toReal p

Next tactic:
exact Fintype.sum_equiv e.symm _ _ fun _ => rfl
@[simp]
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`
    

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
z : PiLp p fun x => E
⊢ (LinearIsometryEquiv.symm (LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e)) z =
    (LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e.symm) z

Next tactic:
simp only [LinearIsometryEquiv.piLpCongrLeft, LinearIsometryEquiv.symm,
      LinearIsometryEquiv.coe_mk]
@[simp]
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`
    simp only [LinearIsometryEquiv.piLpCongrLeft, LinearIsometryEquiv.symm,
      LinearIsometryEquiv.coe_mk]
    

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
z : PiLp p fun x => E
⊢ (LinearEquiv.symm (LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e)) z = (LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e.symm) z

Next tactic:
unfold PiLp WithLp
@[simp]
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`
    simp only [LinearIsometryEquiv.piLpCongrLeft, LinearIsometryEquiv.symm,
      LinearIsometryEquiv.coe_mk]
    unfold PiLp WithLp
    

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
z : PiLp p fun x => E
⊢ (LinearEquiv.symm (LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e)) z = (LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e.symm) z

Next tactic:
ext
@[simp]
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`
    simp only [LinearIsometryEquiv.piLpCongrLeft, LinearIsometryEquiv.symm,
      LinearIsometryEquiv.coe_mk]
    unfold PiLp WithLp
    ext
    

Proof state:
case h
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁸ : Fintype ι
inst✝⁷ : Fact (1 ≤ p)
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedField 𝕜'
inst✝⁴ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝³ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i : ι
ι' : Type u_6
inst✝² : Fintype ι'
E : Type u_7
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
e : ι ≃ ι'
z : PiLp p fun x => E
x✝ : ι
⊢ (LinearEquiv.symm (LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e)) z x✝ =
    (LinearEquiv.piCongrLeft' 𝕜 (fun x => E) e.symm) z x✝

Next tactic:
simp only [LinearEquiv.piCongrLeft'_symm_apply, eq_rec_constant,
      LinearEquiv.piCongrLeft'_apply, Equiv.symm_symm_apply]
@[simp high]
theorem _root_.LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι']
    (e : ι ≃ ι') (i : ι) (v : E) :
    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
  

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝¹⁰ : Fintype ι
inst✝⁹ : Fact (1 ≤ p)
inst✝⁸ : NormedField 𝕜
inst✝⁷ : NormedField 𝕜'
inst✝⁶ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁵ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i✝ : ι
ι' : Type u_6
inst✝⁴ : Fintype ι'
E : Type u_7
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq ι'
e : ι ≃ ι'
i : ι
v : E
⊢ (LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e) ((WithLp.equiv p (ι → E)).symm (Pi.single i v)) =
    (WithLp.equiv p (ι' → E)).symm (Pi.single (e i) v)

Next tactic:
funext x
@[simp high]
theorem _root_.LinearIsometryEquiv.piLpCongrLeft_single [DecidableEq ι] [DecidableEq ι']
    (e : ι ≃ ι') (i : ι) (v : E) :
    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
  

Proof state:
case h
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝¹⁰ : Fintype ι
inst✝⁹ : Fact (1 ≤ p)
inst✝⁸ : NormedField 𝕜
inst✝⁷ : NormedField 𝕜'
inst✝⁶ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁵ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x✝ y : PiLp p β
x' y' : (i : ι) → β i
i✝ : ι
ι' : Type u_6
inst✝⁴ : Fintype ι'
E : Type u_7
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : DecidableEq ι
inst✝ : DecidableEq ι'
e : ι ≃ ι'
i : ι
v : E
x : ι'
⊢ (LinearIsometryEquiv.piLpCongrLeft p 𝕜 E e) ((WithLp.equiv p (ι → E)).symm (Pi.single i v)) x =
    (WithLp.equiv p (ι' → E)).symm (Pi.single (e i) v) x

Next tactic:
simp [LinearIsometryEquiv.piLpCongrLeft_apply, LinearEquiv.piCongrLeft', Equiv.piCongrLeft',
    Pi.single, Function.update, Equiv.symm_apply_eq]
@[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
  

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁹ : Fintype ι
inst✝⁸ : Fact (1 ≤ p)
inst✝⁷ : NormedField 𝕜
inst✝⁶ : NormedField 𝕜'
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x y : PiLp p β
x' y' : (i : ι) → β i
i✝ : ι
ι' : Type u_6
inst✝³ : Fintype ι'
E : Type u_7
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : DecidableEq ι
hp : Fact (1 ≤ p)
i : ι
b : β i
⊢ ‖(WithLp.equiv p ((i : ι) → β i)).symm (Pi.single i b)‖₊ = ‖b‖₊

Next tactic:
clear x y
@[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
  

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁹ : Fintype ι
inst✝⁸ : Fact (1 ≤ p)
inst✝⁷ : NormedField 𝕜
inst✝⁶ : NormedField 𝕜'
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x' y' : (i : ι) → β i
i✝ : ι
ι' : Type u_6
inst✝³ : Fintype ι'
E : Type u_7
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : DecidableEq ι
hp : Fact (1 ≤ p)
i : ι
b : β i
⊢ ‖(WithLp.equiv p ((i : ι) → β i)).symm (Pi.single i b)‖₊ = ‖b‖₊

Next tactic:
haveI : Nonempty ι := ⟨i⟩
@[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⟩
  

Proof state:
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁹ : Fintype ι
inst✝⁸ : Fact (1 ≤ p)
inst✝⁷ : NormedField 𝕜
inst✝⁶ : NormedField 𝕜'
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x' y' : (i : ι) → β i
i✝ : ι
ι' : Type u_6
inst✝³ : Fintype ι'
E : Type u_7
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : DecidableEq ι
hp : Fact (1 ≤ p)
i : ι
b : β i
this : Nonempty ι
⊢ ‖(WithLp.equiv p ((i : ι) → β i)).symm (Pi.single i b)‖₊ = ‖b‖₊

Next tactic:
induction p using ENNReal.recTopCoe generalizing hp with
  | top =>
    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]
      · rw [Pi.single_eq_of_ne' hij, nnnorm_zero]
        exact zero_le _
    · rw [Pi.single_eq_same]
  | coe p =>
    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]
    intro j hij
    rw [WithLp.equiv_symm_pi_apply, Pi.single_eq_of_ne hij, nnnorm_zero, NNReal.zero_rpow hp0]
@[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
  

Proof state:
case top
p : ℝ≥0∞
𝕜 : Type u_1
𝕜' : Type u_2
ι : Type u_3
α : ι → Type u_4
β : ι → Type u_5
inst✝⁹ : Fintype ι
inst✝⁸ : Fact (1 ≤ p)
inst✝⁷ : NormedField 𝕜
inst✝⁶ : NormedField 𝕜'
inst✝⁵ : (i : ι) → SeminormedAddCommGroup (β i)
inst✝⁴ : (i : ι) → NormedSpace 𝕜 (β i)
c : 𝕜
x' y' : (i : ι) → β i
i✝ : ι
ι' : Type u_6
inst✝³ : Fintype ι'
E : Type u_7
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : DecidableEq ι
i : ι
b : β i
this : Nonempty ι
hp : Fact (1 ≤ ⊤)
⊢ ‖(WithLp.equiv ⊤ ((i : ι) → β i)).symm (Pi.single i b)‖₊ = ‖b‖₊

Next tactic:
| top =>
    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]
      · rw [Pi.single_eq_of_ne' hij, nnnorm_zero]
        exact zero_le _
    · rw [Pi.single_eq_same]