[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
⊢ IsometryEquiv (weightedSumSquares ℂ w') (weightedSumSquares ℂ fun i => if w' i = 0 then 0 else 1)
[PROOFSTEP]
let w i := if h : w' i = 0 then (1 : Units ℂ) else Units.mk0 (w' i) h
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
⊢ IsometryEquiv (weightedSumSquares ℂ w') (weightedSumSquares ℂ fun i => if w' i = 0 then 0 else 1)
[PROOFSTEP]
have hw' : ∀ i : ι, (w i : ℂ) ^ (-(1 / 2 : ℂ)) ≠ 0 := by
  intro i hi
  exact (w i).ne_zero ((Complex.cpow_eq_zero_iff _ _).1 hi).1
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
⊢ ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
[PROOFSTEP]
intro i hi
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
i : ι
hi : ↑(w i) ^ (-(1 / 2)) = 0
⊢ False
[PROOFSTEP]
exact (w i).ne_zero ((Complex.cpow_eq_zero_iff _ _).1 hi).1
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
⊢ IsometryEquiv (weightedSumSquares ℂ w') (weightedSumSquares ℂ fun i => if w' i = 0 then 0 else 1)
[PROOFSTEP]
convert
  (weightedSumSquares ℂ w').isometryEquivBasisRepr
    ((Pi.basisFun ℂ ι).unitsSMul fun i => (isUnit_iff_ne_zero.2 <| hw' i).unit)
[GOAL]
case h.e'_10
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
⊢ (weightedSumSquares ℂ fun i => if w' i = 0 then 0 else 1) =
    basisRepr (weightedSumSquares ℂ w')
      (Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2)))))
[PROOFSTEP]
ext1 v
[GOAL]
case h.e'_10.H
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
⊢ ↑(weightedSumSquares ℂ fun i => if w' i = 0 then 0 else 1) v =
    ↑(basisRepr (weightedSumSquares ℂ w')
          (Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))))
      v
[PROOFSTEP]
erw [basisRepr_apply, weightedSumSquares_apply, weightedSumSquares_apply]
[GOAL]
case h.e'_10.H
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
⊢ ∑ i : ι, (if w' i = 0 then 0 else 1) • (v i * v i) =
    ∑ i : ι,
      w' i •
        (Finset.sum univ
            (fun i =>
              v i • ↑(Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) i)
            i *
          Finset.sum univ
            (fun i =>
              v i • ↑(Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) i)
            i)
[PROOFSTEP]
refine' sum_congr rfl fun j hj => _
[GOAL]
case h.e'_10.H
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
⊢ (if w' j = 0 then 0 else 1) • (v j * v j) =
    w' j •
      (Finset.sum univ
          (fun i =>
            v i • ↑(Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) i)
          j *
        Finset.sum univ
          (fun i =>
            v i • ↑(Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) i)
          j)
[PROOFSTEP]
have hsum :
  (∑ i : ι, v i • ((isUnit_iff_ne_zero.2 <| hw' i).unit : ℂ) • (Pi.basisFun ℂ ι) i) j = v j • w j ^ (-(1 / 2 : ℂ)) :=
  by
  rw [Finset.sum_apply, sum_eq_single j, Pi.basisFun_apply, IsUnit.unit_spec, LinearMap.stdBasis_apply, Pi.smul_apply,
    Pi.smul_apply, Function.update_same, smul_eq_mul, smul_eq_mul, smul_eq_mul, mul_one]
  intro i _ hij
  rw [Pi.basisFun_apply, LinearMap.stdBasis_apply, Pi.smul_apply, Pi.smul_apply, Function.update_noteq hij.symm,
    Pi.zero_apply, smul_eq_mul, smul_eq_mul, mul_zero, mul_zero]
  intro hj'; exact False.elim (hj' hj)
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
⊢ Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
[PROOFSTEP]
rw [Finset.sum_apply, sum_eq_single j, Pi.basisFun_apply, IsUnit.unit_spec, LinearMap.stdBasis_apply, Pi.smul_apply,
  Pi.smul_apply, Function.update_same, smul_eq_mul, smul_eq_mul, smul_eq_mul, mul_one]
[GOAL]
case h₀
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
⊢ ∀ (b : ι), b ∈ univ → b ≠ j → (v b • ↑(IsUnit.unit (_ : IsUnit (↑(w b) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) b) j = 0
case h₁
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
⊢ ¬j ∈ univ → (v j • ↑(IsUnit.unit (_ : IsUnit (↑(w j) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) j) j = 0
[PROOFSTEP]
intro i _ hij
[GOAL]
case h₀
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
i : ι
a✝ : i ∈ univ
hij : i ≠ j
⊢ (v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j = 0
case h₁
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
⊢ ¬j ∈ univ → (v j • ↑(IsUnit.unit (_ : IsUnit (↑(w j) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) j) j = 0
[PROOFSTEP]
rw [Pi.basisFun_apply, LinearMap.stdBasis_apply, Pi.smul_apply, Pi.smul_apply, Function.update_noteq hij.symm,
  Pi.zero_apply, smul_eq_mul, smul_eq_mul, mul_zero, mul_zero]
[GOAL]
case h₁
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
⊢ ¬j ∈ univ → (v j • ↑(IsUnit.unit (_ : IsUnit (↑(w j) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) j) j = 0
[PROOFSTEP]
intro hj'
[GOAL]
case h₁
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hj' : ¬j ∈ univ
⊢ (v j • ↑(IsUnit.unit (_ : IsUnit (↑(w j) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) j) j = 0
[PROOFSTEP]
exact False.elim (hj' hj)
[GOAL]
case h.e'_10.H
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
⊢ (if w' j = 0 then 0 else 1) • (v j * v j) =
    w' j •
      (Finset.sum univ
          (fun i =>
            v i • ↑(Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) i)
          j *
        Finset.sum univ
          (fun i =>
            v i • ↑(Basis.unitsSMul (Pi.basisFun ℂ ι) fun i => IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) i)
          j)
[PROOFSTEP]
simp_rw [Basis.unitsSMul_apply]
[GOAL]
case h.e'_10.H
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
⊢ (if w' j = 0 then 0 else 1) • (v j * v j) =
    w' j •
      (Finset.sum univ (fun x => v x • IsUnit.unit (_ : IsUnit (↑(w x) ^ (-(1 / 2)))) • ↑(Pi.basisFun ℂ ι) x) j *
        Finset.sum univ (fun x => v x • IsUnit.unit (_ : IsUnit (↑(w x) ^ (-(1 / 2)))) • ↑(Pi.basisFun ℂ ι) x) j)
[PROOFSTEP]
erw [hsum, smul_eq_mul]
[GOAL]
case h.e'_10.H
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
⊢ (if w' j = 0 then 0 else 1) * (v j * v j) = w' j • (v j • ↑(w j) ^ (-(1 / 2)) * v j • ↑(w j) ^ (-(1 / 2)))
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : w' j = 0
⊢ 0 * (v j * v j) = w' j • (v j • ↑1 ^ (-(1 / 2)) * v j • ↑1 ^ (-(1 / 2)))
[PROOFSTEP]
simp only [h, zero_smul, zero_mul]
[GOAL]
case neg
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
⊢ 1 * (v j * v j) = w' j • (v j • ↑(Units.mk0 (w' j) h) ^ (-(1 / 2)) * v j • ↑(Units.mk0 (w' j) h) ^ (-(1 / 2)))
[PROOFSTEP]
have hww' : w' j = w j := by simp only [dif_neg h, Units.val_mk0]
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
⊢ w' j = ↑(w j)
[PROOFSTEP]
simp only [dif_neg h, Units.val_mk0]
[GOAL]
case neg
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
⊢ 1 * (v j * v j) = w' j • (v j • ↑(Units.mk0 (w' j) h) ^ (-(1 / 2)) * v j • ↑(Units.mk0 (w' j) h) ^ (-(1 / 2)))
[PROOFSTEP]
simp only [one_mul, Units.val_mk0, smul_eq_mul]
[GOAL]
case neg
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
⊢ v j * v j = w' j * (v j * w' j ^ (-(1 / 2)) * (v j * w' j ^ (-(1 / 2))))
[PROOFSTEP]
rw [hww']
[GOAL]
case neg
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
⊢ v j * v j = ↑(w j) * (v j * ↑(w j) ^ (-(1 / 2)) * (v j * ↑(w j) ^ (-(1 / 2))))
[PROOFSTEP]
suffices v j * v j = w j ^ (-(1 / 2 : ℂ)) * w j ^ (-(1 / 2 : ℂ)) * w j * v j * v j by rw [this]; ring
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
this : v j * v j = ↑(w j) ^ (-(1 / 2)) * ↑(w j) ^ (-(1 / 2)) * ↑(w j) * v j * v j
⊢ v j * v j = ↑(w j) * (v j * ↑(w j) ^ (-(1 / 2)) * (v j * ↑(w j) ^ (-(1 / 2))))
[PROOFSTEP]
rw [this]
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
this : v j * v j = ↑(w j) ^ (-(1 / 2)) * ↑(w j) ^ (-(1 / 2)) * ↑(w j) * v j * v j
⊢ ↑(w j) ^ (-(1 / 2)) * ↑(w j) ^ (-(1 / 2)) * ↑(w j) * v j * v j =
    ↑(w j) * (v j * ↑(w j) ^ (-(1 / 2)) * (v j * ↑(w j) ^ (-(1 / 2))))
[PROOFSTEP]
ring
[GOAL]
case neg
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
⊢ v j * v j = ↑(w j) ^ (-(1 / 2)) * ↑(w j) ^ (-(1 / 2)) * ↑(w j) * v j * v j
[PROOFSTEP]
rw [← Complex.cpow_add _ _ (w j).ne_zero, show -(1 / 2 : ℂ) + -(1 / 2) = -1 by simp [← two_mul], Complex.cpow_neg_one,
  inv_mul_cancel (w j).ne_zero, one_mul]
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w' : ι → ℂ
w : ι → ℂˣ := fun i => if h : w' i = 0 then 1 else Units.mk0 (w' i) h
hw' : ∀ (i : ι), ↑(w i) ^ (-(1 / 2)) ≠ 0
v : ι → ℂ
j : ι
hj : j ∈ univ
hsum :
  Finset.sum univ (fun i => v i • ↑(IsUnit.unit (_ : IsUnit (↑(w i) ^ (-(1 / 2))))) • ↑(Pi.basisFun ℂ ι) i) j =
    v j • ↑(w j) ^ (-(1 / 2))
h : ¬w' j = 0
hww' : w' j = ↑(w j)
⊢ -(1 / 2) + -(1 / 2) = -1
[PROOFSTEP]
simp [← two_mul]
[GOAL]
ι : Type u_1
inst✝¹ : Fintype ι
inst✝ : DecidableEq ι
w : ι → ℂˣ
⊢ IsometryEquiv (weightedSumSquares ℂ w) (weightedSumSquares ℂ 1)
[PROOFSTEP]
simpa using isometryEquivSumSquares ((↑) ∘ w)


[GOAL]
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
⊢ #L ≤ #R
[PROOFSTEP]
classical
cases fintypeOrInfinite R
· exact Cardinal.mk_le_of_surjective (IsArtinianRing.localization_surjective S _)
erw [← Cardinal.mul_eq_self <| Cardinal.aleph0_le_mk R]
set f : R × R → L := fun aa => IsLocalization.mk' _ aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
refine' @Cardinal.mk_le_of_surjective _ _ f fun a => _
obtain ⟨x, y, h⟩ := IsLocalization.mk'_surjective S a
use(x, y)
dsimp
rwa [dif_pos <| show ↑y ∈ S from y.2, SetLike.eta]
[GOAL]
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
⊢ #L ≤ #R
[PROOFSTEP]
cases fintypeOrInfinite R
[GOAL]
case inl
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Fintype R
⊢ #L ≤ #R
[PROOFSTEP]
exact Cardinal.mk_le_of_surjective (IsArtinianRing.localization_surjective S _)
[GOAL]
case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
⊢ #L ≤ #R
[PROOFSTEP]
erw [← Cardinal.mul_eq_self <| Cardinal.aleph0_le_mk R]
[GOAL]
case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
⊢ #L ≤ #R * #R
[PROOFSTEP]
set f : R × R → L := fun aa => IsLocalization.mk' _ aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1)
[GOAL]
case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.fst (if h : aa.snd ∈ S then { val := aa.snd, property := h } else 1)
⊢ #L ≤ #R * #R
[PROOFSTEP]
refine' @Cardinal.mk_le_of_surjective _ _ f fun a => _
[GOAL]
case inr
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.fst (if h : aa.snd ∈ S then { val := aa.snd, property := h } else 1)
a : L
⊢ ∃ a_1, f a_1 = a
[PROOFSTEP]
obtain ⟨x, y, h⟩ := IsLocalization.mk'_surjective S a
[GOAL]
case inr.intro.intro
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.fst (if h : aa.snd ∈ S then { val := aa.snd, property := h } else 1)
a : L
x : R
y : { x // x ∈ S }
h : mk' L x y = a
⊢ ∃ a_1, f a_1 = a
[PROOFSTEP]
use(x, y)
[GOAL]
case h
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.fst (if h : aa.snd ∈ S then { val := aa.snd, property := h } else 1)
a : L
x : R
y : { x // x ∈ S }
h : mk' L x y = a
⊢ f (x, ↑y) = a
[PROOFSTEP]
dsimp
[GOAL]
case h
R : Type u
inst✝³ : CommRing R
S : Submonoid R
L : Type u
inst✝² : CommRing L
inst✝¹ : Algebra R L
inst✝ : IsLocalization S L
val✝ : Infinite R
f : R × R → L := fun aa => mk' L aa.fst (if h : aa.snd ∈ S then { val := aa.snd, property := h } else 1)
a : L
x : R
y : { x // x ∈ S }
h : mk' L x y = a
⊢ mk' L x (if h : ↑y ∈ S then { val := ↑y, property := h } else 1) = a
[PROOFSTEP]
rwa [dif_pos <| show ↑y ∈ S from y.2, SetLike.eta]


[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.28, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ g.op ≫ f.op = 0
[PROOFSTEP]
rw [← op_comp, w, op_zero]
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.28, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ f ≫ factorThruImage g = 0
[PROOFSTEP]
rw [← cancel_mono (image.ι g), Category.assoc, image.fac, w, zero_comp]
[GOAL]
V : Type u_1
inst✝¹ : Category.{u_2, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ imageToKernel g.op f.op (_ : g.op ≫ f.op = 0) =
    (imageSubobjectIso g.op ≪≫ (imageOpOp g).symm).hom ≫
      (cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0)).op ≫
        (kernelSubobjectIso f.op ≪≫ kernelOpOp f).inv
[PROOFSTEP]
ext
[GOAL]
case h
V : Type u_1
inst✝¹ : Category.{u_2, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ imageToKernel g.op f.op (_ : g.op ≫ f.op = 0) ≫ Subobject.arrow (kernelSubobject f.op) =
    ((imageSubobjectIso g.op ≪≫ (imageOpOp g).symm).hom ≫
        (cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0)).op ≫
          (kernelSubobjectIso f.op ≪≫ kernelOpOp f).inv) ≫
      Subobject.arrow (kernelSubobject f.op)
[PROOFSTEP]
simp only [Iso.trans_hom, Iso.symm_hom, Iso.trans_inv, kernelOpOp_inv, Category.assoc, imageToKernel_arrow,
  kernelSubobject_arrow', kernel.lift_ι, ← op_comp, cokernel.π_desc, ← imageSubobject_arrow, ←
  imageUnopOp_inv_comp_op_factorThruImage g.op]
[GOAL]
case h
V : Type u_1
inst✝¹ : Category.{u_2, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (imageSubobjectIso g.op).hom ≫ (imageUnopOp g.op).inv ≫ (factorThruImage g.op.unop).op =
    (imageSubobjectIso g.op).hom ≫ (imageOpOp g).inv ≫ (factorThruImage g).op
[PROOFSTEP]
rfl
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.7815, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ g.unop ≫ f.unop = 0
[PROOFSTEP]
rw [← unop_comp, w, unop_zero]
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.7815, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ f ≫ factorThruImage g = 0
[PROOFSTEP]
rw [← cancel_mono (image.ι g), Category.assoc, image.fac, w, zero_comp]
[GOAL]
V : Type u_1
inst✝¹ : Category.{u_2, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ imageToKernel g.unop f.unop (_ : g.unop ≫ f.unop = 0) =
    (imageSubobjectIso g.unop ≪≫ (imageUnopUnop g).symm).hom ≫
      (cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0)).unop ≫
        (kernelSubobjectIso f.unop ≪≫ kernelUnopUnop f).inv
[PROOFSTEP]
ext
[GOAL]
case h
V : Type u_1
inst✝¹ : Category.{u_2, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ imageToKernel g.unop f.unop (_ : g.unop ≫ f.unop = 0) ≫ Subobject.arrow (kernelSubobject f.unop) =
    ((imageSubobjectIso g.unop ≪≫ (imageUnopUnop g).symm).hom ≫
        (cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0)).unop ≫
          (kernelSubobjectIso f.unop ≪≫ kernelUnopUnop f).inv) ≫
      Subobject.arrow (kernelSubobject f.unop)
[PROOFSTEP]
dsimp only [imageUnopUnop]
[GOAL]
case h
V : Type u_1
inst✝¹ : Category.{u_2, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ imageToKernel g.unop f.unop (_ : g.unop ≫ f.unop = 0) ≫ Subobject.arrow (kernelSubobject f.unop) =
    ((imageSubobjectIso g.unop ≪≫ (Iso.unop (imageUnopOp g)).symm).hom ≫
        (cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0)).unop ≫
          (kernelSubobjectIso f.unop ≪≫ kernelUnopUnop f).inv) ≫
      Subobject.arrow (kernelSubobject f.unop)
[PROOFSTEP]
simp only [Iso.trans_hom, Iso.symm_hom, Iso.trans_inv, kernelUnopUnop_inv, Category.assoc, imageToKernel_arrow,
  kernelSubobject_arrow', kernel.lift_ι, cokernel.π_desc, Iso.unop_inv, ← unop_comp,
  factorThruImage_comp_imageUnopOp_inv, Quiver.Hom.unop_op, imageSubobject_arrow]
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.16638, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ g.op ≫ f.op = 0
[PROOFSTEP]
rw [← op_comp, w, op_zero]
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.16638, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ cokernel.desc f g w = cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0) ≫ image.ι g
[PROOFSTEP]
ext
[GOAL]
case h
V : Type u_1
inst✝¹ : Category.{?u.16638, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ coequalizer.π f 0 ≫ cokernel.desc f g w =
    coequalizer.π f 0 ≫ cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0) ≫ image.ι g
[PROOFSTEP]
simp only [image.fac, cokernel.π_desc, cokernel.π_desc_assoc]
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.28807, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ g.unop ≫ f.unop = 0
[PROOFSTEP]
rw [← unop_comp, w, unop_zero]
[GOAL]
V : Type u_1
inst✝¹ : Category.{?u.28807, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ cokernel.desc f g w = cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0) ≫ image.ι g
[PROOFSTEP]
ext
[GOAL]
case h
V : Type u_1
inst✝¹ : Category.{?u.28807, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ coequalizer.π f 0 ≫ cokernel.desc f g w =
    coequalizer.π f 0 ≫ cokernel.desc f (factorThruImage g) (_ : f ≫ factorThruImage g = 0) ≫ image.ι g
[PROOFSTEP]
simp only [image.fac, cokernel.π_desc, cokernel.π_desc_assoc]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.40782, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex V c
i j : ι
hij : ¬ComplexShape.Rel (ComplexShape.symm c) i j
⊢ (fun i j => (d X j i).op) i j = 0
[PROOFSTEP]
simp only
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.40782, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex V c
i j : ι
hij : ¬ComplexShape.Rel (ComplexShape.symm c) i j
⊢ (d X j i).op = 0
[PROOFSTEP]
rw [X.shape j i hij, op_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.40782, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex V c
x✝⁴ x✝³ x✝² : ι
x✝¹ : ComplexShape.Rel (ComplexShape.symm c) x✝⁴ x✝³
x✝ : ComplexShape.Rel (ComplexShape.symm c) x✝³ x✝²
⊢ (fun i j => (d X j i).op) x✝⁴ x✝³ ≫ (fun i j => (d X j i).op) x✝³ x✝² = 0
[PROOFSTEP]
rw [← op_comp, X.d_comp_d, op_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.42509, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex V (ComplexShape.symm c)
i j : ι
hij : ¬ComplexShape.Rel c i j
⊢ (fun i j => (d X j i).op) i j = 0
[PROOFSTEP]
simp only
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.42509, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex V (ComplexShape.symm c)
i j : ι
hij : ¬ComplexShape.Rel c i j
⊢ (d X j i).op = 0
[PROOFSTEP]
rw [X.shape j i hij, op_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.42509, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex V (ComplexShape.symm c)
x✝⁴ x✝³ x✝² : ι
x✝¹ : ComplexShape.Rel c x✝⁴ x✝³
x✝ : ComplexShape.Rel c x✝³ x✝²
⊢ (fun i j => (d X j i).op) x✝⁴ x✝³ ≫ (fun i j => (d X j i).op) x✝³ x✝² = 0
[PROOFSTEP]
rw [← op_comp, X.d_comp_d, op_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.44206, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex Vᵒᵖ c
i j : ι
hij : ¬ComplexShape.Rel (ComplexShape.symm c) i j
⊢ (fun i j => (d X j i).unop) i j = 0
[PROOFSTEP]
simp only
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.44206, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex Vᵒᵖ c
i j : ι
hij : ¬ComplexShape.Rel (ComplexShape.symm c) i j
⊢ (d X j i).unop = 0
[PROOFSTEP]
rw [X.shape j i hij, unop_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.44206, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex Vᵒᵖ c
x✝⁴ x✝³ x✝² : ι
x✝¹ : ComplexShape.Rel (ComplexShape.symm c) x✝⁴ x✝³
x✝ : ComplexShape.Rel (ComplexShape.symm c) x✝³ x✝²
⊢ (fun i j => (d X j i).unop) x✝⁴ x✝³ ≫ (fun i j => (d X j i).unop) x✝³ x✝² = 0
[PROOFSTEP]
rw [← unop_comp, X.d_comp_d, unop_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.45915, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex Vᵒᵖ (ComplexShape.symm c)
i j : ι
hij : ¬ComplexShape.Rel c i j
⊢ (fun i j => (d X j i).unop) i j = 0
[PROOFSTEP]
simp only
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.45915, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex Vᵒᵖ (ComplexShape.symm c)
i j : ι
hij : ¬ComplexShape.Rel c i j
⊢ (d X j i).unop = 0
[PROOFSTEP]
rw [X.shape j i hij, unop_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.45915, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : HomologicalComplex Vᵒᵖ (ComplexShape.symm c)
x✝⁴ x✝³ x✝² : ι
x✝¹ : ComplexShape.Rel c x✝⁴ x✝³
x✝ : ComplexShape.Rel c x✝³ x✝²
⊢ (fun i j => (d X j i).unop) x✝⁴ x✝³ ≫ (fun i j => (d X j i).unop) x✝³ x✝² = 0
[PROOFSTEP]
rw [← unop_comp, X.d_comp_d, unop_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.47656, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X✝ Y✝ : (HomologicalComplex V c)ᵒᵖ
f : X✝ ⟶ Y✝
i j : ι
x✝ : ComplexShape.Rel (ComplexShape.symm c) i j
⊢ (fun i => (Hom.f f.unop i).op) i ≫ d ((fun X => HomologicalComplex.op X.unop) Y✝) i j =
    d ((fun X => HomologicalComplex.op X.unop) X✝) i j ≫ (fun i => (Hom.f f.unop i).op) j
[PROOFSTEP]
simp only [op_d, ← op_comp, f.unop.comm]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.55812, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X✝ Y✝ : HomologicalComplex Vᵒᵖ (ComplexShape.symm c)
f : X✝ ⟶ Y✝
i j : ι
x✝ : ComplexShape.Rel c i j
⊢ (fun i => (Hom.f f i).unop) i ≫ d (HomologicalComplex.unopSymm X✝) i j =
    d (HomologicalComplex.unopSymm Y✝) i j ≫ (fun i => (Hom.f f i).unop) j
[PROOFSTEP]
simp only [unopSymm_d, ← unop_comp, f.comm]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.63659, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex V c)ᵒᵖ
i j : ι
x✝ : ComplexShape.Rel c i j
⊢ ((fun i => Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)) i).hom ≫
      d X.unop i j =
    d (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i j ≫
      ((fun i => Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)) j).hom
[PROOFSTEP]
simp only [Iso.refl_hom, Category.id_comp, unopSymm_d, op_d, Quiver.Hom.unop_op, Category.comp_id]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.63659, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
⊢ ∀ {X Y : (HomologicalComplex V c)ᵒᵖ} (f : X ⟶ Y),
    (𝟭 (HomologicalComplex V c)ᵒᵖ).map f ≫
        ((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            Y).hom =
      ((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            X).hom ≫
        (opFunctor V c ⋙ opInverse V c).map f
[PROOFSTEP]
intro X Y f
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.63659, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex V c)ᵒᵖ
f : X ⟶ Y
⊢ (𝟭 (HomologicalComplex V c)ᵒᵖ).map f ≫
      ((fun X =>
            Iso.op
              (Hom.isoOfComponents fun i =>
                Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
          Y).hom =
    ((fun X =>
            Iso.op
              (Hom.isoOfComponents fun i =>
                Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
          X).hom ≫
      (opFunctor V c ⋙ opInverse V c).map f
[PROOFSTEP]
refine' Quiver.Hom.unop_inj _
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.63659, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex V c)ᵒᵖ
f : X ⟶ Y
⊢ ((𝟭 (HomologicalComplex V c)ᵒᵖ).map f ≫
        ((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            Y).hom).unop =
    (((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            X).hom ≫
        (opFunctor V c ⋙ opInverse V c).map f).unop
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.63659, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex V c)ᵒᵖ
f : X ⟶ Y
x : ι
⊢ Hom.f
      ((𝟭 (HomologicalComplex V c)ᵒᵖ).map f ≫
          ((fun X =>
                Iso.op
                  (Hom.isoOfComponents fun i =>
                    Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
              Y).hom).unop
      x =
    Hom.f
      (((fun X =>
                Iso.op
                  (Hom.isoOfComponents fun i =>
                    Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
              X).hom ≫
          (opFunctor V c ⋙ opInverse V c).map f).unop
      x
[PROOFSTEP]
simp only [Quiver.Hom.unop_op, Functor.id_map, Iso.op_hom, Functor.comp_map, unop_comp, comp_f,
  Hom.isoOfComponents_hom_f]
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.63659, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex V c)ᵒᵖ
f : X ⟶ Y
x : ι
⊢ (Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op Y.unop)) x)).hom ≫
      Hom.f f.unop x =
    Hom.f ((opInverse V c).map ((opFunctor V c).map f)).unop x ≫
      (Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) x)).hom
[PROOFSTEP]
erw [Category.id_comp, Category.comp_id (f.unop.f x)]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.82165, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex V c)ᵒᵖ
⊢ (opFunctor V c).map (NatTrans.app (opUnitIso V c).hom X) ≫
      NatTrans.app (opCounitIso V c).hom ((opFunctor V c).obj X) =
    𝟙 ((opFunctor V c).obj X)
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.82165, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex V c)ᵒᵖ
i✝ : ι
⊢ Hom.f
      ((opFunctor V c).map (NatTrans.app (opUnitIso V c).hom X) ≫
        NatTrans.app (opCounitIso V c).hom ((opFunctor V c).obj X))
      i✝ =
    Hom.f (𝟙 ((opFunctor V c).obj X)) i✝
[PROOFSTEP]
simp only [opUnitIso, opCounitIso, NatIso.ofComponents_hom_app, Iso.op_hom, comp_f, opFunctor_map_f, Quiver.Hom.unop_op,
  Hom.isoOfComponents_hom_f]
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.82165, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex V c)ᵒᵖ
i✝ : ι
⊢ (Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i✝)).hom.op ≫
      (Iso.refl (HomologicalComplex.X ((opInverse V c ⋙ opFunctor V c).obj ((opFunctor V c).obj X)) i✝)).hom =
    Hom.f (𝟙 ((opFunctor V c).obj X)) i✝
[PROOFSTEP]
exact Category.comp_id _
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.83999, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X✝ Y✝ : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
f : X✝ ⟶ Y✝
i j : ι
x✝ : ComplexShape.Rel (ComplexShape.symm c) i j
⊢ (fun i => (Hom.f f.unop i).unop) i ≫ d ((fun X => HomologicalComplex.unop X.unop) Y✝) i j =
    d ((fun X => HomologicalComplex.unop X.unop) X✝) i j ≫ (fun i => (Hom.f f.unop i).unop) j
[PROOFSTEP]
simp only [unop_d, ← unop_comp, f.unop.comm]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.92175, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X✝ Y✝ : HomologicalComplex V (ComplexShape.symm c)
f : X✝ ⟶ Y✝
i j : ι
x✝ : ComplexShape.Rel c i j
⊢ (fun i => (Hom.f f i).op) i ≫ d (HomologicalComplex.opSymm X✝) i j =
    d (HomologicalComplex.opSymm Y✝) i j ≫ (fun i => (Hom.f f i).op) j
[PROOFSTEP]
simp only [opSymm_d, ← op_comp, f.comm]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.100003, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
i j : ι
x✝ : ComplexShape.Rel c i j
⊢ ((fun i => Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)) i).hom ≫
      d X.unop i j =
    d (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i j ≫
      ((fun i => Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)) j).hom
[PROOFSTEP]
simp only [Iso.refl_hom, Category.id_comp, unopSymm_d, op_d, Quiver.Hom.unop_op, Category.comp_id]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.100003, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
⊢ ∀ {X Y : (HomologicalComplex Vᵒᵖ c)ᵒᵖ} (f : X ⟶ Y),
    (𝟭 (HomologicalComplex Vᵒᵖ c)ᵒᵖ).map f ≫
        ((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            Y).hom =
      ((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            X).hom ≫
        (unopFunctor V c ⋙ unopInverse V c).map f
[PROOFSTEP]
intro X Y f
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.100003, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
f : X ⟶ Y
⊢ (𝟭 (HomologicalComplex Vᵒᵖ c)ᵒᵖ).map f ≫
      ((fun X =>
            Iso.op
              (Hom.isoOfComponents fun i =>
                Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
          Y).hom =
    ((fun X =>
            Iso.op
              (Hom.isoOfComponents fun i =>
                Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
          X).hom ≫
      (unopFunctor V c ⋙ unopInverse V c).map f
[PROOFSTEP]
refine' Quiver.Hom.unop_inj _
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.100003, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
f : X ⟶ Y
⊢ ((𝟭 (HomologicalComplex Vᵒᵖ c)ᵒᵖ).map f ≫
        ((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            Y).hom).unop =
    (((fun X =>
              Iso.op
                (Hom.isoOfComponents fun i =>
                  Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
            X).hom ≫
        (unopFunctor V c ⋙ unopInverse V c).map f).unop
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.100003, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
f : X ⟶ Y
x : ι
⊢ Hom.f
      ((𝟭 (HomologicalComplex Vᵒᵖ c)ᵒᵖ).map f ≫
          ((fun X =>
                Iso.op
                  (Hom.isoOfComponents fun i =>
                    Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
              Y).hom).unop
      x =
    Hom.f
      (((fun X =>
                Iso.op
                  (Hom.isoOfComponents fun i =>
                    Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) i)))
              X).hom ≫
          (unopFunctor V c ⋙ unopInverse V c).map f).unop
      x
[PROOFSTEP]
simp only [Quiver.Hom.unop_op, Functor.id_map, Iso.op_hom, Functor.comp_map, unop_comp, comp_f,
  Hom.isoOfComponents_hom_f]
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.100003, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X Y : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
f : X ⟶ Y
x : ι
⊢ (Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op Y.unop)) x)).hom ≫
      Hom.f f.unop x =
    Hom.f ((unopInverse V c).map ((unopFunctor V c).map f)).unop x ≫
      (Iso.refl (HomologicalComplex.X (HomologicalComplex.unopSymm (HomologicalComplex.op X.unop)) x)).hom
[PROOFSTEP]
erw [Category.id_comp, Category.comp_id (f.unop.f x)]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.118561, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
⊢ (unopFunctor V c).map (NatTrans.app (unopUnitIso V c).hom X) ≫
      NatTrans.app (unopCounitIso V c).hom ((unopFunctor V c).obj X) =
    𝟙 ((unopFunctor V c).obj X)
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.118561, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
i✝ : ι
⊢ Hom.f
      ((unopFunctor V c).map (NatTrans.app (unopUnitIso V c).hom X) ≫
        NatTrans.app (unopCounitIso V c).hom ((unopFunctor V c).obj X))
      i✝ =
    Hom.f (𝟙 ((unopFunctor V c).obj X)) i✝
[PROOFSTEP]
simp only [opUnitIso, opCounitIso, NatIso.ofComponents_hom_app, Iso.op_hom, comp_f, opFunctor_map_f, Quiver.Hom.unop_op,
  Hom.isoOfComponents_hom_f]
[GOAL]
case h
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.118561, u_2} V
c : ComplexShape ι
inst✝ : Preadditive V
X : (HomologicalComplex Vᵒᵖ c)ᵒᵖ
i✝ : ι
⊢ Hom.f ((unopFunctor V c).map (NatTrans.app (unopUnitIso V c).hom X)) i✝ ≫
      Hom.f (NatTrans.app (unopCounitIso V c).hom ((unopFunctor V c).obj X)) i✝ =
    Hom.f (𝟙 ((unopFunctor V c).obj X)) i✝
[PROOFSTEP]
exact Category.comp_id _
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.125717, u_2} V
c : ComplexShape ι
inst✝ : Abelian V
C : HomologicalComplex V c
i : ι
⊢ (dFrom C i).op ≫ (dTo C i).op = 0
[PROOFSTEP]
rw [← op_comp, C.dTo_comp_dFrom i, op_zero]
[GOAL]
ι : Type u_1
V : Type u_2
inst✝¹ : Category.{?u.129295, u_2} V
c : ComplexShape ι
inst✝ : Abelian V
C✝ : HomologicalComplex V c
i : ι
C : HomologicalComplex Vᵒᵖ c
⊢ (dFrom C i).unop ≫ (dTo C i).unop = 0
[PROOFSTEP]
rw [← unop_comp, C.dTo_comp_dFrom i, unop_zero]


[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
x y✝ y : (i : ι) → α i
⊢ (y ∈ pi univ fun i => Ici (x i)) ↔ y ∈ Ici x
[PROOFSTEP]
simp [Pi.le_def]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
x y✝ y : (i : ι) → α i
⊢ (y ∈ pi univ fun i => Iic (x i)) ↔ y ∈ Iic x
[PROOFSTEP]
simp [Pi.le_def]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
x y✝ y : (i : ι) → α i
⊢ (y ∈ pi univ fun i => Icc (x i) (y✝ i)) ↔ y ∈ Icc x y✝
[PROOFSTEP]
simp [Pi.le_def, forall_and]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : x i₀ ≤ m
⊢ (pi univ fun i => Ioc (update x i₀ m i) (y i)) = {z | m < z i₀} ∩ pi univ fun i => Ioc (x i) (y i)
[PROOFSTEP]
have : Ioc m (y i₀) = Ioi m ∩ Ioc (x i₀) (y i₀) := by
  rw [← Ioi_inter_Iic, ← Ioi_inter_Iic, ← inter_assoc, inter_eq_self_of_subset_left (Ioi_subset_Ioi hm)]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : x i₀ ≤ m
⊢ Ioc m (y i₀) = Ioi m ∩ Ioc (x i₀) (y i₀)
[PROOFSTEP]
rw [← Ioi_inter_Iic, ← Ioi_inter_Iic, ← inter_assoc, inter_eq_self_of_subset_left (Ioi_subset_Ioi hm)]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : x i₀ ≤ m
this : Ioc m (y i₀) = Ioi m ∩ Ioc (x i₀) (y i₀)
⊢ (pi univ fun i => Ioc (update x i₀ m i) (y i)) = {z | m < z i₀} ∩ pi univ fun i => Ioc (x i) (y i)
[PROOFSTEP]
simp_rw [univ_pi_update i₀ _ _ fun i z ↦ Ioc z (y i), ← pi_inter_compl ({ i₀ } : Set ι), singleton_pi', ← inter_assoc,
  this]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : x i₀ ≤ m
this : Ioc m (y i₀) = Ioi m ∩ Ioc (x i₀) (y i₀)
⊢ ({x_1 | x_1 i₀ ∈ Ioi m ∩ Ioc (x i₀) (y i₀)} ∩ pi {i₀}ᶜ fun j => Ioc (x j) (y j)) =
    {z | m < z i₀} ∩ {x_1 | x_1 i₀ ∈ Ioc (x i₀) (y i₀)} ∩ pi {i₀}ᶜ fun j => Ioc (x j) (y j)
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : m ≤ y i₀
⊢ (pi univ fun i => Ioc (x i) (update y i₀ m i)) = {z | z i₀ ≤ m} ∩ pi univ fun i => Ioc (x i) (y i)
[PROOFSTEP]
have : Ioc (x i₀) m = Iic m ∩ Ioc (x i₀) (y i₀) := by
  rw [← Ioi_inter_Iic, ← Ioi_inter_Iic, inter_left_comm, inter_eq_self_of_subset_left (Iic_subset_Iic.2 hm)]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : m ≤ y i₀
⊢ Ioc (x i₀) m = Iic m ∩ Ioc (x i₀) (y i₀)
[PROOFSTEP]
rw [← Ioi_inter_Iic, ← Ioi_inter_Iic, inter_left_comm, inter_eq_self_of_subset_left (Iic_subset_Iic.2 hm)]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : m ≤ y i₀
this : Ioc (x i₀) m = Iic m ∩ Ioc (x i₀) (y i₀)
⊢ (pi univ fun i => Ioc (x i) (update y i₀ m i)) = {z | z i₀ ≤ m} ∩ pi univ fun i => Ioc (x i) (y i)
[PROOFSTEP]
simp_rw [univ_pi_update i₀ y m fun i z ↦ Ioc (x i) z, ← pi_inter_compl ({ i₀ } : Set ι), singleton_pi', ← inter_assoc,
  this]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : m ≤ y i₀
this : Ioc (x i₀) m = Iic m ∩ Ioc (x i₀) (y i₀)
⊢ ({x_1 | x_1 i₀ ∈ Iic m ∩ Ioc (x i₀) (y i₀)} ∩ pi {i₀}ᶜ fun j => Ioc (x j) (y j)) =
    {z | z i₀ ≤ m} ∩ {x_1 | x_1 i₀ ∈ Ioc (x i₀) (y i₀)} ∩ pi {i₀}ᶜ fun j => Ioc (x j) (y j)
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
⊢ Disjoint (pi univ fun i => Ioc (x i) (update y i₀ m i)) (pi univ fun i => Ioc (update x i₀ m i) (y i))
[PROOFSTEP]
rw [disjoint_left]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
⊢ ∀ ⦃a : (i : ι) → α i⦄,
    (a ∈ pi univ fun i => Ioc (x i) (update y i₀ m i)) → ¬a ∈ pi univ fun i => Ioc (update x i₀ m i) (y i)
[PROOFSTEP]
rintro z h₁ h₂
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
z : (i : ι) → α i
h₁ : z ∈ pi univ fun i => Ioc (x i) (update y i₀ m i)
h₂ : z ∈ pi univ fun i => Ioc (update x i₀ m i) (y i)
⊢ False
[PROOFSTEP]
refine' (h₁ i₀ (mem_univ _)).2.not_lt _
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
x✝ y✝ : (i : ι) → α i
inst✝ : DecidableEq ι
x y : (i : ι) → α i
i₀ : ι
m : α i₀
z : (i : ι) → α i
h₁ : z ∈ pi univ fun i => Ioc (x i) (update y i₀ m i)
h₂ : z ∈ pi univ fun i => Ioc (update x i₀ m i) (y i)
⊢ update y i₀ m i₀ < z i₀
[PROOFSTEP]
simpa only [Function.update_same] using (h₂ i₀ (mem_univ _)).1
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
⊢ update f i '' Icc a b = Icc (update f i a) (update f i b)
[PROOFSTEP]
ext x
[GOAL]
case h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
⊢ x ∈ update f i '' Icc a b ↔ x ∈ Icc (update f i a) (update f i b)
[PROOFSTEP]
rw [← Set.pi_univ_Icc]
[GOAL]
case h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
⊢ x ∈ update f i '' Icc a b ↔ x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
[PROOFSTEP]
refine' ⟨_, fun h => ⟨x i, _, _⟩⟩
[GOAL]
case h.refine'_1
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
⊢ x ∈ update f i '' Icc a b → x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
[PROOFSTEP]
rintro ⟨c, hc, rfl⟩
[GOAL]
case h.refine'_1.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b c : α i
hc : c ∈ Icc a b
⊢ update f i c ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
[PROOFSTEP]
simpa [update_le_update_iff]
[GOAL]
case h.refine'_2
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
h : x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
⊢ x i ∈ Icc a b
[PROOFSTEP]
simpa only [Function.update_same] using h i (mem_univ i)
[GOAL]
case h.refine'_3
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
h : x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
⊢ update f i (x i) = x
[PROOFSTEP]
ext j
[GOAL]
case h.refine'_3.h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
h : x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
j : ι
⊢ update f i (x i) j = x j
[PROOFSTEP]
obtain rfl | hij := eq_or_ne i j
[GOAL]
case h.refine'_3.h.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
h : x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
⊢ update f i (x i) i = x i
[PROOFSTEP]
exact Function.update_same _ _ _
[GOAL]
case h.refine'_3.h.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
x : (a : ι) → α a
h : x ∈ pi univ fun i_1 => Icc (update f i a i_1) (update f i b i_1)
j : ι
hij : i ≠ j
⊢ update f i (x i) j = x j
[PROOFSTEP]
simpa only [Function.update_noteq hij.symm, le_antisymm_iff] using h j (mem_univ j)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
⊢ update f i '' Ico a b = Ico (update f i a) (update f i b)
[PROOFSTEP]
rw [← Icc_diff_right, ← Icc_diff_right, image_diff (update_injective _ _), image_singleton, image_update_Icc]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
⊢ update f i '' Ioc a b = Ioc (update f i a) (update f i b)
[PROOFSTEP]
rw [← Icc_diff_left, ← Icc_diff_left, image_diff (update_injective _ _), image_singleton, image_update_Icc]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a b : α i
⊢ update f i '' Ioo a b = Ioo (update f i a) (update f i b)
[PROOFSTEP]
rw [← Ico_diff_left, ← Ico_diff_left, image_diff (update_injective _ _), image_singleton, image_update_Ico]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a : α i
⊢ update f i '' Icc a (f i) = Icc (update f i a) f
[PROOFSTEP]
simpa using image_update_Icc f i a (f i)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a : α i
⊢ update f i '' Ico a (f i) = Ico (update f i a) f
[PROOFSTEP]
simpa using image_update_Ico f i a (f i)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a : α i
⊢ update f i '' Ioc a (f i) = Ioc (update f i a) f
[PROOFSTEP]
simpa using image_update_Ioc f i a (f i)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
a : α i
⊢ update f i '' Ioo a (f i) = Ioo (update f i a) f
[PROOFSTEP]
simpa using image_update_Ioo f i a (f i)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
b : α i
⊢ update f i '' Icc (f i) b = Icc f (update f i b)
[PROOFSTEP]
simpa using image_update_Icc f i (f i) b
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
b : α i
⊢ update f i '' Ico (f i) b = Ico f (update f i b)
[PROOFSTEP]
simpa using image_update_Ico f i (f i) b
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
b : α i
⊢ update f i '' Ioc (f i) b = Ioc f (update f i b)
[PROOFSTEP]
simpa using image_update_Ioc f i (f i) b
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → PartialOrder (α i)
f : (i : ι) → α i
i : ι
b : α i
⊢ update f i '' Ioo (f i) b = Ioo f (update f i b)
[PROOFSTEP]
simpa using image_update_Ioo f i (f i) b
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Lattice (α i)
inst✝ : DecidableEq ι
f : (i : ι) → α i
i : ι
a b : α i
⊢ Icc (update f i (a ⊓ b)) (update f i (a ⊔ b)) = uIcc (update f i a) (update f i b)
[PROOFSTEP]
simp_rw [uIcc, update_sup, update_inf]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Lattice (α i)
inst✝ : DecidableEq ι
f : (i : ι) → α i
i : ι
a : α i
⊢ update f i '' uIcc a (f i) = uIcc (update f i a) f
[PROOFSTEP]
simpa using image_update_uIcc f i a (f i)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Lattice (α i)
inst✝ : DecidableEq ι
f : (i : ι) → α i
i : ι
b : α i
⊢ update f i '' uIcc (f i) b = uIcc f (update f i b)
[PROOFSTEP]
simpa using image_update_uIcc f i (f i) b
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y : (i : ι) → α i
i₀ : ι
m : α i₀
hm : m ∈ Icc (x i₀) (y i₀)
⊢ ((pi univ fun i => Ioc (x i) (update y i₀ m i)) ∪ pi univ fun i => Ioc (update x i₀ m i) (y i)) =
    pi univ fun i => Ioc (x i) (y i)
[PROOFSTEP]
simp_rw [pi_univ_Ioc_update_left hm.1, pi_univ_Ioc_update_right hm.2, ← union_inter_distrib_right, ← setOf_or, le_or_lt,
  setOf_true, univ_inter]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' : (i : ι) → α i
⊢ (Icc x y \ pi univ fun i => Ioo (x' i) (y' i)) ⊆
    (⋃ (i : ι), Icc x (update y i (x' i))) ∪ ⋃ (i : ι), Icc (update x i (y' i)) y
[PROOFSTEP]
rintro a ⟨⟨hxa, hay⟩, ha'⟩
[GOAL]
case intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
ha' : ¬a ∈ pi univ fun i => Ioo (x' i) (y' i)
hxa : x ≤ a
hay : a ≤ y
⊢ a ∈ (⋃ (i : ι), Icc x (update y i (x' i))) ∪ ⋃ (i : ι), Icc (update x i (y' i)) y
[PROOFSTEP]
simp at ha'
[GOAL]
case intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
hxa : x ≤ a
hay : a ≤ y
ha' : ∃ x, x' x < a x → y' x ≤ a x
⊢ a ∈ (⋃ (i : ι), Icc x (update y i (x' i))) ∪ ⋃ (i : ι), Icc (update x i (y' i)) y
[PROOFSTEP]
simp [le_update_iff, update_le_iff, hxa, hay, hxa _, hay _, ← exists_or]
[GOAL]
case intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
hxa : x ≤ a
hay : a ≤ y
ha' : ∃ x, x' x < a x → y' x ≤ a x
⊢ ∃ x, a x ≤ x' x ∨ y' x ≤ a x
[PROOFSTEP]
rcases ha' with ⟨w, hw⟩
[GOAL]
case intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
hxa : x ≤ a
hay : a ≤ y
w : ι
hw : x' w < a w → y' w ≤ a w
⊢ ∃ x, a x ≤ x' x ∨ y' x ≤ a x
[PROOFSTEP]
apply Exists.intro w
[GOAL]
case intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
hxa : x ≤ a
hay : a ≤ y
w : ι
hw : x' w < a w → y' w ≤ a w
⊢ a w ≤ x' w ∨ y' w ≤ a w
[PROOFSTEP]
cases lt_or_le (x' w) (a w)
[GOAL]
case intro.intro.intro.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
hxa : x ≤ a
hay : a ≤ y
w : ι
hw : x' w < a w → y' w ≤ a w
h✝ : x' w < a w
⊢ a w ≤ x' w ∨ y' w ≤ a w
[PROOFSTEP]
simp_all
[GOAL]
case intro.intro.intro.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y x' y' a : (i : ι) → α i
hxa : x ≤ a
hay : a ≤ y
w : ι
hw : x' w < a w → y' w ≤ a w
h✝ : a w ≤ x' w
⊢ a w ≤ x' w ∨ y' w ≤ a w
[PROOFSTEP]
simp_all
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y z : (i : ι) → α i
⊢ (Icc x z \ pi univ fun i => Ioc (y i) (z i)) ⊆ ⋃ (i : ι), Icc x (update z i (y i))
[PROOFSTEP]
rintro a ⟨⟨hax, haz⟩, hay⟩
[GOAL]
case intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : DecidableEq ι
inst✝ : (i : ι) → LinearOrder (α i)
x y z a : (i : ι) → α i
hay : ¬a ∈ pi univ fun i => Ioc (y i) (z i)
hax : x ≤ a
haz : a ≤ z
⊢ a ∈ ⋃ (i : ι), Icc x (update z i (y i))
[PROOFSTEP]
simpa [not_and_or, hax, le_update_iff, haz _] using hay


[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g : { x // x ∈ Lp E p }
⊢ ↑↑f ≤ᵐ[μ] ↑↑g ↔ f ≤ g
[PROOFSTEP]
rw [← Subtype.coe_le_coe, ← AEEqFun.coeFn_le]
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
⊢ 0 ≤ᵐ[μ] ↑↑f ↔ 0 ≤ f
[PROOFSTEP]
rw [← coeFn_le]
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
⊢ 0 ≤ᵐ[μ] ↑↑f ↔ ↑↑0 ≤ᵐ[μ] ↑↑f
[PROOFSTEP]
have h0 := Lp.coeFn_zero E p μ
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
⊢ 0 ≤ᵐ[μ] ↑↑f ↔ ↑↑0 ≤ᵐ[μ] ↑↑f
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
⊢ 0 ≤ᵐ[μ] ↑↑f → ↑↑0 ≤ᵐ[μ] ↑↑f
[PROOFSTEP]
intro h
[GOAL]
case mpr
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
⊢ ↑↑0 ≤ᵐ[μ] ↑↑f → 0 ≤ᵐ[μ] ↑↑f
[PROOFSTEP]
intro h
[GOAL]
case mp
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
h : 0 ≤ᵐ[μ] ↑↑f
⊢ ↑↑0 ≤ᵐ[μ] ↑↑f
[PROOFSTEP]
filter_upwards [h, h0] with _ _ h2
[GOAL]
case mpr
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
h : ↑↑0 ≤ᵐ[μ] ↑↑f
⊢ 0 ≤ᵐ[μ] ↑↑f
[PROOFSTEP]
filter_upwards [h, h0] with _ _ h2
[GOAL]
case h
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
h : 0 ≤ᵐ[μ] ↑↑f
a✝¹ : α
a✝ : OfNat.ofNat 0 a✝¹ ≤ ↑↑f a✝¹
h2 : ↑↑0 a✝¹ = OfNat.ofNat 0 a✝¹
⊢ ↑↑0 a✝¹ ≤ ↑↑f a✝¹
[PROOFSTEP]
rwa [h2]
[GOAL]
case h
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f : { x // x ∈ Lp E p }
h0 : ↑↑0 =ᵐ[μ] 0
h : ↑↑0 ≤ᵐ[μ] ↑↑f
a✝¹ : α
a✝ : ↑↑0 a✝¹ ≤ ↑↑f a✝¹
h2 : ↑↑0 a✝¹ = OfNat.ofNat 0 a✝¹
⊢ OfNat.ofNat 0 a✝¹ ≤ ↑↑f a✝¹
[PROOFSTEP]
rwa [← h2]
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
⊢ CovariantClass { x // x ∈ Lp E p } { x // x ∈ Lp E p } (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
[PROOFSTEP]
refine' ⟨fun f g₁ g₂ hg₁₂ => _⟩
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g₁ g₂ : { x // x ∈ Lp E p }
hg₁₂ : g₁ ≤ g₂
⊢ f + g₁ ≤ f + g₂
[PROOFSTEP]
rw [← coeFn_le] at hg₁₂ ⊢
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g₁ g₂ : { x // x ∈ Lp E p }
hg₁₂ : ↑↑g₁ ≤ᵐ[μ] ↑↑g₂
⊢ ↑↑(f + g₁) ≤ᵐ[μ] ↑↑(f + g₂)
[PROOFSTEP]
filter_upwards [coeFn_add f g₁, coeFn_add f g₂, hg₁₂] with _ h1 h2 h3
[GOAL]
case h
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g₁ g₂ : { x // x ∈ Lp E p }
hg₁₂ : ↑↑g₁ ≤ᵐ[μ] ↑↑g₂
a✝ : α
h1 : ↑↑(f + g₁) a✝ = (↑↑f + ↑↑g₁) a✝
h2 : ↑↑(f + g₂) a✝ = (↑↑f + ↑↑g₂) a✝
h3 : ↑↑g₁ a✝ ≤ ↑↑g₂ a✝
⊢ ↑↑(f + g₁) a✝ ≤ ↑↑(f + g₂) a✝
[PROOFSTEP]
rw [h1, h2, Pi.add_apply, Pi.add_apply]
[GOAL]
case h
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g₁ g₂ : { x // x ∈ Lp E p }
hg₁₂ : ↑↑g₁ ≤ᵐ[μ] ↑↑g₂
a✝ : α
h1 : ↑↑(f + g₁) a✝ = (↑↑f + ↑↑g₁) a✝
h2 : ↑↑(f + g₂) a✝ = (↑↑f + ↑↑g₂) a✝
h3 : ↑↑g₁ a✝ ≤ ↑↑g₂ a✝
⊢ ↑↑f a✝ + ↑↑g₁ a✝ ≤ ↑↑f a✝ + ↑↑g₂ a✝
[PROOFSTEP]
exact add_le_add le_rfl h3
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g : α →ₘ[μ] E
hf : f ∈ Lp E p
hg : g ∈ Lp E p
⊢ f ⊔ g ∈ Lp E p
[PROOFSTEP]
rw [mem_Lp_iff_memℒp] at *
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g : α →ₘ[μ] E
hf : Memℒp (↑f) p
hg : Memℒp (↑g) p
⊢ Memℒp (↑(f ⊔ g)) p
[PROOFSTEP]
exact (memℒp_congr_ae (AEEqFun.coeFn_sup _ _)).mpr (hf.sup hg)
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g : α →ₘ[μ] E
hf : f ∈ Lp E p
hg : g ∈ Lp E p
⊢ f ⊓ g ∈ Lp E p
[PROOFSTEP]
rw [mem_Lp_iff_memℒp] at *
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝ : NormedLatticeAddCommGroup E
f g : α →ₘ[μ] E
hf : Memℒp (↑f) p
hg : Memℒp (↑g) p
⊢ Memℒp (↑(f ⊓ g)) p
[PROOFSTEP]
exact (memℒp_congr_ae (AEEqFun.coeFn_inf _ _)).mpr (hf.inf hg)
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝¹ : NormedLatticeAddCommGroup E
inst✝ : Fact (1 ≤ p)
src✝¹ : Lattice { x // x ∈ Lp E p } := instLattice
src✝ : NormedAddCommGroup { x // x ∈ Lp E p } := instNormedAddCommGroup
f g : { x // x ∈ Lp E p }
hfg : |f| ≤ |g|
⊢ ‖f‖ ≤ ‖g‖
[PROOFSTEP]
rw [← coeFn_le] at hfg
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝¹ : NormedLatticeAddCommGroup E
inst✝ : Fact (1 ≤ p)
src✝¹ : Lattice { x // x ∈ Lp E p } := instLattice
src✝ : NormedAddCommGroup { x // x ∈ Lp E p } := instNormedAddCommGroup
f g : { x // x ∈ Lp E p }
hfg : ↑↑|f| ≤ᵐ[μ] ↑↑|g|
⊢ ‖f‖ ≤ ‖g‖
[PROOFSTEP]
simp_rw [Lp.norm_def, ENNReal.toReal_le_toReal (Lp.snorm_ne_top f) (Lp.snorm_ne_top g)]
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝¹ : NormedLatticeAddCommGroup E
inst✝ : Fact (1 ≤ p)
src✝¹ : Lattice { x // x ∈ Lp E p } := instLattice
src✝ : NormedAddCommGroup { x // x ∈ Lp E p } := instNormedAddCommGroup
f g : { x // x ∈ Lp E p }
hfg : ↑↑|f| ≤ᵐ[μ] ↑↑|g|
⊢ snorm (↑↑f) p μ ≤ snorm (↑↑g) p μ
[PROOFSTEP]
refine' snorm_mono_ae _
[GOAL]
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝¹ : NormedLatticeAddCommGroup E
inst✝ : Fact (1 ≤ p)
src✝¹ : Lattice { x // x ∈ Lp E p } := instLattice
src✝ : NormedAddCommGroup { x // x ∈ Lp E p } := instNormedAddCommGroup
f g : { x // x ∈ Lp E p }
hfg : ↑↑|f| ≤ᵐ[μ] ↑↑|g|
⊢ ∀ᵐ (x : α) ∂μ, ‖↑↑f x‖ ≤ ‖↑↑g x‖
[PROOFSTEP]
filter_upwards [hfg, Lp.coeFn_abs f, Lp.coeFn_abs g] with x hx hxf hxg
[GOAL]
case h
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝¹ : NormedLatticeAddCommGroup E
inst✝ : Fact (1 ≤ p)
src✝¹ : Lattice { x // x ∈ Lp E p } := instLattice
src✝ : NormedAddCommGroup { x // x ∈ Lp E p } := instNormedAddCommGroup
f g : { x // x ∈ Lp E p }
hfg : ↑↑|f| ≤ᵐ[μ] ↑↑|g|
x : α
hx : ↑↑|f| x ≤ ↑↑|g| x
hxf : ↑↑|f| x = |↑↑f x|
hxg : ↑↑|g| x = |↑↑g x|
⊢ ‖↑↑f x‖ ≤ ‖↑↑g x‖
[PROOFSTEP]
rw [hxf, hxg] at hx
[GOAL]
case h
α : Type u_1
E : Type u_2
m : MeasurableSpace α
μ : Measure α
p : ℝ≥0∞
inst✝¹ : NormedLatticeAddCommGroup E
inst✝ : Fact (1 ≤ p)
src✝¹ : Lattice { x // x ∈ Lp E p } := instLattice
src✝ : NormedAddCommGroup { x // x ∈ Lp E p } := instNormedAddCommGroup
f g : { x // x ∈ Lp E p }
hfg : ↑↑|f| ≤ᵐ[μ] ↑↑|g|
x : α
hx : |↑↑f x| ≤ |↑↑g x|
hxf : ↑↑|f| x = |↑↑f x|
hxg : ↑↑|g| x = |↑↑g x|
⊢ ‖↑↑f x‖ ≤ ‖↑↑g x‖
[PROOFSTEP]
exact HasSolidNorm.solid hx