Theorem: NumberField.mixedEmbedding.nnnorm_eq_sup_normAtPlace
File: Mathlib/NumberTheory/NumberField/CanonicalEmbedding/Basic.lean

tactic: have :
    (univ : Finset (InfinitePlace K)) =
    (univ.image (fun w : {w : InfinitePlace K // IsReal w} ↦ w.1)) ∪
    (univ.image (fun w : {w : InfinitePlace K // IsComplex w} ↦ w.1)) := by
  ext; simp [isReal_or_isComplex]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ ‖x‖₊ = univ.sup fun w => ⟨(normAtPlace w) x, ⋯⟩
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ ‖x‖₊ = univ.sup fun w => ⟨(normAtPlace w) x, ⋯⟩

tactic: rw [this, sup_union, univ.sup_image, univ.sup_image, sup_eq_max,
  Prod.nnnorm_def', Pi.nnnorm_def, Pi.nnnorm_def]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ ‖x‖₊ = univ.sup fun w => ⟨(normAtPlace w) x, ⋯⟩
state_after: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ max (univ.sup fun b => ‖x.1 b‖₊) (univ.sup fun b => ‖x.2 b‖₊) =
    max (univ.sup ((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w))
      (univ.sup ((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w))

tactic: congr
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ max (univ.sup fun b => ‖x.1 b‖₊) (univ.sup fun b => ‖x.2 b‖₊) =
    max (univ.sup ((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w))
      (univ.sup ((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w))
state_after: case e_a.e_f
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ (fun b => ‖x.1 b‖₊) = (fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w

case e_a.e_f
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ (fun b => ‖x.2 b‖₊) = (fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w

tactic: ext
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
state_after: case a
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
a✝ : InfinitePlace K
⊢ a✝ ∈ univ ↔ a✝ ∈ image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ

tactic: simp [isReal_or_isComplex]
state_before: case a
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
a✝ : InfinitePlace K
⊢ a✝ ∈ univ ↔ a✝ ∈ image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
state_after: no goals

tactic: ext w
state_before: case e_a.e_f
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ (fun b => ‖x.1 b‖₊) = (fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w
state_after: case e_a.e_f.h.a
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
w : { w // w.IsReal }
⊢ ↑‖x.1 w‖₊ = ↑(((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w) w)

tactic: simp [normAtPlace_apply_isReal w.prop]
state_before: case e_a.e_f.h.a
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
w : { w // w.IsReal }
⊢ ↑‖x.1 w‖₊ = ↑(((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w) w)
state_after: no goals

tactic: ext w
state_before: case e_a.e_f
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
⊢ (fun b => ‖x.2 b‖₊) = (fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w
state_after: case e_a.e_f.h.a
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
w : { w // w.IsComplex }
⊢ ↑‖x.2 w‖₊ = ↑(((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w) w)

tactic: simp [normAtPlace_apply_isComplex w.prop]
state_before: case e_a.e_f.h.a
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
this : univ = image (fun w => ↑w) univ ∪ image (fun w => ↑w) univ
w : { w // w.IsComplex }
⊢ ↑‖x.2 w‖₊ = ↑(((fun w => ⟨(normAtPlace w) x, ⋯⟩) ∘ fun w => ↑w) w)
state_after: no goals