[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDerivWithin n f univ = iteratedDeriv n f
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDerivWithin n f univ x = iteratedDeriv n f x
[PROOFSTEP]
rw [iteratedDerivWithin, iteratedDeriv, iteratedFDerivWithin_univ]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDerivWithin n f s =
    ↑(LinearIsometryEquiv.symm (ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F)) ∘ iteratedFDerivWithin 𝕜 n f s
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDerivWithin n f s x =
    (↑(LinearIsometryEquiv.symm (ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F)) ∘ iteratedFDerivWithin 𝕜 n f s) x
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedFDerivWithin 𝕜 n f s = ↑(ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F) ∘ iteratedDerivWithin n f s
[PROOFSTEP]
rw [iteratedDerivWithin_eq_equiv_comp, ← Function.comp.assoc, LinearIsometryEquiv.self_comp_symm, Function.left_id]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
m : Fin n → 𝕜
⊢ ↑(iteratedFDerivWithin 𝕜 n f s x) m = (∏ i : Fin n, m i) • iteratedDerivWithin n f s x
[PROOFSTEP]
rw [iteratedDerivWithin_eq_iteratedFDerivWithin, ← ContinuousMultilinearMap.map_smul_univ]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
m : Fin n → 𝕜
⊢ ↑(iteratedFDerivWithin 𝕜 n f s x) m = ↑(iteratedFDerivWithin 𝕜 n f s x) fun i => m i • 1
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ ‖iteratedFDerivWithin 𝕜 n f s x‖ = ‖iteratedDerivWithin n f s x‖
[PROOFSTEP]
rw [iteratedDerivWithin_eq_equiv_comp, Function.comp_apply, LinearIsometryEquiv.norm_map]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDerivWithin 0 f s = f
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDerivWithin 0 f s x = f x
[PROOFSTEP]
simp [iteratedDerivWithin]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
h : UniqueDiffWithinAt 𝕜 s x
⊢ iteratedDerivWithin 1 f s x = derivWithin f s x
[PROOFSTEP]
simp only [iteratedDerivWithin, iteratedFDerivWithin_one_apply h]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
h : UniqueDiffWithinAt 𝕜 s x
⊢ ↑(fderivWithin 𝕜 f s x) 1 = derivWithin f s x
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
Hcont : ∀ (m : ℕ), ↑m ≤ n → ContinuousOn (fun x => iteratedDerivWithin m f s x) s
Hdiff : ∀ (m : ℕ), ↑m < n → DifferentiableOn 𝕜 (fun x => iteratedDerivWithin m f s x) s
⊢ ContDiffOn 𝕜 n f s
[PROOFSTEP]
apply contDiffOn_of_continuousOn_differentiableOn
[GOAL]
case Hcont
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
Hcont : ∀ (m : ℕ), ↑m ≤ n → ContinuousOn (fun x => iteratedDerivWithin m f s x) s
Hdiff : ∀ (m : ℕ), ↑m < n → DifferentiableOn 𝕜 (fun x => iteratedDerivWithin m f s x) s
⊢ ∀ (m : ℕ), ↑m ≤ n → ContinuousOn (fun x => iteratedFDerivWithin 𝕜 m f s x) s
[PROOFSTEP]
simpa only [iteratedFDerivWithin_eq_equiv_comp, LinearIsometryEquiv.comp_continuousOn_iff]
[GOAL]
case Hdiff
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
Hcont : ∀ (m : ℕ), ↑m ≤ n → ContinuousOn (fun x => iteratedDerivWithin m f s x) s
Hdiff : ∀ (m : ℕ), ↑m < n → DifferentiableOn 𝕜 (fun x => iteratedDerivWithin m f s x) s
⊢ ∀ (m : ℕ), ↑m < n → DifferentiableOn 𝕜 (fun x => iteratedFDerivWithin 𝕜 m f s x) s
[PROOFSTEP]
simpa only [iteratedFDerivWithin_eq_equiv_comp, LinearIsometryEquiv.comp_differentiableOn_iff]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
h : ∀ (m : ℕ), ↑m ≤ n → DifferentiableOn 𝕜 (iteratedDerivWithin m f s) s
⊢ ContDiffOn 𝕜 n f s
[PROOFSTEP]
apply contDiffOn_of_differentiableOn
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
h : ∀ (m : ℕ), ↑m ≤ n → DifferentiableOn 𝕜 (iteratedDerivWithin m f s) s
⊢ ∀ (m : ℕ), ↑m ≤ n → DifferentiableOn 𝕜 (iteratedFDerivWithin 𝕜 m f s) s
[PROOFSTEP]
simpa only [iteratedFDerivWithin_eq_equiv_comp, LinearIsometryEquiv.comp_differentiableOn_iff]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
m : ℕ
h : ContDiffOn 𝕜 n f s
hmn : ↑m ≤ n
hs : UniqueDiffOn 𝕜 s
⊢ ContinuousOn (iteratedDerivWithin m f s) s
[PROOFSTEP]
simpa only [iteratedDerivWithin_eq_equiv_comp, LinearIsometryEquiv.comp_continuousOn_iff] using
  h.continuousOn_iteratedFDerivWithin hmn hs
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
m : ℕ
h : ContDiffWithinAt 𝕜 n f s x
hmn : ↑m < n
hs : UniqueDiffOn 𝕜 (insert x s)
⊢ DifferentiableWithinAt 𝕜 (iteratedDerivWithin m f s) s x
[PROOFSTEP]
simpa only [iteratedDerivWithin_eq_equiv_comp, LinearIsometryEquiv.comp_differentiableWithinAt_iff] using
  h.differentiableWithinAt_iteratedFDerivWithin hmn hs
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ : 𝕜
n : ℕ∞
m : ℕ
h : ContDiffOn 𝕜 n f s
hmn : ↑m < n
hs : UniqueDiffOn 𝕜 s
x : 𝕜
hx : x ∈ s
⊢ UniqueDiffOn 𝕜 (insert x s)
[PROOFSTEP]
rwa [insert_eq_of_mem hx]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
hs : UniqueDiffOn 𝕜 s
⊢ ContDiffOn 𝕜 n f s ↔
    (∀ (m : ℕ), ↑m ≤ n → ContinuousOn (iteratedDerivWithin m f s) s) ∧
      ∀ (m : ℕ), ↑m < n → DifferentiableOn 𝕜 (iteratedDerivWithin m f s) s
[PROOFSTEP]
simp only [contDiffOn_iff_continuousOn_differentiableOn hs, iteratedFDerivWithin_eq_equiv_comp,
  LinearIsometryEquiv.comp_continuousOn_iff, LinearIsometryEquiv.comp_differentiableOn_iff]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
hxs : UniqueDiffWithinAt 𝕜 s x
⊢ iteratedDerivWithin (n + 1) f s x = derivWithin (iteratedDerivWithin n f s) s x
[PROOFSTEP]
rw [iteratedDerivWithin_eq_iteratedFDerivWithin, iteratedFDerivWithin_succ_apply_left,
  iteratedFDerivWithin_eq_equiv_comp, LinearIsometryEquiv.comp_fderivWithin _ hxs, derivWithin]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
hxs : UniqueDiffWithinAt 𝕜 s x
⊢ ↑(↑(ContinuousLinearMap.comp
              (↑(ContinuousLinearEquiv.mk (ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F).toLinearEquiv))
              (fderivWithin 𝕜 (iteratedDerivWithin n f s) s x))
          1)
      (Fin.tail fun x => 1) =
    ↑(fderivWithin 𝕜 (iteratedDerivWithin n f s) s x) 1
[PROOFSTEP]
change
  ((ContinuousMultilinearMap.mkPiField 𝕜 (Fin n) ((fderivWithin 𝕜 (iteratedDerivWithin n f s) s x : 𝕜 → F) 1) :
        (Fin n → 𝕜) → F)
      fun i : Fin n => 1) =
    (fderivWithin 𝕜 (iteratedDerivWithin n f s) s x : 𝕜 → F) 1
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
hxs : UniqueDiffWithinAt 𝕜 s x
⊢ (↑(ContinuousMultilinearMap.mkPiField 𝕜 (Fin n) (↑(fderivWithin 𝕜 (iteratedDerivWithin n f s) s x) 1)) fun i => 1) =
    ↑(fderivWithin 𝕜 (iteratedDerivWithin n f s) s x) 1
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
hs : UniqueDiffOn 𝕜 s
hx : x ∈ s
⊢ iteratedDerivWithin n f s x = (fun g => derivWithin g s)^[n] f x
[PROOFSTEP]
induction' n with n IH generalizing x
[GOAL]
case zero
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝¹ x✝ : 𝕜
hs : UniqueDiffOn 𝕜 s
hx✝ : x✝ ∈ s
x : 𝕜
hx : x ∈ s
⊢ iteratedDerivWithin Nat.zero f s x = (fun g => derivWithin g s)^[Nat.zero] f x
[PROOFSTEP]
simp
[GOAL]
case succ
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝¹ x✝ : 𝕜
hs : UniqueDiffOn 𝕜 s
hx✝ : x✝ ∈ s
n : ℕ
IH : ∀ {x : 𝕜}, x ∈ s → iteratedDerivWithin n f s x = (fun g => derivWithin g s)^[n] f x
x : 𝕜
hx : x ∈ s
⊢ iteratedDerivWithin (Nat.succ n) f s x = (fun g => derivWithin g s)^[Nat.succ n] f x
[PROOFSTEP]
rw [iteratedDerivWithin_succ (hs x hx), Function.iterate_succ']
[GOAL]
case succ
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝¹ x✝ : 𝕜
hs : UniqueDiffOn 𝕜 s
hx✝ : x✝ ∈ s
n : ℕ
IH : ∀ {x : 𝕜}, x ∈ s → iteratedDerivWithin n f s x = (fun g => derivWithin g s)^[n] f x
x : 𝕜
hx : x ∈ s
⊢ derivWithin (iteratedDerivWithin n f s) s x = ((fun g => derivWithin g s) ∘ (fun g => derivWithin g s)^[n]) f x
[PROOFSTEP]
exact derivWithin_congr (fun y hy => IH hy) (IH hx)
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
hxs : UniqueDiffOn 𝕜 s
hx : x ∈ s
⊢ iteratedDerivWithin (n + 1) f s x = iteratedDerivWithin n (derivWithin f s) s x
[PROOFSTEP]
rw [iteratedDerivWithin_eq_iterate hxs hx, iteratedDerivWithin_eq_iterate hxs hx]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
hxs : UniqueDiffOn 𝕜 s
hx : x ∈ s
⊢ (fun g => derivWithin g s)^[n + 1] f x = (fun g => derivWithin g s)^[n] (derivWithin f s) x
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDeriv n f =
    ↑(LinearIsometryEquiv.symm (ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F)) ∘ iteratedFDeriv 𝕜 n f
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDeriv n f x =
    (↑(LinearIsometryEquiv.symm (ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F)) ∘ iteratedFDeriv 𝕜 n f) x
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedFDeriv 𝕜 n f = ↑(ContinuousMultilinearMap.piFieldEquiv 𝕜 (Fin n) F) ∘ iteratedDeriv n f
[PROOFSTEP]
rw [iteratedDeriv_eq_equiv_comp, ← Function.comp.assoc, LinearIsometryEquiv.self_comp_symm, Function.left_id]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
m : Fin n → 𝕜
⊢ ↑(iteratedFDeriv 𝕜 n f x) m = (∏ i : Fin n, m i) • iteratedDeriv n f x
[PROOFSTEP]
rw [iteratedDeriv_eq_iteratedFDeriv, ← ContinuousMultilinearMap.map_smul_univ]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
m : Fin n → 𝕜
⊢ ↑(iteratedFDeriv 𝕜 n f x) m = ↑(iteratedFDeriv 𝕜 n f x) fun i => m i • 1
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ ‖iteratedFDeriv 𝕜 n f x‖ = ‖iteratedDeriv n f x‖
[PROOFSTEP]
rw [iteratedDeriv_eq_equiv_comp, Function.comp_apply, LinearIsometryEquiv.norm_map]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDeriv 0 f = f
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDeriv 0 f x = f x
[PROOFSTEP]
simp [iteratedDeriv]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDeriv 1 f = deriv f
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDeriv 1 f x = deriv f x
[PROOFSTEP]
simp [iteratedDeriv]
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ ↑(fderiv 𝕜 f x) 1 = deriv f x
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n✝ : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
n : ℕ∞
⊢ ContDiff 𝕜 n f ↔
    (∀ (m : ℕ), ↑m ≤ n → Continuous (iteratedDeriv m f)) ∧ ∀ (m : ℕ), ↑m < n → Differentiable 𝕜 (iteratedDeriv m f)
[PROOFSTEP]
simp only [contDiff_iff_continuous_differentiable, iteratedFDeriv_eq_equiv_comp,
  LinearIsometryEquiv.comp_continuous_iff, LinearIsometryEquiv.comp_differentiable_iff]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDeriv (n + 1) f = deriv (iteratedDeriv n f)
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDeriv (n + 1) f x = deriv (iteratedDeriv n f) x
[PROOFSTEP]
rw [← iteratedDerivWithin_univ, ← iteratedDerivWithin_univ, ← derivWithin_univ]
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDerivWithin (n + 1) f univ x = derivWithin (iteratedDerivWithin n f univ) univ x
[PROOFSTEP]
exact iteratedDerivWithin_succ uniqueDiffWithinAt_univ
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDeriv n f = deriv^[n] f
[PROOFSTEP]
ext x
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDeriv n f x = deriv^[n] f x
[PROOFSTEP]
rw [← iteratedDerivWithin_univ]
[GOAL]
case h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝ x : 𝕜
⊢ iteratedDerivWithin n f univ x = deriv^[n] f x
[PROOFSTEP]
convert iteratedDerivWithin_eq_iterate uniqueDiffOn_univ (F := F) (mem_univ x)
[GOAL]
case h.e'_3.h.e'_1.h
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x✝¹ x : 𝕜
x✝ : 𝕜 → F
⊢ deriv x✝ = derivWithin x✝ univ
[PROOFSTEP]
simp [derivWithin_univ]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ iteratedDeriv (n + 1) f = iteratedDeriv n (deriv f)
[PROOFSTEP]
rw [iteratedDeriv_eq_iterate, iteratedDeriv_eq_iterate]
[GOAL]
𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
n : ℕ
f : 𝕜 → F
s : Set 𝕜
x : 𝕜
⊢ deriv^[n + 1] f = deriv^[n] (deriv f)
[PROOFSTEP]
rfl


[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
[PROOFSTEP]
classical
revert hσ σ hfg
apply
  Finset.induction_on_max_value (fun i ↦ toLex (g i, f i)) (p := fun t ↦
    ∀ {σ : Perm ι}, MonovaryOn f g t → {x | σ x ≠ x} ⊆ t → (∑ i in t, f i • g (σ i)) ≤ ∑ i in t, f i • g i) s
· simp only [le_rfl, Finset.sum_empty, imp_true_iff]
intro a s has hamax hind σ hfg hσ
set τ : Perm ι := σ.trans (swap a (σ a)) with hτ
have hτs : {x | τ x ≠ x} ⊆ s := by
  intro x hx
  simp only [Ne.def, Set.mem_setOf_eq, Equiv.coe_trans, Equiv.swap_comp_apply] at hx
  split_ifs at hx  with h₁ h₂
  · obtain rfl | hax := eq_or_ne x a
    · contradiction
    · exact mem_of_mem_insert_of_ne (hσ fun h ↦ hax <| h.symm.trans h₁) hax
  · exact (hx <| σ.injective h₂.symm).elim
  · exact mem_of_mem_insert_of_ne (hσ hx) (ne_of_apply_ne _ h₂)
specialize hind (hfg.subset <| subset_insert _ _) hτs
simp_rw [sum_insert has]
refine' le_trans _ (add_le_add_left hind _)
obtain hσa | hσa := eq_or_ne a (σ a)
· rw [hτ, ← hσa, swap_self, trans_refl]
have h1s : σ⁻¹ a ∈ s := by
  rw [Ne.def, ← inv_eq_iff_eq] at hσa
  refine' mem_of_mem_insert_of_ne (hσ fun h ↦ hσa _) hσa
  rwa [apply_inv_self, eq_comm] at h
simp only [← s.sum_erase_add _ h1s, add_comm]
rw [← add_assoc, ← add_assoc]
simp only [hτ, swap_apply_left, Function.comp_apply, Equiv.coe_trans, apply_inv_self]
refine' add_le_add (smul_add_smul_le_smul_add_smul' _ _) (sum_congr rfl fun x hx ↦ _).le
· specialize hamax (σ⁻¹ a) h1s
  rw [Prod.Lex.le_iff] at hamax
  cases' hamax with hamax hamax
  · exact hfg (mem_insert_of_mem h1s) (mem_insert_self _ _) hamax
  · exact hamax.2
· specialize hamax (σ a) (mem_of_mem_insert_of_ne (hσ <| σ.injective.ne hσa.symm) hσa.symm)
  rw [Prod.Lex.le_iff] at hamax
  cases' hamax with hamax hamax
  · exact hamax.le
  · exact hamax.1.le
· rw [mem_erase, Ne.def, eq_inv_iff_eq] at hx
  rw [swap_apply_of_ne_of_ne hx.1 (σ.injective.ne _)]
  rintro rfl
  exact has hx.2
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
[PROOFSTEP]
revert hσ σ hfg
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
f : ι → α
g : ι → β
⊢ ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
[PROOFSTEP]
apply
  Finset.induction_on_max_value (fun i ↦ toLex (g i, f i)) (p := fun t ↦
    ∀ {σ : Perm ι}, MonovaryOn f g t → {x | σ x ≠ x} ⊆ t → (∑ i in t, f i • g (σ i)) ≤ ∑ i in t, f i • g i) s
[GOAL]
case h0
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
f : ι → α
g : ι → β
⊢ ∀ {σ : Perm ι}, MonovaryOn f g ↑∅ → {x | ↑σ x ≠ x} ⊆ ↑∅ → ∑ i in ∅, f i • g (↑σ i) ≤ ∑ i in ∅, f i • g i
[PROOFSTEP]
simp only [le_rfl, Finset.sum_empty, imp_true_iff]
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
f : ι → α
g : ι → β
⊢ ∀ (a : ι) (s : Finset ι),
    ¬a ∈ s →
      (∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)) →
        (∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i) →
          ∀ {σ : Perm ι},
            MonovaryOn f g ↑(insert a s) →
              {x | ↑σ x ≠ x} ⊆ ↑(insert a s) → ∑ i in insert a s, f i • g (↑σ i) ≤ ∑ i in insert a s, f i • g i
[PROOFSTEP]
intro a s has hamax hind σ hfg hσ
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
⊢ ∑ i in insert a s, f i • g (↑σ i) ≤ ∑ i in insert a s, f i • g i
[PROOFSTEP]
set τ : Perm ι := σ.trans (swap a (σ a)) with hτ
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
⊢ ∑ i in insert a s, f i • g (↑σ i) ≤ ∑ i in insert a s, f i • g i
[PROOFSTEP]
have hτs : {x | τ x ≠ x} ⊆ s := by
  intro x hx
  simp only [Ne.def, Set.mem_setOf_eq, Equiv.coe_trans, Equiv.swap_comp_apply] at hx
  split_ifs at hx  with h₁ h₂
  · obtain rfl | hax := eq_or_ne x a
    · contradiction
    · exact mem_of_mem_insert_of_ne (hσ fun h ↦ hax <| h.symm.trans h₁) hax
  · exact (hx <| σ.injective h₂.symm).elim
  · exact mem_of_mem_insert_of_ne (hσ hx) (ne_of_apply_ne _ h₂)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
⊢ {x | ↑τ x ≠ x} ⊆ ↑s
[PROOFSTEP]
intro x hx
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
x : ι
hx : x ∈ {x | ↑τ x ≠ x}
⊢ x ∈ ↑s
[PROOFSTEP]
simp only [Ne.def, Set.mem_setOf_eq, Equiv.coe_trans, Equiv.swap_comp_apply] at hx
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
x : ι
hx : ¬(if ↑σ x = a then ↑σ a else if ↑σ x = ↑σ a then a else ↑σ x) = x
⊢ x ∈ ↑s
[PROOFSTEP]
split_ifs at hx  with h₁ h₂
[GOAL]
case pos
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
x : ι
h₁ : ↑σ x = a
hx : ¬↑σ a = x
⊢ x ∈ ↑s
[PROOFSTEP]
obtain rfl | hax := eq_or_ne x a
[GOAL]
case pos.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
s : Finset ι
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
x : ι
has : ¬x ∈ s
hamax : ∀ (x_1 : ι), x_1 ∈ s → ↑toLex (g x_1, f x_1) ≤ ↑toLex (g x, f x)
hfg : MonovaryOn f g ↑(insert x s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert x s)
τ : Perm ι := σ.trans (Equiv.swap x (↑σ x))
hτ : τ = σ.trans (Equiv.swap x (↑σ x))
h₁ : ↑σ x = x
hx : ¬↑σ x = x
⊢ x ∈ ↑s
[PROOFSTEP]
contradiction
[GOAL]
case pos.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
x : ι
h₁ : ↑σ x = a
hx : ¬↑σ a = x
hax : x ≠ a
⊢ x ∈ ↑s
[PROOFSTEP]
exact mem_of_mem_insert_of_ne (hσ fun h ↦ hax <| h.symm.trans h₁) hax
[GOAL]
case pos
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
x : ι
h₁ : ¬↑σ x = a
h₂ : ↑σ x = ↑σ a
hx : ¬a = x
⊢ x ∈ ↑s
[PROOFSTEP]
exact (hx <| σ.injective h₂.symm).elim
[GOAL]
case neg
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
x : ι
h₁ : ¬↑σ x = a
h₂ : ¬↑σ x = ↑σ a
hx : ¬↑σ x = x
⊢ x ∈ ↑s
[PROOFSTEP]
exact mem_of_mem_insert_of_ne (hσ hx) (ne_of_apply_ne _ h₂)
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
hind : ∀ {σ : Perm ι}, MonovaryOn f g ↑s → {x | ↑σ x ≠ x} ⊆ ↑s → ∑ i in s, f i • g (↑σ i) ≤ ∑ i in s, f i • g i
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
⊢ ∑ i in insert a s, f i • g (↑σ i) ≤ ∑ i in insert a s, f i • g i
[PROOFSTEP]
specialize hind (hfg.subset <| subset_insert _ _) hτs
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
⊢ ∑ i in insert a s, f i • g (↑σ i) ≤ ∑ i in insert a s, f i • g i
[PROOFSTEP]
simp_rw [sum_insert has]
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
⊢ f a • g (↑σ a) + ∑ x in s, f x • g (↑σ x) ≤ f a • g a + ∑ i in s, f i • g i
[PROOFSTEP]
refine' le_trans _ (add_le_add_left hind _)
[GOAL]
case step
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
⊢ f a • g (↑σ a) + ∑ x in s, f x • g (↑σ x) ≤ f a • g a + ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
obtain hσa | hσa := eq_or_ne a (σ a)
[GOAL]
case step.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a = ↑σ a
⊢ f a • g (↑σ a) + ∑ x in s, f x • g (↑σ x) ≤ f a • g a + ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
rw [hτ, ← hσa, swap_self, trans_refl]
[GOAL]
case step.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
⊢ f a • g (↑σ a) + ∑ x in s, f x • g (↑σ x) ≤ f a • g a + ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
have h1s : σ⁻¹ a ∈ s := by
  rw [Ne.def, ← inv_eq_iff_eq] at hσa
  refine' mem_of_mem_insert_of_ne (hσ fun h ↦ hσa _) hσa
  rwa [apply_inv_self, eq_comm] at h
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
⊢ ↑σ⁻¹ a ∈ s
[PROOFSTEP]
rw [Ne.def, ← inv_eq_iff_eq] at hσa
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : ¬↑σ⁻¹ a = a
⊢ ↑σ⁻¹ a ∈ s
[PROOFSTEP]
refine' mem_of_mem_insert_of_ne (hσ fun h ↦ hσa _) hσa
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : ¬↑σ⁻¹ a = a
h : ↑σ (↑σ⁻¹ a) = ↑σ⁻¹ a
⊢ ↑σ⁻¹ a = a
[PROOFSTEP]
rwa [apply_inv_self, eq_comm] at h
[GOAL]
case step.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
⊢ f a • g (↑σ a) + ∑ x in s, f x • g (↑σ x) ≤ f a • g a + ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
simp only [← s.sum_erase_add _ h1s, add_comm]
[GOAL]
case step.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
⊢ f a • g (↑σ a) + (f (↑σ⁻¹ a) • g (↑σ (↑σ⁻¹ a)) + ∑ x in erase s (↑σ⁻¹ a), f x • g (↑σ x)) ≤
    f a • g a +
      (f (↑σ⁻¹ a) • g (↑(σ.trans (Equiv.swap a (↑σ a))) (↑σ⁻¹ a)) +
        ∑ x in erase s (↑σ⁻¹ a), f x • g (↑(σ.trans (Equiv.swap a (↑σ a))) x))
[PROOFSTEP]
rw [← add_assoc, ← add_assoc]
[GOAL]
case step.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
⊢ f a • g (↑σ a) + f (↑σ⁻¹ a) • g (↑σ (↑σ⁻¹ a)) + ∑ x in erase s (↑σ⁻¹ a), f x • g (↑σ x) ≤
    f a • g a + f (↑σ⁻¹ a) • g (↑(σ.trans (Equiv.swap a (↑σ a))) (↑σ⁻¹ a)) +
      ∑ x in erase s (↑σ⁻¹ a), f x • g (↑(σ.trans (Equiv.swap a (↑σ a))) x)
[PROOFSTEP]
simp only [hτ, swap_apply_left, Function.comp_apply, Equiv.coe_trans, apply_inv_self]
[GOAL]
case step.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
⊢ f a • g (↑σ a) + f (↑σ⁻¹ a) • g a + ∑ x in erase s (↑σ⁻¹ a), f x • g (↑σ x) ≤
    f a • g a + f (↑σ⁻¹ a) • g (↑σ a) + ∑ x in erase s (↑σ⁻¹ a), f x • g (↑(Equiv.swap a (↑σ a)) (↑σ x))
[PROOFSTEP]
refine' add_le_add (smul_add_smul_le_smul_add_smul' _ _) (sum_congr rfl fun x hx ↦ _).le
[GOAL]
case step.inr.refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
⊢ f (↑σ⁻¹ a) ≤ f a
[PROOFSTEP]
specialize hamax (σ⁻¹ a) h1s
[GOAL]
case step.inr.refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax : ↑toLex (g (↑σ⁻¹ a), f (↑σ⁻¹ a)) ≤ ↑toLex (g a, f a)
⊢ f (↑σ⁻¹ a) ≤ f a
[PROOFSTEP]
rw [Prod.Lex.le_iff] at hamax
[GOAL]
case step.inr.refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax :
  (g (↑σ⁻¹ a), f (↑σ⁻¹ a)).fst < (g a, f a).fst ∨
    (g (↑σ⁻¹ a), f (↑σ⁻¹ a)).fst = (g a, f a).fst ∧ (g (↑σ⁻¹ a), f (↑σ⁻¹ a)).snd ≤ (g a, f a).snd
⊢ f (↑σ⁻¹ a) ≤ f a
[PROOFSTEP]
cases' hamax with hamax hamax
[GOAL]
case step.inr.refine'_1.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax : (g (↑σ⁻¹ a), f (↑σ⁻¹ a)).fst < (g a, f a).fst
⊢ f (↑σ⁻¹ a) ≤ f a
[PROOFSTEP]
exact hfg (mem_insert_of_mem h1s) (mem_insert_self _ _) hamax
[GOAL]
case step.inr.refine'_1.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax : (g (↑σ⁻¹ a), f (↑σ⁻¹ a)).fst = (g a, f a).fst ∧ (g (↑σ⁻¹ a), f (↑σ⁻¹ a)).snd ≤ (g a, f a).snd
⊢ f (↑σ⁻¹ a) ≤ f a
[PROOFSTEP]
exact hamax.2
[GOAL]
case step.inr.refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
⊢ g (↑σ a) ≤ g a
[PROOFSTEP]
specialize hamax (σ a) (mem_of_mem_insert_of_ne (hσ <| σ.injective.ne hσa.symm) hσa.symm)
[GOAL]
case step.inr.refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax : ↑toLex (g (↑σ a), f (↑σ a)) ≤ ↑toLex (g a, f a)
⊢ g (↑σ a) ≤ g a
[PROOFSTEP]
rw [Prod.Lex.le_iff] at hamax
[GOAL]
case step.inr.refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax :
  (g (↑σ a), f (↑σ a)).fst < (g a, f a).fst ∨
    (g (↑σ a), f (↑σ a)).fst = (g a, f a).fst ∧ (g (↑σ a), f (↑σ a)).snd ≤ (g a, f a).snd
⊢ g (↑σ a) ≤ g a
[PROOFSTEP]
cases' hamax with hamax hamax
[GOAL]
case step.inr.refine'_2.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax : (g (↑σ a), f (↑σ a)).fst < (g a, f a).fst
⊢ g (↑σ a) ≤ g a
[PROOFSTEP]
exact hamax.le
[GOAL]
case step.inr.refine'_2.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
hamax : (g (↑σ a), f (↑σ a)).fst = (g a, f a).fst ∧ (g (↑σ a), f (↑σ a)).snd ≤ (g a, f a).snd
⊢ g (↑σ a) ≤ g a
[PROOFSTEP]
exact hamax.1.le
[GOAL]
case step.inr.refine'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
x : ι
hx : x ∈ erase s (↑σ⁻¹ a)
⊢ f x • g (↑σ x) = f x • g (↑(Equiv.swap a (↑σ a)) (↑σ x))
[PROOFSTEP]
rw [mem_erase, Ne.def, eq_inv_iff_eq] at hx
[GOAL]
case step.inr.refine'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
x : ι
hx : ¬↑σ x = a ∧ x ∈ s
⊢ f x • g (↑σ x) = f x • g (↑(Equiv.swap a (↑σ a)) (↑σ x))
[PROOFSTEP]
rw [swap_apply_of_ne_of_ne hx.1 (σ.injective.ne _)]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
a : ι
s : Finset ι
has : ¬a ∈ s
hamax : ∀ (x : ι), x ∈ s → ↑toLex (g x, f x) ≤ ↑toLex (g a, f a)
σ : Perm ι
hfg : MonovaryOn f g ↑(insert a s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert a s)
τ : Perm ι := σ.trans (Equiv.swap a (↑σ a))
hτ : τ = σ.trans (Equiv.swap a (↑σ a))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : a ≠ ↑σ a
h1s : ↑σ⁻¹ a ∈ s
x : ι
hx : ¬↑σ x = a ∧ x ∈ s
⊢ x ≠ a
[PROOFSTEP]
rintro rfl
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s✝ : Finset ι
f : ι → α
g : ι → β
s : Finset ι
σ : Perm ι
x : ι
has : ¬x ∈ s
hamax : ∀ (x_1 : ι), x_1 ∈ s → ↑toLex (g x_1, f x_1) ≤ ↑toLex (g x, f x)
hfg : MonovaryOn f g ↑(insert x s)
hσ : {x | ↑σ x ≠ x} ⊆ ↑(insert x s)
τ : Perm ι := σ.trans (Equiv.swap x (↑σ x))
hτ : τ = σ.trans (Equiv.swap x (↑σ x))
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hind : ∑ i in s, f i • g (↑τ i) ≤ ∑ i in s, f i • g i
hσa : x ≠ ↑σ x
h1s : ↑σ⁻¹ x ∈ s
hx : ¬↑σ x = x ∧ x ∈ s
⊢ False
[PROOFSTEP]
exact has hx.2
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i ↔ MonovaryOn f (g ∘ ↑σ) ↑s
[PROOFSTEP]
classical
refine' ⟨not_imp_not.1 fun h ↦ _, fun h ↦ (hfg.sum_smul_comp_perm_le_sum_smul hσ).antisymm _⟩
· rw [MonovaryOn] at h
  push_neg at h
  obtain ⟨x, hx, y, hy, hgxy, hfxy⟩ := h
  set τ : Perm ι := (Equiv.swap x y).trans σ
  have hτs : {x | τ x ≠ x} ⊆ s :=
    by
    refine' (set_support_mul_subset σ <| swap x y).trans (Set.union_subset hσ fun z hz ↦ _)
    obtain ⟨_, rfl | rfl⟩ := swap_apply_ne_self_iff.1 hz <;> assumption
  refine' ((hfg.sum_smul_comp_perm_le_sum_smul hτs).trans_lt' _).ne
  obtain rfl | hxy := eq_or_ne x y
  · cases lt_irrefl _ hfxy
  simp only [← s.sum_erase_add _ hx, ← (s.erase x).sum_erase_add _ (mem_erase.2 ⟨hxy.symm, hy⟩), add_assoc,
    Equiv.coe_trans, Function.comp_apply, swap_apply_right, swap_apply_left]
  refine' add_lt_add_of_le_of_lt (Finset.sum_congr rfl fun z hz ↦ _).le (smul_add_smul_lt_smul_add_smul hfxy hgxy)
  simp_rw [mem_erase] at hz
  rw [swap_apply_of_ne_of_ne hz.2.1 hz.1]
· convert h.sum_smul_comp_perm_le_sum_smul ((set_support_inv_eq _).subset.trans hσ) using 1
  simp_rw [Function.comp_apply, apply_inv_self]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i ↔ MonovaryOn f (g ∘ ↑σ) ↑s
[PROOFSTEP]
refine' ⟨not_imp_not.1 fun h ↦ _, fun h ↦ (hfg.sum_smul_comp_perm_le_sum_smul hσ).antisymm _⟩
[GOAL]
case refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
h : ¬MonovaryOn f (g ∘ ↑σ) ↑s
⊢ ¬∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i
[PROOFSTEP]
rw [MonovaryOn] at h
[GOAL]
case refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
h : ¬∀ ⦃i : ι⦄, i ∈ ↑s → ∀ ⦃j : ι⦄, j ∈ ↑s → (g ∘ ↑σ) i < (g ∘ ↑σ) j → f i ≤ f j
⊢ ¬∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i
[PROOFSTEP]
push_neg at h
[GOAL]
case refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
h : Exists fun ⦃i⦄ => i ∈ ↑s ∧ Exists fun ⦃j⦄ => j ∈ ↑s ∧ (g ∘ ↑σ) i < (g ∘ ↑σ) j ∧ f j < f i
⊢ ¬∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i
[PROOFSTEP]
obtain ⟨x, hx, y, hy, hgxy, hfxy⟩ := h
[GOAL]
case refine'_1.intro.intro.intro.intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
⊢ ¬∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i
[PROOFSTEP]
set τ : Perm ι := (Equiv.swap x y).trans σ
[GOAL]
case refine'_1.intro.intro.intro.intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
⊢ ¬∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i
[PROOFSTEP]
have hτs : {x | τ x ≠ x} ⊆ s :=
  by
  refine' (set_support_mul_subset σ <| swap x y).trans (Set.union_subset hσ fun z hz ↦ _)
  obtain ⟨_, rfl | rfl⟩ := swap_apply_ne_self_iff.1 hz <;> assumption
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
⊢ {x | ↑τ x ≠ x} ⊆ ↑s
[PROOFSTEP]
refine' (set_support_mul_subset σ <| swap x y).trans (Set.union_subset hσ fun z hz ↦ _)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
z : ι
hz : z ∈ {x_1 | ↑(Equiv.swap x y) x_1 ≠ x_1}
⊢ z ∈ ↑s
[PROOFSTEP]
obtain ⟨_, rfl | rfl⟩ := swap_apply_ne_self_iff.1 hz
[GOAL]
case intro.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
y : ι
hy : y ∈ ↑s
z : ι
hx : z ∈ ↑s
hgxy : (g ∘ ↑σ) z < (g ∘ ↑σ) y
hfxy : f y < f z
τ : Perm ι := (Equiv.swap z y).trans σ
hz : z ∈ {x | ↑(Equiv.swap z y) x ≠ x}
left✝ : z ≠ y
⊢ z ∈ ↑s
[PROOFSTEP]
assumption
[GOAL]
case intro.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
z : ι
hy : z ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) z
hfxy : f z < f x
τ : Perm ι := (Equiv.swap x z).trans σ
hz : z ∈ {x_1 | ↑(Equiv.swap x z) x_1 ≠ x_1}
left✝ : x ≠ z
⊢ z ∈ ↑s
[PROOFSTEP]
assumption
[GOAL]
case refine'_1.intro.intro.intro.intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
⊢ ¬∑ i in s, f i • g (↑σ i) = ∑ i in s, f i • g i
[PROOFSTEP]
refine' ((hfg.sum_smul_comp_perm_le_sum_smul hτs).trans_lt' _).ne
[GOAL]
case refine'_1.intro.intro.intro.intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) < ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
obtain rfl | hxy := eq_or_ne x y
[GOAL]
case refine'_1.intro.intro.intro.intro.intro.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx hy : x ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) x
hfxy : f x < f x
τ : Perm ι := (Equiv.swap x x).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) < ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
cases lt_irrefl _ hfxy
[GOAL]
case refine'_1.intro.intro.intro.intro.intro.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hxy : x ≠ y
⊢ ∑ i in s, f i • g (↑σ i) < ∑ i in s, f i • g (↑τ i)
[PROOFSTEP]
simp only [← s.sum_erase_add _ hx, ← (s.erase x).sum_erase_add _ (mem_erase.2 ⟨hxy.symm, hy⟩), add_assoc,
  Equiv.coe_trans, Function.comp_apply, swap_apply_right, swap_apply_left]
[GOAL]
case refine'_1.intro.intro.intro.intro.intro.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hxy : x ≠ y
⊢ ∑ x in erase (erase s x) y, f x • g (↑σ x) + (f y • g (↑σ y) + f x • g (↑σ x)) <
    ∑ x_1 in erase (erase s x) y, f x_1 • g (↑σ (↑(Equiv.swap x y) x_1)) + (f y • g (↑σ x) + f x • g (↑σ y))
[PROOFSTEP]
refine' add_lt_add_of_le_of_lt (Finset.sum_congr rfl fun z hz ↦ _).le (smul_add_smul_lt_smul_add_smul hfxy hgxy)
[GOAL]
case refine'_1.intro.intro.intro.intro.intro.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hxy : x ≠ y
z : ι
hz : z ∈ erase (erase s x) y
⊢ f z • g (↑σ z) = f z • g (↑σ (↑(Equiv.swap x y) z))
[PROOFSTEP]
simp_rw [mem_erase] at hz
[GOAL]
case refine'_1.intro.intro.intro.intro.intro.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
x : ι
hx : x ∈ ↑s
y : ι
hy : y ∈ ↑s
hgxy : (g ∘ ↑σ) x < (g ∘ ↑σ) y
hfxy : f y < f x
τ : Perm ι := (Equiv.swap x y).trans σ
hτs : {x | ↑τ x ≠ x} ⊆ ↑s
hxy : x ≠ y
z : ι
hz : z ≠ y ∧ z ≠ x ∧ z ∈ s
⊢ f z • g (↑σ z) = f z • g (↑σ (↑(Equiv.swap x y) z))
[PROOFSTEP]
rw [swap_apply_of_ne_of_ne hz.2.1 hz.1]
[GOAL]
case refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
h : MonovaryOn f (g ∘ ↑σ) ↑s
⊢ ∑ i in s, f i • g i ≤ ∑ i in s, f i • g (↑σ i)
[PROOFSTEP]
convert h.sum_smul_comp_perm_le_sum_smul ((set_support_inv_eq _).subset.trans hσ) using 1
[GOAL]
case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
h : MonovaryOn f (g ∘ ↑σ) ↑s
⊢ ∑ i in s, f i • g i = ∑ i in s, f i • (g ∘ ↑σ) (↑σ⁻¹ i)
[PROOFSTEP]
simp_rw [Function.comp_apply, apply_inv_self]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g (↑σ i) < ∑ i in s, f i • g i ↔ ¬MonovaryOn f (g ∘ ↑σ) ↑s
[PROOFSTEP]
simp [← hfg.sum_smul_comp_perm_eq_sum_smul_iff hσ, lt_iff_le_and_ne, hfg.sum_smul_comp_perm_le_sum_smul hσ]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i ≤ ∑ i in s, f i • g i
[PROOFSTEP]
convert hfg.sum_smul_comp_perm_le_sum_smul (show {x | σ⁻¹ x ≠ x} ⊆ s by simp only [set_support_inv_eq, hσ]) using 1
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
[PROOFSTEP]
simp only [set_support_inv_eq, hσ]
[GOAL]
case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i = ∑ i in s, f i • g (↑σ⁻¹ i)
[PROOFSTEP]
exact σ.sum_comp' s (fun i j ↦ f i • g j) hσ
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i = ∑ i in s, f i • g i ↔ MonovaryOn (f ∘ ↑σ) g ↑s
[PROOFSTEP]
have hσinv : {x | σ⁻¹ x ≠ x} ⊆ s := (set_support_inv_eq _).subset.trans hσ
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i = ∑ i in s, f i • g i ↔ MonovaryOn (f ∘ ↑σ) g ↑s
[PROOFSTEP]
refine' (Iff.trans _ <| hfg.sum_smul_comp_perm_eq_sum_smul_iff hσinv).trans ⟨fun h ↦ _, fun h ↦ _⟩
[GOAL]
case refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i = ∑ i in s, f i • g i ↔ ∑ i in s, f i • g (↑σ⁻¹ i) = ∑ i in s, f i • g i
[PROOFSTEP]
apply eq_iff_eq_cancel_right.2
[GOAL]
case refine'_1.a
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i = ∑ i in s, f i • g (↑σ⁻¹ i)
[PROOFSTEP]
rw [σ.sum_comp' s (fun i j ↦ f i • g j) hσ]
[GOAL]
case refine'_1.a
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
⊢ ∑ x in s, f x • g (↑σ.symm x) = ∑ i in s, f i • g (↑σ⁻¹ i)
[PROOFSTEP]
congr
[GOAL]
case refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn f (g ∘ ↑σ⁻¹) ↑s
⊢ MonovaryOn (f ∘ ↑σ) g ↑s
[PROOFSTEP]
convert h.comp_right σ
[GOAL]
case h.e'_7
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn f (g ∘ ↑σ⁻¹) ↑s
⊢ g = (g ∘ ↑σ⁻¹) ∘ ↑σ
[PROOFSTEP]
rw [comp.assoc, inv_def, symm_comp_self, comp.right_id]
[GOAL]
case h.e'_8
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn f (g ∘ ↑σ⁻¹) ↑s
⊢ ↑s = ↑σ ⁻¹' ↑s
[PROOFSTEP]
rw [σ.eq_preimage_iff_image_eq, Set.image_perm hσ]
[GOAL]
case refine'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn (f ∘ ↑σ) g ↑s
⊢ MonovaryOn f (g ∘ ↑σ⁻¹) ↑s
[PROOFSTEP]
convert h.comp_right σ.symm
[GOAL]
case h.e'_6
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn (f ∘ ↑σ) g ↑s
⊢ f = (f ∘ ↑σ) ∘ ↑σ.symm
[PROOFSTEP]
rw [comp.assoc, self_comp_symm, comp.right_id]
[GOAL]
case h.e'_8
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn (f ∘ ↑σ) g ↑s
⊢ ↑s = ↑σ.symm ⁻¹' ↑s
[PROOFSTEP]
rw [σ.symm.eq_preimage_iff_image_eq]
[GOAL]
case h.e'_8
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
hσinv : {x | ↑σ⁻¹ x ≠ x} ⊆ ↑s
h : MonovaryOn (f ∘ ↑σ) g ↑s
⊢ ↑σ.symm '' ↑s = ↑s
[PROOFSTEP]
exact Set.image_perm hσinv
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : MonovaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f (↑σ i) • g i < ∑ i in s, f i • g i ↔ ¬MonovaryOn (f ∘ ↑σ) g ↑s
[PROOFSTEP]
simp [← hfg.sum_comp_perm_smul_eq_sum_smul_iff hσ, lt_iff_le_and_ne, hfg.sum_comp_perm_smul_le_sum_smul hσ]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : AntivaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g i < ∑ i in s, f i • g (↑σ i) ↔ ¬AntivaryOn f (g ∘ ↑σ) ↑s
[PROOFSTEP]
simp [← hfg.sum_smul_eq_sum_smul_comp_perm_iff hσ, lt_iff_le_and_ne, eq_comm, hfg.sum_smul_le_sum_smul_comp_perm hσ]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : LinearOrderedAddCommGroup β
inst✝¹ : Module α β
inst✝ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
hfg : AntivaryOn f g ↑s
hσ : {x | ↑σ x ≠ x} ⊆ ↑s
⊢ ∑ i in s, f i • g i < ∑ i in s, f (↑σ i) • g i ↔ ¬AntivaryOn (f ∘ ↑σ) g ↑s
[PROOFSTEP]
simp [← hfg.sum_smul_eq_sum_comp_perm_smul_iff hσ, eq_comm, lt_iff_le_and_ne, hfg.sum_smul_le_sum_comp_perm_smul hσ]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Monovary f g
⊢ ∑ i : ι, f i • g (↑σ i) = ∑ i : ι, f i • g i ↔ Monovary f (g ∘ ↑σ)
[PROOFSTEP]
simp [(hfg.monovaryOn _).sum_smul_comp_perm_eq_sum_smul_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Monovary f g
⊢ ∑ i : ι, f i • g (↑σ i) < ∑ i : ι, f i • g i ↔ ¬Monovary f (g ∘ ↑σ)
[PROOFSTEP]
simp [(hfg.monovaryOn _).sum_smul_comp_perm_lt_sum_smul_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Monovary f g
⊢ ∑ i : ι, f (↑σ i) • g i = ∑ i : ι, f i • g i ↔ Monovary (f ∘ ↑σ) g
[PROOFSTEP]
simp [(hfg.monovaryOn _).sum_comp_perm_smul_eq_sum_smul_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Monovary f g
⊢ ∑ i : ι, f (↑σ i) • g i < ∑ i : ι, f i • g i ↔ ¬Monovary (f ∘ ↑σ) g
[PROOFSTEP]
simp [(hfg.monovaryOn _).sum_comp_perm_smul_lt_sum_smul_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Antivary f g
⊢ ∑ i : ι, f i • g (↑σ i) = ∑ i : ι, f i • g i ↔ Antivary f (g ∘ ↑σ)
[PROOFSTEP]
simp [(hfg.antivaryOn _).sum_smul_eq_sum_smul_comp_perm_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Antivary f g
⊢ ∑ i : ι, f i • g i < ∑ i : ι, f i • g (↑σ i) ↔ ¬Antivary f (g ∘ ↑σ)
[PROOFSTEP]
simp [(hfg.antivaryOn _).sum_smul_lt_sum_smul_comp_perm_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Antivary f g
⊢ ∑ i : ι, f (↑σ i) • g i = ∑ i : ι, f i • g i ↔ Antivary (f ∘ ↑σ) g
[PROOFSTEP]
simp [(hfg.antivaryOn _).sum_smul_eq_sum_comp_perm_smul_iff fun _ _ ↦ mem_univ _]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝⁴ : LinearOrderedRing α
inst✝³ : LinearOrderedAddCommGroup β
inst✝² : Module α β
inst✝¹ : OrderedSMul α β
s : Finset ι
σ : Perm ι
f : ι → α
g : ι → β
inst✝ : Fintype ι
hfg : Antivary f g
⊢ ∑ i : ι, f i • g i < ∑ i : ι, f (↑σ i) • g i ↔ ¬Antivary (f ∘ ↑σ) g
[PROOFSTEP]
simp [(hfg.antivaryOn _).sum_smul_lt_sum_comp_perm_smul_iff fun _ _ ↦ mem_univ _]


[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
h : f.toFun = g.toFun
⊢ f = g
[PROOFSTEP]
cases f
[GOAL]
case mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
g : C(α, β)
toFun✝ : α → β
continuous_toFun✝ : Continuous toFun✝
h : (mk toFun✝).toFun = g.toFun
⊢ mk toFun✝ = g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
toFun✝¹ : α → β
continuous_toFun✝¹ : Continuous toFun✝¹
toFun✝ : α → β
continuous_toFun✝ : Continuous toFun✝
h : (mk toFun✝¹).toFun = (mk toFun✝).toFun
⊢ mk toFun✝¹ = mk toFun✝
[PROOFSTEP]
congr
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f✝ g✝ f g : C(α, β)
h : ↑f = ↑g
⊢ f = g
[PROOFSTEP]
cases f
[GOAL]
case mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g✝ g : C(α, β)
toFun✝ : α → β
continuous_toFun✝ : Continuous toFun✝
h : ↑(mk toFun✝) = ↑g
⊢ mk toFun✝ = g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
toFun✝¹ : α → β
continuous_toFun✝¹ : Continuous toFun✝¹
toFun✝ : α → β
continuous_toFun✝ : Continuous toFun✝
h : ↑(mk toFun✝¹) = ↑(mk toFun✝)
⊢ mk toFun✝¹ = mk toFun✝
[PROOFSTEP]
congr
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
f g : C(α, β)
inst✝ : DiscreteTopology α
x✝ : C(α, β)
⊢ (fun f => mk f) ((fun f => ↑f) x✝) = x✝
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
f g : C(α, β)
inst✝ : DiscreteTopology α
x✝ : C(α, β)
a✝ : α
⊢ ↑((fun f => mk f) ((fun f => ↑f) x✝)) a✝ = ↑x✝ a✝
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
f g : C(α, β)
inst✝ : DiscreteTopology α
x✝ : α → β
⊢ (fun f => ↑f) ((fun f => mk f) x✝) = x✝
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝⁴ : TopologicalSpace α
inst✝³ : TopologicalSpace β
inst✝² : TopologicalSpace γ
inst✝¹ : TopologicalSpace δ
f g : C(α, β)
inst✝ : DiscreteTopology α
x✝¹ : α → β
x✝ : α
⊢ (fun f => ↑f) ((fun f => mk f) x✝¹) x✝ = x✝¹ x✝
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f✝ g : C(α, β)
f : C(β, γ)
g₁ g₂ : C(α, β)
hf : Injective ↑f
h : comp f g₁ = comp f g₂
a : α
⊢ ↑f (↑g₁ a) = ↑f (↑g₂ a)
[PROOFSTEP]
rw [← comp_apply, h, comp_apply]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
H : ⋃ (i : ι), S i = Set.univ
i : ι
⊢ ContinuousOn (Set.liftCover S (fun i => ↑(φ i)) hφ H) (S i)
[PROOFSTEP]
rw [continuousOn_iff_continuous_restrict]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
H : ⋃ (i : ι), S i = Set.univ
i : ι
⊢ Continuous (Set.restrict (S i) (Set.liftCover S (fun i => ↑(φ i)) hφ H))
[PROOFSTEP]
simpa only [Set.restrict, Set.liftCover_coe] using (φ i).continuous
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
i : ι
x : ↑(S i)
⊢ ↑(liftCover S φ hφ hS) ↑x = ↑(φ i) x
[PROOFSTEP]
rw [liftCover, coe_mk, Set.liftCover_coe _]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
i : ι
⊢ restrict (S i) (liftCover S φ hφ hS) = φ i
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
i : ι
a✝ : ↑(S i)
⊢ ↑(restrict (S i) (liftCover S φ hφ hS)) a✝ = ↑(φ i) a✝
[PROOFSTEP]
simp only [coe_restrict, Function.comp_apply, liftCover_coe]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
A : Set (Set α)
F : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F s hs) { val := x, property := hxi } = ↑(F t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
⊢ C(α, β)
[PROOFSTEP]
let S : A → Set α := (↑)
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S✝ : ι → Set α
φ : (i : ι) → C(↑(S✝ i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S✝ i) (hxj : x ∈ S✝ j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S✝ i ∈ nhds x
A : Set (Set α)
F : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F s hs) { val := x, property := hxi } = ↑(F t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
S : ↑A → Set α := Subtype.val
⊢ C(α, β)
[PROOFSTEP]
let F : ∀ i : A, C(i, β) := fun i => F i i.prop
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S✝ : ι → Set α
φ : (i : ι) → C(↑(S✝ i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S✝ i) (hxj : x ∈ S✝ j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S✝ i ∈ nhds x
A : Set (Set α)
F✝ : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F✝ s hs) { val := x, property := hxi } = ↑(F✝ t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
S : ↑A → Set α := Subtype.val
F : (i : ↑A) → C(↑↑i, β) := fun i => F✝ ↑i (_ : ↑i ∈ A)
⊢ C(α, β)
[PROOFSTEP]
refine' liftCover S F (fun i j => hF i i.prop j j.prop) _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S✝ : ι → Set α
φ : (i : ι) → C(↑(S✝ i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S✝ i) (hxj : x ∈ S✝ j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S✝ i ∈ nhds x
A : Set (Set α)
F✝ : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F✝ s hs) { val := x, property := hxi } = ↑(F✝ t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
S : ↑A → Set α := Subtype.val
F : (i : ↑A) → C(↑↑i, β) := fun i => F✝ ↑i (_ : ↑i ∈ A)
⊢ ∀ (x : α), ∃ i, S i ∈ nhds x
[PROOFSTEP]
intro x
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S✝ : ι → Set α
φ : (i : ι) → C(↑(S✝ i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S✝ i) (hxj : x ∈ S✝ j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S✝ i ∈ nhds x
A : Set (Set α)
F✝ : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F✝ s hs) { val := x, property := hxi } = ↑(F✝ t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
S : ↑A → Set α := Subtype.val
F : (i : ↑A) → C(↑↑i, β) := fun i => F✝ ↑i (_ : ↑i ∈ A)
x : α
⊢ ∃ i, S i ∈ nhds x
[PROOFSTEP]
obtain ⟨s, hs, hsx⟩ := hA x
[GOAL]
case intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S✝ : ι → Set α
φ : (i : ι) → C(↑(S✝ i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S✝ i) (hxj : x ∈ S✝ j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S✝ i ∈ nhds x
A : Set (Set α)
F✝ : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F✝ s hs) { val := x, property := hxi } = ↑(F✝ t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
S : ↑A → Set α := Subtype.val
F : (i : ↑A) → C(↑↑i, β) := fun i => F✝ ↑i (_ : ↑i ∈ A)
x : α
s : Set α
hs : s ∈ A
hsx : s ∈ nhds x
⊢ ∃ i, S i ∈ nhds x
[PROOFSTEP]
exact ⟨⟨s, hs⟩, hsx⟩
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
A : Set (Set α)
F : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F s hs) { val := x, property := hxi } = ↑(F t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
s : Set α
hs : s ∈ A
x : ↑s
x' : ↑↑{ val := s, property := hs } := x
⊢ ↑(liftCover' A F hF hA) ↑x = ↑(F s hs) x
[PROOFSTEP]
delta liftCover'
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f g : C(α, β)
ι : Type u_5
S : ι → Set α
φ : (i : ι) → C(↑(S i), β)
hφ :
  ∀ (i j : ι) (x : α) (hxi : x ∈ S i) (hxj : x ∈ S j),
    ↑(φ i) { val := x, property := hxi } = ↑(φ j) { val := x, property := hxj }
hS : ∀ (x : α), ∃ i, S i ∈ nhds x
A : Set (Set α)
F : (s : Set α) → s ∈ A → C(↑s, β)
hF :
  ∀ (s : Set α) (hs : s ∈ A) (t : Set α) (ht : t ∈ A) (x : α) (hxi : x ∈ s) (hxj : x ∈ t),
    ↑(F s hs) { val := x, property := hxi } = ↑(F t ht) { val := x, property := hxj }
hA : ∀ (x : α), ∃ i, i ∈ A ∧ i ∈ nhds x
s : Set α
hs : s ∈ A
x : ↑s
x' : ↑↑{ val := s, property := hs } := x
⊢ ↑(let S := Subtype.val;
        let F_1 := fun i => F ↑i (_ : ↑i ∈ A);
        liftCover S F_1
          (_ :
            ∀ (i j : ↑A) (x : α) (hxi : x ∈ ↑i) (hxj : x ∈ ↑j),
              ↑(F ↑i (_ : ↑i ∈ A)) { val := x, property := hxi } = ↑(F ↑j (_ : ↑j ∈ A)) { val := x, property := hxj })
          (_ : ∀ (x : α), ∃ i, ↑i ∈ nhds x))
      ↑x =
    ↑(F s hs) x
[PROOFSTEP]
exact liftCover_coe x'
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : α ≃ₜ β
g : β ≃ₜ γ
⊢ ContinuousMap.comp (toContinuousMap (Homeomorph.symm f)) (toContinuousMap f) = ContinuousMap.id α
[PROOFSTEP]
rw [← coe_trans, self_trans_symm, coe_refl]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : α ≃ₜ β
g : β ≃ₜ γ
⊢ ContinuousMap.comp (toContinuousMap f) (toContinuousMap (Homeomorph.symm f)) = ContinuousMap.id β
[PROOFSTEP]
rw [← coe_trans, symm_trans_self, coe_refl]