Theorem: eVariationOn.comp_le_of_antitoneOn
File: Mathlib/Analysis/BoundedVariation.lean

tactic: refine iSup_le ?_
state_before: α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
⊢ eVariationOn (f ∘ φ) t ≤ eVariationOn f s
state_after: α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
⊢ ∀ (i : ℕ × { u // Monotone u ∧ ∀ (i : ℕ), u i ∈ t }),
    ∑ i_1 ∈ Finset.range i.1, edist ((f ∘ φ) (↑i.2 (i_1 + 1))) ((f ∘ φ) (↑i.2 i_1)) ≤ eVariationOn f s

tactic: rintro ⟨n, u, hu, ut⟩
state_before: α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
⊢ ∀ (i : ℕ × { u // Monotone u ∧ ∀ (i : ℕ), u i ∈ t }),
    ∑ i_1 ∈ Finset.range i.1, edist ((f ∘ φ) (↑i.2 (i_1 + 1))) ((f ∘ φ) (↑i.2 i_1)) ≤ eVariationOn f s
state_after: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
⊢ ∑ i ∈ Finset.range (n, ⟨u, ⋯⟩).1, edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 (i + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 i)) ≤
    eVariationOn f s

tactic: rw [← Finset.sum_range_reflect]
state_before: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
⊢ ∑ i ∈ Finset.range (n, ⟨u, ⋯⟩).1, edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 (i + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 i)) ≤
    eVariationOn f s
state_after: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
⊢ ∑ j ∈ Finset.range (n, ⟨u, ⋯⟩).1,
      edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - j + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - j))) ≤
    eVariationOn f s

tactic: refine (Finset.sum_congr rfl fun x hx => ?_).trans_le <| le_iSup_of_le
  ⟨n, fun i => φ (u <| n - i), fun x y xy => hφ (ut _) (ut _) (hu <| Nat.sub_le_sub_left xy n),
    fun i => φst (ut _)⟩
  le_rfl
state_before: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
⊢ ∑ j ∈ Finset.range (n, ⟨u, ⋯⟩).1,
      edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - j + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - j))) ≤
    eVariationOn f s
state_after: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x ∈ Finset.range (n, ⟨u, ⋯⟩).1
⊢ edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x))) =
    edist (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 (x + 1))) (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 x))

tactic: rw [Finset.mem_range] at hx
state_before: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x ∈ Finset.range (n, ⟨u, ⋯⟩).1
⊢ edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x))) =
    edist (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 (x + 1))) (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 x))
state_after: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x < (n, ⟨u, ⋯⟩).1
⊢ edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x))) =
    edist (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 (x + 1))) (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 x))

tactic: dsimp only [Subtype.coe_mk, Function.comp_apply]
state_before: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x < (n, ⟨u, ⋯⟩).1
⊢ edist ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x + 1))) ((f ∘ φ) (↑(n, ⟨u, ⋯⟩).2 ((n, ⟨u, ⋯⟩).1 - 1 - x))) =
    edist (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 (x + 1))) (f (↑(n, ⟨fun i => φ (u (n - i)), ⋯⟩).2 x))
state_after: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x < (n, ⟨u, ⋯⟩).1
⊢ edist (f (φ (u (n - 1 - x + 1)))) (f (φ (u (n - 1 - x)))) = edist (f (φ (u (n - (x + 1))))) (f (φ (u (n - x))))

tactic: rw [edist_comm]
state_before: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x < (n, ⟨u, ⋯⟩).1
⊢ edist (f (φ (u (n - 1 - x + 1)))) (f (φ (u (n - 1 - x)))) = edist (f (φ (u (n - (x + 1))))) (f (φ (u (n - x))))
state_after: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x < (n, ⟨u, ⋯⟩).1
⊢ edist (f (φ (u (n - 1 - x)))) (f (φ (u (n - 1 - x + 1)))) = edist (f (φ (u (n - (x + 1))))) (f (φ (u (n - x))))

tactic: congr 4 <;> omega
state_before: case mk.mk.intro
α : Type u_1
inst✝² : LinearOrder α
E : Type u_2
inst✝¹ : PseudoEMetricSpace E
β : Type u_3
inst✝ : LinearOrder β
f : α → E
s : Set α
t : Set β
φ : β → α
hφ : AntitoneOn φ t
φst : MapsTo φ t s
n : ℕ
u : ℕ → β
hu : Monotone u
ut : ∀ (i : ℕ), u i ∈ t
x : ℕ
hx : x < (n, ⟨u, ⋯⟩).1
⊢ edist (f (φ (u (n - 1 - x)))) (f (φ (u (n - 1 - x + 1)))) = edist (f (φ (u (n - (x + 1))))) (f (φ (u (n - x))))
state_after: no goals