[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝ : (i : ι) → AddCommMonoid (β i)
C : (⨁ (i : ι), β i) → Prop
x : ⨁ (i : ι), β i
H_zero : C 0
H_basic : ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus : ∀ (x y : ⨁ (i : ι), β i), C x → C y → C (x + y)
⊢ C x
[PROOFSTEP]
apply DFinsupp.induction x H_zero
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝ : (i : ι) → AddCommMonoid (β i)
C : (⨁ (i : ι), β i) → Prop
x : ⨁ (i : ι), β i
H_zero : C 0
H_basic : ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus : ∀ (x y : ⨁ (i : ι), β i), C x → C y → C (x + y)
⊢ ∀ (i : ι) (b : (fun i => β i) i) (f : Π₀ (i : ι), (fun i => β i) i),
    ↑f i = 0 → b ≠ 0 → C f → C (DFinsupp.single i b + f)
[PROOFSTEP]
intro i b f h1 h2 ih
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝ : (i : ι) → AddCommMonoid (β i)
C : (⨁ (i : ι), β i) → Prop
x : ⨁ (i : ι), β i
H_zero : C 0
H_basic : ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus : ∀ (x y : ⨁ (i : ι), β i), C x → C y → C (x + y)
i : ι
b : β i
f : Π₀ (i : ι), (fun i => β i) i
h1 : ↑f i = 0
h2 : b ≠ 0
ih : C f
⊢ C (DFinsupp.single i b + f)
[PROOFSTEP]
solve_by_elim
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
φ : (i : ι) → β i →+ γ
ψ : (⨁ (i : ι), β i) →+ γ
f : ⨁ (i : ι), β i
⊢ ↑ψ f = ↑(toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) f
[PROOFSTEP]
congr
  -- Porting note: ext applies addHom_ext' here, which isn't what we want.
[GOAL]
case e_a
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
φ : (i : ι) → β i →+ γ
ψ : (⨁ (i : ι), β i) →+ γ
f : ⨁ (i : ι), β i
⊢ ψ = toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)
[PROOFSTEP]
apply DFinsupp.addHom_ext'
[GOAL]
case e_a.H
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
φ : (i : ι) → β i →+ γ
ψ : (⨁ (i : ι), β i) →+ γ
f : ⨁ (i : ι), β i
⊢ ∀ (x : ι),
    AddMonoidHom.comp ψ (DFinsupp.singleAddHom (fun i => (fun i => β i) i) x) =
      AddMonoidHom.comp (toAddMonoid fun i => AddMonoidHom.comp ψ (of β i))
        (DFinsupp.singleAddHom (fun i => (fun i => β i) i) x)
[PROOFSTEP]
simp [toAddMonoid, of]
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
i : ι
f : γ →+ β i
⊢ ↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) f
[PROOFSTEP]
rw [fromAddMonoid, toAddMonoid_of]
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
i : ι
f : γ →+ β i
⊢ ↑(↑AddMonoidHom.compHom (of β i)) f = AddMonoidHom.comp (of β i) f
[PROOFSTEP]
rfl
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
i : ι
f : γ →+ β i
x : γ
⊢ ↑(↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f)) x = ↑(of β i) (↑f x)
[PROOFSTEP]
rw [fromAddMonoid_of, AddMonoidHom.coe_comp, Function.comp]
[GOAL]
ι✝ : Type v
dec_ι : DecidableEq ι✝
β : ι✝ → Type w
inst✝³ : (i : ι✝) → AddCommMonoid (β i)
γ : Type u₁
inst✝² : AddCommMonoid γ
M : Type v
ι : optParam (Type u_1) PUnit
inst✝¹ : AddCommMonoid M
inst✝ : Unique ι
src✝ : (⨁ (i : ι), M) →+ M := toAddMonoid fun x => AddMonoidHom.id M
x : ⨁ (x : ι), M
⊢ ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) 0) = 0
[PROOFSTEP]
rw [AddMonoidHom.map_zero, AddMonoidHom.map_zero]
[GOAL]
ι✝ : Type v
dec_ι : DecidableEq ι✝
β : ι✝ → Type w
inst✝³ : (i : ι✝) → AddCommMonoid (β i)
γ : Type u₁
inst✝² : AddCommMonoid γ
M : Type v
ι : optParam (Type u_1) PUnit
inst✝¹ : AddCommMonoid M
inst✝ : Unique ι
src✝ : (⨁ (i : ι), M) →+ M := toAddMonoid fun x => AddMonoidHom.id M
x✝ : ⨁ (x : ι), M
p : ι
x : M
⊢ ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (↑(of (fun i => M) p) x)) =
    ↑(of (fun i => M) p) x
[PROOFSTEP]
rw [Unique.default_eq p, toAddMonoid_of]
[GOAL]
ι✝ : Type v
dec_ι : DecidableEq ι✝
β : ι✝ → Type w
inst✝³ : (i : ι✝) → AddCommMonoid (β i)
γ : Type u₁
inst✝² : AddCommMonoid γ
M : Type v
ι : optParam (Type u_1) PUnit
inst✝¹ : AddCommMonoid M
inst✝ : Unique ι
src✝ : (⨁ (i : ι), M) →+ M := toAddMonoid fun x => AddMonoidHom.id M
x✝ : ⨁ (x : ι), M
p : ι
x : M
⊢ ↑(of (fun x => M) p) (↑(AddMonoidHom.id M) x) = ↑(of (fun i => M) p) x
[PROOFSTEP]
rfl
[GOAL]
ι✝ : Type v
dec_ι : DecidableEq ι✝
β : ι✝ → Type w
inst✝³ : (i : ι✝) → AddCommMonoid (β i)
γ : Type u₁
inst✝² : AddCommMonoid γ
M : Type v
ι : optParam (Type u_1) PUnit
inst✝¹ : AddCommMonoid M
inst✝ : Unique ι
src✝ : (⨁ (i : ι), M) →+ M := toAddMonoid fun x => AddMonoidHom.id M
x✝ x y : ⨁ (i : ι), M
ihx : ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy : ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y
⊢ ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (x + y)) = x + y
[PROOFSTEP]
rw [AddMonoidHom.map_add, AddMonoidHom.map_add, ihx, ihy]
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝¹ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝ : AddCommMonoid γ
κ : Type u_1
h : ι ≃ κ
f : ⨁ (i : ι), β i
k : κ
⊢ ↑(↑(equivCongrLeft h) f) k = ↑f (↑h.symm k)
[PROOFSTEP]
exact DFinsupp.comapDomain'_apply _ h.right_inv _ _
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝⁵ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝⁴ : AddCommMonoid γ
M : Type u_1
S : Type u_2
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid M
inst✝¹ : SetLike S M
inst✝ : AddSubmonoidClass S M
A : ι → S
i j : ι
x : { x // x ∈ A i }
⊢ ↑(↑(↑(of (fun i => { x // x ∈ A i }) i) x) j) = ↑(if i = j then x else 0)
[PROOFSTEP]
obtain rfl | h := Decidable.eq_or_ne i j
[GOAL]
case inl
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝⁵ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝⁴ : AddCommMonoid γ
M : Type u_1
S : Type u_2
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid M
inst✝¹ : SetLike S M
inst✝ : AddSubmonoidClass S M
A : ι → S
i : ι
x : { x // x ∈ A i }
⊢ ↑(↑(↑(of (fun i => { x // x ∈ A i }) i) x) i) = ↑(if i = i then x else 0)
[PROOFSTEP]
rw [DirectSum.of_eq_same, if_pos rfl]
[GOAL]
case inr
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝⁵ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝⁴ : AddCommMonoid γ
M : Type u_1
S : Type u_2
inst✝³ : DecidableEq ι
inst✝² : AddCommMonoid M
inst✝¹ : SetLike S M
inst✝ : AddSubmonoidClass S M
A : ι → S
i j : ι
x : { x // x ∈ A i }
h : i ≠ j
⊢ ↑(↑(↑(of (fun i => { x // x ∈ A i }) i) x) j) = ↑(if i = j then x else 0)
[PROOFSTEP]
rw [DirectSum.of_eq_of_ne _ _ _ _ h, if_neg h, ZeroMemClass.coe_zero, ZeroMemClass.coe_zero]
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝³ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝² : AddCommMonoid γ
M : Type u_1
inst✝¹ : DecidableEq ι
inst✝ : AddCommMonoid M
A : ι → AddSubmonoid M
h : IsInternal A
⊢ iSup A = ⊤
[PROOFSTEP]
rw [AddSubmonoid.iSup_eq_mrange_dfinsupp_sumAddHom, AddMonoidHom.mrange_top_iff_surjective]
[GOAL]
ι : Type v
dec_ι : DecidableEq ι
β : ι → Type w
inst✝³ : (i : ι) → AddCommMonoid (β i)
γ : Type u₁
inst✝² : AddCommMonoid γ
M : Type u_1
inst✝¹ : DecidableEq ι
inst✝ : AddCommMonoid M
A : ι → AddSubmonoid M
h : IsInternal A
⊢ Function.Surjective ↑(DFinsupp.sumAddHom fun i => AddSubmonoid.subtype (A i))
[PROOFSTEP]
exact Function.Bijective.surjective h


[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ { fst := k, snd := c } ∈ sigmaLift (fun x => Icc) { fst := i, snd := a } { fst := j, snd := b } ↔
    { fst := i, snd := a } ≤ { fst := k, snd := c } ∧ { fst := k, snd := c } ≤ { fst := j, snd := b }
[PROOFSTEP]
simp_rw [mem_sigmaLift, le_def, mem_Icc, exists_and_left, ← exists_and_right, ← exists_prop]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ (∃ h _h x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h _h h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
exact bex_congr fun _ _ => by constructor <;> rintro ⟨⟨⟩, ht⟩ <;> exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a ≤ c
⊢ (∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a ≤ c
⊢ (∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) →
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a ≤ c
⊢ (∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b) →
    ∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mp.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a ≤ c
ht : c ≤ (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
⊢ ∃ h, (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
case mpr.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a ≤ c
ht : (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
⊢ ∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ { fst := k, snd := c } ∈ sigmaLift (fun x => Ico) { fst := i, snd := a } { fst := j, snd := b } ↔
    { fst := i, snd := a } ≤ { fst := k, snd := c } ∧ { fst := k, snd := c } < { fst := j, snd := b }
[PROOFSTEP]
simp_rw [mem_sigmaLift, le_def, lt_def, mem_Ico, exists_and_left, ← exists_and_right, ← exists_prop]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ (∃ h _h x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h _h h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
exact bex_congr fun _ _ => by constructor <;> rintro ⟨⟨⟩, ht⟩ <;> exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a ≤ c
⊢ (∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a ≤ c
⊢ (∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) →
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a ≤ c
⊢ (∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b) →
    ∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mp.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a ≤ c
ht : c < (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
⊢ ∃ h, (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
case mpr.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a ≤ c
ht : (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
⊢ ∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ { fst := k, snd := c } ∈ sigmaLift (fun x => Ioc) { fst := i, snd := a } { fst := j, snd := b } ↔
    { fst := i, snd := a } < { fst := k, snd := c } ∧ { fst := k, snd := c } ≤ { fst := j, snd := b }
[PROOFSTEP]
simp_rw [mem_sigmaLift, le_def, lt_def, mem_Ioc, exists_and_left, ← exists_and_right, ← exists_prop]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ (∃ h _h x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h _h h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
exact bex_congr fun _ _ => by constructor <;> rintro ⟨⟨⟩, ht⟩ <;> exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a < c
⊢ (∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a < c
⊢ (∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) →
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a < c
⊢ (∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b) →
    ∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mp.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a < c
ht : c ≤ (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
⊢ ∃ h, (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
case mpr.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a < c
ht : (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c ≤ b
⊢ ∃ x, c ≤ (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ { fst := k, snd := c } ∈ sigmaLift (fun x => Ioo) { fst := i, snd := a } { fst := j, snd := b } ↔
    { fst := i, snd := a } < { fst := k, snd := c } ∧ { fst := k, snd := c } < { fst := j, snd := b }
[PROOFSTEP]
simp_rw [mem_sigmaLift, lt_def, mem_Ioo, exists_and_left, ← exists_and_right, ← exists_prop]
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝² x✝¹ x✝ : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
⊢ (∃ h _h x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h _h h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
exact bex_congr fun _ _ => by constructor <;> rintro ⟨⟨⟩, ht⟩ <;> exact ⟨rfl, ht⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a < c
⊢ (∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) ↔
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a < c
⊢ (∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b) →
    ∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b : α j
k : ι
c : α k
x✝¹ : i = k
x✝ : (_ : i = k) ▸ a < c
⊢ (∃ h, (_ : { fst := k, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b) →
    ∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := k, snd := c }.fst) ▸ b
[PROOFSTEP]
rintro ⟨⟨⟩, ht⟩
[GOAL]
case mp.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a < c
ht : c < (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
⊢ ∃ h, (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
[PROOFSTEP]
exact ⟨rfl, ht⟩
[GOAL]
case mpr.intro.refl
ι : Type u_1
α : ι → Type u_2
inst✝² : DecidableEq ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : (i : ι) → LocallyFiniteOrder (α i)
x✝⁴ x✝³ x✝² : (i : ι) × α i
i : ι
a : α i
j : ι
b c : α j
x✝¹ : i = j
x✝ : (_ : i = j) ▸ a < c
ht : (_ : { fst := j, snd := c }.fst = { fst := j, snd := b }.fst) ▸ c < b
⊢ ∃ x, c < (_ : { fst := j, snd := b }.fst = { fst := j, snd := c }.fst) ▸ b
[PROOFSTEP]
exact ⟨rfl, ht⟩


[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : StrictConvexSpace 𝕜 E
x : E
r : ℝ
⊢ StrictConvex 𝕜 (closedBall x r)
[PROOFSTEP]
cases' le_or_lt r 0 with hr hr
[GOAL]
case inl
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : StrictConvexSpace 𝕜 E
x : E
r : ℝ
hr : r ≤ 0
⊢ StrictConvex 𝕜 (closedBall x r)
[PROOFSTEP]
exact (subsingleton_closedBall x hr).strictConvex
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : StrictConvexSpace 𝕜 E
x : E
r : ℝ
hr : 0 < r
⊢ StrictConvex 𝕜 (closedBall x r)
[PROOFSTEP]
rw [← vadd_closedBall_zero]
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : StrictConvexSpace 𝕜 E
x : E
r : ℝ
hr : 0 < r
⊢ StrictConvex 𝕜 (x +ᵥ closedBall 0 r)
[PROOFSTEP]
exact (StrictConvexSpace.strictConvex_closedBall r hr).vadd _
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : LinearMap.CompatibleSMul E E 𝕜 ℝ
h : StrictConvex 𝕜 (closedBall 0 1)
r : ℝ
hr : 0 < r
⊢ StrictConvex 𝕜 (closedBall 0 r)
[PROOFSTEP]
simpa only [smul_closedUnitBall_of_nonneg hr.le] using h.smul r
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, a + b = 1 ∧ ‖a • x + b • y‖ < 1
⊢ StrictConvexSpace ℝ E
[PROOFSTEP]
refine'
  StrictConvexSpace.of_strictConvex_closed_unit_ball ℝ ((convex_closedBall _ _).strictConvex' fun x hx y hy hne => _)
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, a + b = 1 ∧ ‖a • x + b • y‖ < 1
x : E
hx : x ∈ closedBall 0 1 \ interior (closedBall 0 1)
y : E
hy : y ∈ closedBall 0 1 \ interior (closedBall 0 1)
hne : x ≠ y
⊢ (fun x y => ∃ c, ↑(AffineMap.lineMap x y) c ∈ interior (closedBall 0 1)) x y
[PROOFSTEP]
rw [interior_closedBall (0 : E) one_ne_zero, closedBall_diff_ball, mem_sphere_zero_iff_norm] at hx hy
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, a + b = 1 ∧ ‖a • x + b • y‖ < 1
x : E
hx : ‖x‖ = 1
y : E
hy : ‖y‖ = 1
hne : x ≠ y
⊢ ∃ c, ↑(AffineMap.lineMap x y) c ∈ interior (closedBall 0 1)
[PROOFSTEP]
rcases h x y hx hy hne with ⟨a, b, hab, hlt⟩
[GOAL]
case intro.intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, a + b = 1 ∧ ‖a • x + b • y‖ < 1
x : E
hx : ‖x‖ = 1
y : E
hy : ‖y‖ = 1
hne : x ≠ y
a b : ℝ
hab : a + b = 1
hlt : ‖a • x + b • y‖ < 1
⊢ ∃ c, ↑(AffineMap.lineMap x y) c ∈ interior (closedBall 0 1)
[PROOFSTEP]
use b
[GOAL]
case h
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, a + b = 1 ∧ ‖a • x + b • y‖ < 1
x : E
hx : ‖x‖ = 1
y : E
hy : ‖y‖ = 1
hne : x ≠ y
a b : ℝ
hab : a + b = 1
hlt : ‖a • x + b • y‖ < 1
⊢ ↑(AffineMap.lineMap x y) b ∈ interior (closedBall 0 1)
[PROOFSTEP]
rwa [AffineMap.lineMap_apply_module, interior_closedBall (0 : E) one_ne_zero, mem_ball_zero_iff,
  sub_eq_iff_eq_add.2 hab.symm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ ‖a • x + b • y‖ ≠ 1
⊢ StrictConvexSpace ℝ E
[PROOFSTEP]
refine' StrictConvexSpace.of_strictConvex_closed_unit_ball ℝ ((convex_closedBall _ _).strictConvex _)
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ ‖a • x + b • y‖ ≠ 1
⊢ Set.Pairwise (closedBall 0 1 \ interior (closedBall 0 1)) fun x y =>
    Set.Nonempty ([x-[ℝ]y] \ frontier (closedBall 0 1))
[PROOFSTEP]
simp only [interior_closedBall _ one_ne_zero, closedBall_diff_ball, Set.Pairwise, frontier_closedBall _ one_ne_zero,
  mem_sphere_zero_iff_norm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ ‖a • x + b • y‖ ≠ 1
⊢ ∀ ⦃x : E⦄, ‖x‖ = 1 → ∀ ⦃y : E⦄, ‖y‖ = 1 → x ≠ y → Set.Nonempty ([x-[ℝ]y] \ sphere 0 1)
[PROOFSTEP]
intro x hx y hy hne
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ ‖a • x + b • y‖ ≠ 1
x : E
hx : ‖x‖ = 1
y : E
hy : ‖y‖ = 1
hne : x ≠ y
⊢ Set.Nonempty ([x-[ℝ]y] \ sphere 0 1)
[PROOFSTEP]
rcases h x y hx hy hne with ⟨a, b, ha, hb, hab, hne'⟩
[GOAL]
case intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ∃ a b, 0 ≤ a ∧ 0 ≤ b ∧ a + b = 1 ∧ ‖a • x + b • y‖ ≠ 1
x : E
hx : ‖x‖ = 1
y : E
hy : ‖y‖ = 1
hne : x ≠ y
a b : ℝ
ha : 0 ≤ a
hb : 0 ≤ b
hab : a + b = 1
hne' : ‖a • x + b • y‖ ≠ 1
⊢ Set.Nonempty ([x-[ℝ]y] \ sphere 0 1)
[PROOFSTEP]
exact ⟨_, ⟨a, b, ha, hb, hab, rfl⟩, mt mem_sphere_zero_iff_norm.1 hne'⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ ⦃x y : E⦄, ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ‖x + y‖ ≠ 2
⊢ StrictConvexSpace ℝ E
[PROOFSTEP]
refine'
  StrictConvexSpace.of_norm_combo_ne_one fun x y hx hy hne =>
    ⟨1 / 2, 1 / 2, one_half_pos.le, one_half_pos.le, add_halves _, _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ ⦃x y : E⦄, ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ‖x + y‖ ≠ 2
x y : E
hx : ‖x‖ = 1
hy : ‖y‖ = 1
hne : x ≠ y
⊢ ‖(1 / 2) • x + (1 / 2) • y‖ ≠ 1
[PROOFSTEP]
rw [← smul_add, norm_smul, Real.norm_of_nonneg one_half_pos.le, one_div, ← div_eq_inv_mul, Ne.def,
  div_eq_one_iff_eq (two_ne_zero' ℝ)]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ ⦃x y : E⦄, ‖x‖ = 1 → ‖y‖ = 1 → x ≠ y → ‖x + y‖ ≠ 2
x y : E
hx : ‖x‖ = 1
hy : ‖y‖ = 1
hne : x ≠ y
⊢ ¬‖x + y‖ = 2
[PROOFSTEP]
exact h hx hy hne
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → ‖x + y‖ = 2 → SameRay ℝ x y
⊢ StrictConvexSpace ℝ E
[PROOFSTEP]
refine' StrictConvexSpace.of_pairwise_sphere_norm_ne_two fun x hx y hy => mt fun h₂ => _
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → ‖x + y‖ = 2 → SameRay ℝ x y
x : E
hx : x ∈ sphere 0 1
y : E
hy : y ∈ sphere 0 1
h₂ : ‖x + y‖ = 2
⊢ x = y
[PROOFSTEP]
rw [mem_sphere_zero_iff_norm] at hx hy
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝³ : NormedLinearOrderedField 𝕜
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace 𝕜 E
inst✝ : NormedSpace ℝ E
h : ∀ (x y : E), ‖x‖ = 1 → ‖y‖ = 1 → ‖x + y‖ = 2 → SameRay ℝ x y
x : E
hx : ‖x‖ = 1
y : E
hy : ‖y‖ = 1
h₂ : ‖x + y‖ = 2
⊢ x = y
[PROOFSTEP]
exact (sameRay_iff_of_norm_eq (hx.trans hy.symm)).1 (h x y hx hy h₂)
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : x ∈ closedBall z r
hy : y ∈ closedBall z r
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
⊢ a • x + b • y ∈ ball z r
[PROOFSTEP]
rcases eq_or_ne r 0 with (rfl | hr)
[GOAL]
case inl
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b : ℝ
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
hx : x ∈ closedBall z 0
hy : y ∈ closedBall z 0
⊢ a • x + b • y ∈ ball z 0
[PROOFSTEP]
rw [closedBall_zero, mem_singleton_iff] at hx hy
[GOAL]
case inl
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b : ℝ
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
hx : x = z
hy : y = z
⊢ a • x + b • y ∈ ball z 0
[PROOFSTEP]
exact (hne (hx.trans hy.symm)).elim
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : x ∈ closedBall z r
hy : y ∈ closedBall z r
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
hr : r ≠ 0
⊢ a • x + b • y ∈ ball z r
[PROOFSTEP]
simp only [← interior_closedBall _ hr] at hx hy ⊢
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : x ∈ closedBall z r
hy : y ∈ closedBall z r
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
hr : r ≠ 0
⊢ a • x + b • y ∈ interior (closedBall z r)
[PROOFSTEP]
exact strictConvex_closedBall ℝ z r hx hy hne ha hb hab
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : ‖x‖ ≤ r
hy : ‖y‖ ≤ r
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
⊢ ‖a • x + b • y‖ < r
[PROOFSTEP]
simp only [← mem_ball_zero_iff, ← mem_closedBall_zero_iff] at hx hy ⊢
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hne : x ≠ y
ha : 0 < a
hb : 0 < b
hab : a + b = 1
hx : x ∈ closedBall 0 r
hy : y ∈ closedBall 0 r
⊢ a • x + b • y ∈ ball 0 r
[PROOFSTEP]
exact combo_mem_ball_of_ne hx hy hne ha hb hab
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ¬SameRay ℝ x y
⊢ ‖x + y‖ < ‖x‖ + ‖y‖
[PROOFSTEP]
simp only [sameRay_iff_inv_norm_smul_eq, not_or, ← Ne.def] at h
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : x ≠ 0 ∧ y ≠ 0 ∧ ‖x‖⁻¹ • x ≠ ‖y‖⁻¹ • y
⊢ ‖x + y‖ < ‖x‖ + ‖y‖
[PROOFSTEP]
rcases h with ⟨hx, hy, hne⟩
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : x ≠ 0
hy : y ≠ 0
hne : ‖x‖⁻¹ • x ≠ ‖y‖⁻¹ • y
⊢ ‖x + y‖ < ‖x‖ + ‖y‖
[PROOFSTEP]
rw [← norm_pos_iff] at hx hy
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : 0 < ‖x‖
hy : 0 < ‖y‖
hne : ‖x‖⁻¹ • x ≠ ‖y‖⁻¹ • y
⊢ ‖x + y‖ < ‖x‖ + ‖y‖
[PROOFSTEP]
have hxy : 0 < ‖x‖ + ‖y‖ := add_pos hx hy
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : 0 < ‖x‖
hy : 0 < ‖y‖
hne : ‖x‖⁻¹ • x ≠ ‖y‖⁻¹ • y
hxy : 0 < ‖x‖ + ‖y‖
⊢ ‖x + y‖ < ‖x‖ + ‖y‖
[PROOFSTEP]
have :=
  combo_mem_ball_of_ne (inv_norm_smul_mem_closed_unit_ball x) (inv_norm_smul_mem_closed_unit_ball y) hne
    (div_pos hx hxy) (div_pos hy hxy) (by rw [← add_div, div_self hxy.ne'])
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : 0 < ‖x‖
hy : 0 < ‖y‖
hne : ‖x‖⁻¹ • x ≠ ‖y‖⁻¹ • y
hxy : 0 < ‖x‖ + ‖y‖
⊢ ‖x‖ / (‖x‖ + ‖y‖) + ‖y‖ / (‖x‖ + ‖y‖) = 1
[PROOFSTEP]
rw [← add_div, div_self hxy.ne']
[GOAL]
case intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
hx : 0 < ‖x‖
hy : 0 < ‖y‖
hne : ‖x‖⁻¹ • x ≠ ‖y‖⁻¹ • y
hxy : 0 < ‖x‖ + ‖y‖
this : (‖x‖ / (‖x‖ + ‖y‖)) • ‖x‖⁻¹ • x + (‖y‖ / (‖x‖ + ‖y‖)) • ‖y‖⁻¹ • y ∈ ball 0 1
⊢ ‖x + y‖ < ‖x‖ + ‖y‖
[PROOFSTEP]
rwa [mem_ball_zero_iff, div_eq_inv_mul, div_eq_inv_mul, mul_smul, mul_smul, smul_inv_smul₀ hx.ne',
  smul_inv_smul₀ hy.ne', ← smul_add, norm_smul, Real.norm_of_nonneg (inv_pos.2 hxy).le, ← div_eq_inv_mul,
  div_lt_one hxy] at this
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ¬SameRay ℝ x y
⊢ ‖x‖ - ‖y‖ < ‖x - y‖
[PROOFSTEP]
nth_rw 1 [← sub_add_cancel x y] at h ⊢
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ¬SameRay ℝ (x - y + y) y
⊢ ‖x - y + y‖ - ‖y‖ < ‖x - y‖
[PROOFSTEP]
exact sub_lt_iff_lt_add.2 (norm_add_lt_of_not_sameRay fun H' => h <| H'.add_left SameRay.rfl)
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ¬SameRay ℝ x y
⊢ |‖x‖ - ‖y‖| < ‖x - y‖
[PROOFSTEP]
refine' abs_sub_lt_iff.2 ⟨lt_norm_sub_of_not_sameRay h, _⟩
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ¬SameRay ℝ x y
⊢ ‖y‖ - ‖x‖ < ‖x - y‖
[PROOFSTEP]
rw [norm_sub_rev]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ¬SameRay ℝ x y
⊢ ‖y‖ - ‖x‖ < ‖y - x‖
[PROOFSTEP]
exact lt_norm_sub_of_not_sameRay (mt SameRay.symm h)
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
⊢ dist x y + dist y z = dist x z ↔ y ∈ [x-[ℝ]z]
[PROOFSTEP]
simp only [mem_segment_iff_sameRay, sameRay_iff_norm_add, dist_eq_norm', sub_add_sub_cancel', eq_comm]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝⁴ : NormedLinearOrderedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedSpace ℝ E
inst✝ : StrictConvexSpace ℝ E
x y z : E
a b r : ℝ
h : ‖x‖ = ‖y‖
⊢ ‖(1 / 2) • (x + y)‖ < ‖x‖ ↔ x ≠ y
[PROOFSTEP]
rw [norm_smul, Real.norm_of_nonneg (one_div_nonneg.2 zero_le_two), ← inv_eq_one_div, ← div_eq_inv_mul,
  div_lt_iff (zero_lt_two' ℝ), mul_two, ← not_sameRay_iff_of_norm_eq h, not_sameRay_iff_norm_add_lt, h]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
have : y -ᵥ x ∈ [(0 : E)-[ℝ]z -ᵥ x] := by
  rw [← dist_add_dist_eq_iff, dist_zero_left, dist_vsub_cancel_right, ← dist_eq_norm_vsub', ← dist_eq_norm_vsub', hxy,
    hyz, ← add_mul, add_sub_cancel'_right, one_mul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
⊢ y -ᵥ x ∈ [0-[ℝ]z -ᵥ x]
[PROOFSTEP]
rw [← dist_add_dist_eq_iff, dist_zero_left, dist_vsub_cancel_right, ← dist_eq_norm_vsub', ← dist_eq_norm_vsub', hxy,
  hyz, ← add_mul, add_sub_cancel'_right, one_mul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
this : y -ᵥ x ∈ [0-[ℝ]z -ᵥ x]
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
rcases eq_or_ne x z with (rfl | hne)
[GOAL]
case inl
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y : PE
hxy : dist x y = r * dist x x
hyz : dist y x = (1 - r) * dist x x
this : y -ᵥ x ∈ [0-[ℝ]x -ᵥ x]
⊢ y = ↑(AffineMap.lineMap x x) r
[PROOFSTEP]
obtain rfl : y = x := by simpa
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y : PE
hxy : dist x y = r * dist x x
hyz : dist y x = (1 - r) * dist x x
this : y -ᵥ x ∈ [0-[ℝ]x -ᵥ x]
⊢ y = x
[PROOFSTEP]
simpa
[GOAL]
case inl
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
y : PE
hxy : dist y y = r * dist y y
hyz : dist y y = (1 - r) * dist y y
this : y -ᵥ y ∈ [0-[ℝ]y -ᵥ y]
⊢ y = ↑(AffineMap.lineMap y y) r
[PROOFSTEP]
simp
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
this : y -ᵥ x ∈ [0-[ℝ]z -ᵥ x]
hne : x ≠ z
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
rw [← dist_ne_zero] at hne
[GOAL]
case inr
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
this : y -ᵥ x ∈ [0-[ℝ]z -ᵥ x]
hne✝ : x ≠ z
hne : dist x z ≠ 0
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
rcases this with ⟨a, b, _, hb, _, H⟩
[GOAL]
case inr.intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a✝ b✝ r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
hne✝ : x ≠ z
hne : dist x z ≠ 0
a b : ℝ
w✝¹ : 0 ≤ a
hb : 0 ≤ b
w✝ : a + b = 1
H : a • 0 + b • (z -ᵥ x) = y -ᵥ x
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
rw [smul_zero, zero_add] at H
[GOAL]
case inr.intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a✝ b✝ r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
hne✝ : x ≠ z
hne : dist x z ≠ 0
a b : ℝ
w✝¹ : 0 ≤ a
hb : 0 ≤ b
w✝ : a + b = 1
H : b • (z -ᵥ x) = y -ᵥ x
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
have H' := congr_arg norm H
[GOAL]
case inr.intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a✝ b✝ r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
hne✝ : x ≠ z
hne : dist x z ≠ 0
a b : ℝ
w✝¹ : 0 ≤ a
hb : 0 ≤ b
w✝ : a + b = 1
H : b • (z -ᵥ x) = y -ᵥ x
H' : ‖b • (z -ᵥ x)‖ = ‖y -ᵥ x‖
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
rw [norm_smul, Real.norm_of_nonneg hb, ← dist_eq_norm_vsub', ← dist_eq_norm_vsub', hxy, mul_left_inj' hne] at H'
[GOAL]
case inr.intro.intro.intro.intro.intro
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a✝ b✝ r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hxy : dist x y = r * dist x z
hyz : dist y z = (1 - r) * dist x z
hne✝ : x ≠ z
hne : dist x z ≠ 0
a b : ℝ
w✝¹ : 0 ≤ a
hb : 0 ≤ b
w✝ : a + b = 1
H : b • (z -ᵥ x) = y -ᵥ x
H' : b = r
⊢ y = ↑(AffineMap.lineMap x z) r
[PROOFSTEP]
rw [AffineMap.lineMap_apply, ← H', H, vsub_vadd]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hx : dist x y = dist x z / 2
hy : dist y z = dist x z / 2
⊢ y = midpoint ℝ x z
[PROOFSTEP]
apply eq_lineMap_of_dist_eq_mul_of_dist_eq_mul
[GOAL]
case hxy
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hx : dist x y = dist x z / 2
hy : dist y z = dist x z / 2
⊢ dist x y = ⅟2 * dist x z
[PROOFSTEP]
rwa [invOf_eq_inv, ← div_eq_inv_mul]
[GOAL]
case hyz
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z✝ : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
x y z : PE
hx : dist x y = dist x z / 2
hy : dist y z = dist x z / 2
⊢ dist y z = (1 - ⅟2) * dist x z
[PROOFSTEP]
rwa [invOf_eq_inv, ← one_div, sub_half, one_div, ← div_eq_inv_mul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
f : PF → PE
hi : Isometry f
x y : PF
⊢ f (midpoint ℝ x y) = midpoint ℝ (f x) (f y)
[PROOFSTEP]
apply eq_midpoint_of_dist_eq_half
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
f : PF → PE
hi : Isometry f
x y : PF
⊢ dist (f x) (f (midpoint ℝ x y)) = dist (f x) (f y) / 2
[PROOFSTEP]
rw [hi.dist_eq, hi.dist_eq]
[GOAL]
case hx
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
f : PF → PE
hi : Isometry f
x y : PF
⊢ dist x (midpoint ℝ x y) = dist x y / 2
[PROOFSTEP]
simp only [dist_left_midpoint, Real.norm_of_nonneg zero_le_two, div_eq_inv_mul]
[GOAL]
case hy
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
f : PF → PE
hi : Isometry f
x y : PF
⊢ dist (f (midpoint ℝ x y)) (f y) = dist (f x) (f y) / 2
[PROOFSTEP]
rw [hi.dist_eq, hi.dist_eq]
[GOAL]
case hy
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y✝ z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
f : PF → PE
hi : Isometry f
x y : PF
⊢ dist (midpoint ℝ x y) y = dist x y / 2
[PROOFSTEP]
simp only [dist_midpoint_right, Real.norm_of_nonneg zero_le_two, div_eq_inv_mul]
[GOAL]
𝕜 : Type u_1
E : Type u_2
inst✝¹⁰ : NormedLinearOrderedField 𝕜
inst✝⁹ : NormedAddCommGroup E
inst✝⁸ : NormedSpace 𝕜 E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : StrictConvexSpace ℝ E
x✝ y z : E
a b r : ℝ
F : Type u_3
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace ℝ F
PF : Type u
PE : Type u_4
inst✝³ : MetricSpace PF
inst✝² : MetricSpace PE
inst✝¹ : NormedAddTorsor F PF
inst✝ : NormedAddTorsor E PE
f : PF → PE
hi : Isometry f
src✝ : PF →ᵃ[ℝ] PE :=
  AffineMap.ofMapMidpoint f (_ : ∀ (x y : PF), f (midpoint ℝ x y) = midpoint ℝ (f x) (f y)) (_ : Continuous f)
x : F
⊢ ‖↑{ toFun := src✝.toFun, linear := src✝.linear,
              map_vadd' :=
                (_ :
                  ∀ (p : PF) (v : F), AffineMap.toFun src✝ (v +ᵥ p) = ↑src✝.linear v +ᵥ AffineMap.toFun src✝ p) }.linear
        x‖ =
    ‖x‖
[PROOFSTEP]
simp [AffineMap.ofMapMidpoint, ← dist_eq_norm_vsub E, hi.dist_eq]


[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop (𝓝 0)
r✝ : ℝ
hr : 0 < r✝
hg : Tendsto (fun x => -f x) atTop (𝓝 (-0))
⊢ -ofSeq f < ↑r✝
[PROOFSTEP]
rw [neg_zero] at hg
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop (𝓝 0)
r✝ : ℝ
hr : 0 < r✝
hg : Tendsto (fun x => -f x) atTop (𝓝 0)
⊢ -ofSeq f < ↑r✝
[PROOFSTEP]
exact lt_of_tendsto_zero_of_pos hg hr
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop (𝓝 0)
r : ℝ
hr : r < 0
⊢ ↑r < ofSeq f
[PROOFSTEP]
rw [← neg_neg r, coe_neg]
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop (𝓝 0)
r : ℝ
hr : r < 0
⊢ -↑(-r) < ofSeq f
[PROOFSTEP]
exact neg_lt_of_tendsto_zero_of_pos hf (neg_pos.mpr hr)
[GOAL]
x : ℝ*
r : ℝ
⊢ IsSt x r ↔ Germ.Tendsto x (𝓝 r)
[PROOFSTEP]
rcases ofSeq_surjective x with ⟨f, rfl⟩
[GOAL]
case intro
r : ℝ
f : ℕ → ℝ
⊢ IsSt (ofSeq f) r ↔ Germ.Tendsto (ofSeq f) (𝓝 r)
[PROOFSTEP]
exact isSt_ofSeq_iff_tendsto
[GOAL]
x y : ℝ*
r s : ℝ
hxr : IsSt x r
hys : IsSt y s
hrs : r < s
⊢ x < y
[PROOFSTEP]
rcases ofSeq_surjective x with ⟨f, rfl⟩
[GOAL]
case intro
y : ℝ*
r s : ℝ
hys : IsSt y s
hrs : r < s
f : ℕ → ℝ
hxr : IsSt (ofSeq f) r
⊢ ofSeq f < y
[PROOFSTEP]
rcases ofSeq_surjective y with ⟨g, rfl⟩
[GOAL]
case intro.intro
r s : ℝ
hrs : r < s
f : ℕ → ℝ
hxr : IsSt (ofSeq f) r
g : ℕ → ℝ
hys : IsSt (ofSeq g) s
⊢ ofSeq f < ofSeq g
[PROOFSTEP]
rw [isSt_ofSeq_iff_tendsto] at hxr hys
[GOAL]
case intro.intro
r s : ℝ
hrs : r < s
f : ℕ → ℝ
hxr : Tendsto f (↑(hyperfilter ℕ)) (𝓝 r)
g : ℕ → ℝ
hys : Tendsto g (↑(hyperfilter ℕ)) (𝓝 s)
⊢ ofSeq f < ofSeq g
[PROOFSTEP]
exact ofSeq_lt_ofSeq.2 <| hxr.eventually_lt hys hrs
[GOAL]
x : ℝ*
r s : ℝ
hr : IsSt x r
hs : IsSt x s
⊢ r = s
[PROOFSTEP]
rcases ofSeq_surjective x with ⟨f, rfl⟩
[GOAL]
case intro
r s : ℝ
f : ℕ → ℝ
hr : IsSt (ofSeq f) r
hs : IsSt (ofSeq f) s
⊢ r = s
[PROOFSTEP]
rw [isSt_ofSeq_iff_tendsto] at hr hs
[GOAL]
case intro
r s : ℝ
f : ℕ → ℝ
hr : Tendsto f (↑(hyperfilter ℕ)) (𝓝 r)
hs : Tendsto f (↑(hyperfilter ℕ)) (𝓝 s)
⊢ r = s
[PROOFSTEP]
exact tendsto_nhds_unique hr hs
[GOAL]
x : ℝ*
r : ℝ
hxr : IsSt x r
⊢ st x = r
[PROOFSTEP]
have h : ∃ r, IsSt x r := ⟨r, hxr⟩
[GOAL]
x : ℝ*
r : ℝ
hxr : IsSt x r
h : ∃ r, IsSt x r
⊢ st x = r
[PROOFSTEP]
rw [st, dif_pos h]
[GOAL]
x : ℝ*
r : ℝ
hxr : IsSt x r
h : ∃ r, IsSt x r
⊢ choose h = r
[PROOFSTEP]
exact (Classical.choose_spec h).unique hxr
[GOAL]
x : ℝ*
⊢ st x = sSup {y | ↑y < x}
[PROOFSTEP]
rcases _root_.em (Infinite x) with (hx | hx)
[GOAL]
case inl
x : ℝ*
hx : Infinite x
⊢ st x = sSup {y | ↑y < x}
[PROOFSTEP]
rw [hx.st_eq]
[GOAL]
case inl
x : ℝ*
hx : Infinite x
⊢ 0 = sSup {y | ↑y < x}
[PROOFSTEP]
cases hx with
| inl hx =>
  convert Real.sSup_univ.symm
  exact Set.eq_univ_of_forall hx
| inr hx =>
  convert Real.sSup_empty.symm
  exact Set.eq_empty_of_forall_not_mem fun y hy ↦ hy.out.not_lt (hx _)
[GOAL]
case inl
x : ℝ*
hx : Infinite x
⊢ 0 = sSup {y | ↑y < x}
[PROOFSTEP]
cases hx with
| inl hx =>
  convert Real.sSup_univ.symm
  exact Set.eq_univ_of_forall hx
| inr hx =>
  convert Real.sSup_empty.symm
  exact Set.eq_empty_of_forall_not_mem fun y hy ↦ hy.out.not_lt (hx _)
[GOAL]
case inl.inl
x : ℝ*
hx : InfinitePos x
⊢ 0 = sSup {y | ↑y < x}
[PROOFSTEP]

| inl hx =>
  convert Real.sSup_univ.symm
  exact Set.eq_univ_of_forall hx
[GOAL]
case inl.inl
x : ℝ*
hx : InfinitePos x
⊢ 0 = sSup {y | ↑y < x}
[PROOFSTEP]
convert Real.sSup_univ.symm
[GOAL]
case h.e'_3.h.e'_3
x : ℝ*
hx : InfinitePos x
⊢ {y | ↑y < x} = Set.univ
[PROOFSTEP]
exact Set.eq_univ_of_forall hx
[GOAL]
case inl.inr
x : ℝ*
hx : InfiniteNeg x
⊢ 0 = sSup {y | ↑y < x}
[PROOFSTEP]

| inr hx =>
  convert Real.sSup_empty.symm
  exact Set.eq_empty_of_forall_not_mem fun y hy ↦ hy.out.not_lt (hx _)
[GOAL]
case inl.inr
x : ℝ*
hx : InfiniteNeg x
⊢ 0 = sSup {y | ↑y < x}
[PROOFSTEP]
convert Real.sSup_empty.symm
[GOAL]
case h.e'_3.h.e'_3
x : ℝ*
hx : InfiniteNeg x
⊢ {y | ↑y < x} = ∅
[PROOFSTEP]
exact Set.eq_empty_of_forall_not_mem fun y hy ↦ hy.out.not_lt (hx _)
[GOAL]
case inr
x : ℝ*
hx : ¬Infinite x
⊢ st x = sSup {y | ↑y < x}
[PROOFSTEP]
exact (isSt_sSup hx).st_eq
[GOAL]
x : ℝ*
r : ℝ
hxr : IsSt x r
⊢ IsSt x (st x)
[PROOFSTEP]
rwa [hxr.st_eq]
[GOAL]
r s : ℝ
⊢ IsSt (↑r) s ↔ IsSt (↑s) r
[PROOFSTEP]
rw [isSt_real_iff_eq, isSt_real_iff_eq, eq_comm]
[GOAL]
r s t : ℝ
⊢ IsSt (↑r) s → IsSt (↑s) t → IsSt (↑r) t
[PROOFSTEP]
rw [isSt_real_iff_eq, isSt_real_iff_eq, isSt_real_iff_eq]
[GOAL]
r s t : ℝ
⊢ r = s → s = t → r = t
[PROOFSTEP]
exact Eq.trans
[GOAL]
x : ℝ*
r : ℝ
⊢ IsSt x r ↔ ∀ (δ : ℝ), 0 < δ → |x - ↑r| < ↑δ
[PROOFSTEP]
simp only [abs_sub_lt_iff, sub_lt_iff_lt_add, IsSt, and_comm, add_comm]
[GOAL]
x : ℝ*
r : ℝ
hxr : IsSt x r
f : ℝ → ℝ
hf : ContinuousAt f r
⊢ IsSt (Germ.map f x) (f r)
[PROOFSTEP]
rcases ofSeq_surjective x with ⟨g, rfl⟩
[GOAL]
case intro
r : ℝ
f : ℝ → ℝ
hf : ContinuousAt f r
g : ℕ → ℝ
hxr : IsSt (ofSeq g) r
⊢ IsSt (Germ.map f (ofSeq g)) (f r)
[PROOFSTEP]
exact isSt_ofSeq_iff_tendsto.2 <| hf.tendsto.comp (isSt_ofSeq_iff_tendsto.1 hxr)
[GOAL]
x y : ℝ*
r s : ℝ
hxr : IsSt x r
hys : IsSt y s
f : ℝ → ℝ → ℝ
hf : ContinuousAt (Function.uncurry f) (r, s)
⊢ IsSt (Germ.map₂ f x y) (f r s)
[PROOFSTEP]
rcases ofSeq_surjective x with ⟨x, rfl⟩
[GOAL]
case intro
y : ℝ*
r s : ℝ
hys : IsSt y s
f : ℝ → ℝ → ℝ
hf : ContinuousAt (Function.uncurry f) (r, s)
x : ℕ → ℝ
hxr : IsSt (ofSeq x) r
⊢ IsSt (Germ.map₂ f (ofSeq x) y) (f r s)
[PROOFSTEP]
rcases ofSeq_surjective y with ⟨y, rfl⟩
[GOAL]
case intro.intro
r s : ℝ
f : ℝ → ℝ → ℝ
hf : ContinuousAt (Function.uncurry f) (r, s)
x : ℕ → ℝ
hxr : IsSt (ofSeq x) r
y : ℕ → ℝ
hys : IsSt (ofSeq y) s
⊢ IsSt (Germ.map₂ f (ofSeq x) (ofSeq y)) (f r s)
[PROOFSTEP]
rw [isSt_ofSeq_iff_tendsto] at hxr hys
[GOAL]
case intro.intro
r s : ℝ
f : ℝ → ℝ → ℝ
hf : ContinuousAt (Function.uncurry f) (r, s)
x : ℕ → ℝ
hxr : Tendsto x (↑(hyperfilter ℕ)) (𝓝 r)
y : ℕ → ℝ
hys : Tendsto y (↑(hyperfilter ℕ)) (𝓝 s)
⊢ IsSt (Germ.map₂ f (ofSeq x) (ofSeq y)) (f r s)
[PROOFSTEP]
exact isSt_ofSeq_iff_tendsto.2 <| hf.tendsto.comp (hxr.prod_mk_nhds hys)
[GOAL]
x : ℝ*
⊢ Infinite |x| ↔ Infinite x
[PROOFSTEP]
cases le_total 0 x
[GOAL]
case inl
x : ℝ*
h✝ : 0 ≤ x
⊢ Infinite |x| ↔ Infinite x
[PROOFSTEP]
simp [*, abs_of_nonneg, abs_of_nonpos, infinite_neg]
[GOAL]
case inr
x : ℝ*
h✝ : x ≤ 0
⊢ Infinite |x| ↔ Infinite x
[PROOFSTEP]
simp [*, abs_of_nonneg, abs_of_nonpos, infinite_neg]
[GOAL]
x y : ℝ*
⊢ InfinitePos x → ¬InfiniteNeg y → InfinitePos (x + y)
[PROOFSTEP]
intro hip hnin r
[GOAL]
x y : ℝ*
hip : InfinitePos x
hnin : ¬InfiniteNeg y
r : ℝ
⊢ ↑r < x + y
[PROOFSTEP]
cases' not_forall.mp hnin with r₂ hr₂
[GOAL]
case intro
x y : ℝ*
hip : InfinitePos x
hnin : ¬InfiniteNeg y
r r₂ : ℝ
hr₂ : ¬y < ↑r₂
⊢ ↑r < x + y
[PROOFSTEP]
convert add_lt_add_of_lt_of_le (hip (r + -r₂)) (not_lt.mp hr₂) using 1
[GOAL]
case h.e'_3
x y : ℝ*
hip : InfinitePos x
hnin : ¬InfiniteNeg y
r r₂ : ℝ
hr₂ : ¬y < ↑r₂
⊢ ↑r = ↑(r + -r₂) + ↑r₂
[PROOFSTEP]
simp
[GOAL]
x y : ℝ*
⊢ InfiniteNeg x → ¬InfinitePos y → InfiniteNeg (x + y)
[PROOFSTEP]
rw [← infinitePos_neg, ← infinitePos_neg, ← @infiniteNeg_neg y, neg_add]
[GOAL]
x y : ℝ*
⊢ InfinitePos (-x) → ¬InfiniteNeg (-y) → InfinitePos (-x + -y)
[PROOFSTEP]
exact infinitePos_add_not_infiniteNeg
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop atTop
r : ℝ
hf' : ∀ (b : ℝ), ∃ i, ∀ (a : ℕ), i ≤ a → b ≤ f a
i : ℕ
hi : ∀ (a : ℕ), i ≤ a → r + 1 ≤ f a
hi' : ∀ (a : ℕ), f a < r + 1 → a < i
⊢ {a | r < f a}ᶜ ⊆ {a | a ≤ i}
[PROOFSTEP]
simp only [Set.compl_setOf, not_lt]
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop atTop
r : ℝ
hf' : ∀ (b : ℝ), ∃ i, ∀ (a : ℕ), i ≤ a → b ≤ f a
i : ℕ
hi : ∀ (a : ℕ), i ≤ a → r + 1 ≤ f a
hi' : ∀ (a : ℕ), f a < r + 1 → a < i
⊢ {a | f a ≤ r} ⊆ {a | a ≤ i}
[PROOFSTEP]
exact fun a har => le_of_lt (hi' a (lt_of_le_of_lt har (lt_add_one _)))
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop atBot
r : ℝ
hf' : ∀ (b : ℝ), ∃ i, ∀ (a : ℕ), i ≤ a → f a ≤ b
i : ℕ
hi : ∀ (a : ℕ), i ≤ a → f a ≤ r - 1
hi' : ∀ (a : ℕ), r - 1 < f a → a < i
⊢ {a | f a < r}ᶜ ⊆ {a | a ≤ i}
[PROOFSTEP]
simp only [Set.compl_setOf, not_lt]
[GOAL]
f : ℕ → ℝ
hf : Tendsto f atTop atBot
r : ℝ
hf' : ∀ (b : ℝ), ∃ i, ∀ (a : ℕ), i ≤ a → f a ≤ b
i : ℕ
hi : ∀ (a : ℕ), i ≤ a → f a ≤ r - 1
hi' : ∀ (a : ℕ), r - 1 < f a → a < i
⊢ {a | r ≤ f a} ⊆ {a | a ≤ i}
[PROOFSTEP]
exact fun a har => le_of_lt (hi' a (lt_of_lt_of_le (sub_one_lt _) har))
[GOAL]
r : ℝ
⊢ ¬Infinite ↑r
[PROOFSTEP]
rw [not_infinite_iff_exist_lt_gt]
[GOAL]
r : ℝ
⊢ ∃ r_1 s, ↑r_1 < ↑r ∧ ↑r < ↑s
[PROOFSTEP]
exact ⟨r - 1, r + 1, coe_lt_coe.2 <| sub_one_lt r, coe_lt_coe.2 <| lt_add_one r⟩
[GOAL]
x : ℝ*
h : Infinite x
⊢ st (-x) = -st x
[PROOFSTEP]
rw [h.st_eq, (infinite_neg.2 h).st_eq, neg_zero]
[GOAL]
x : ℝ*
⊢ Infinitesimal x ↔ ∀ (r : ℝ), 0 < r → -↑r < x ∧ x < ↑r
[PROOFSTEP]
simp [Infinitesimal, IsSt]
[GOAL]
x y : ℝ*
hx : Infinitesimal x
hy : Infinitesimal y
⊢ Infinitesimal (x + y)
[PROOFSTEP]
simpa only [add_zero] using hx.add hy
[GOAL]
x : ℝ*
hx : Infinitesimal x
⊢ Infinitesimal (-x)
[PROOFSTEP]
simpa only [neg_zero] using hx.neg
[GOAL]
x y : ℝ*
hx : Infinitesimal x
hy : Infinitesimal y
⊢ Infinitesimal (x * y)
[PROOFSTEP]
simpa only [mul_zero] using hx.mul hy
[GOAL]
x : ℝ*
r : ℝ
hxr : IsSt x r
⊢ Infinitesimal (x - ↑r)
[PROOFSTEP]
simpa only [sub_self] using hxr.sub (isSt_refl_real r)
[GOAL]
x : ℝ*
hip : InfinitePos x
r : ℝ
hr : 0 < r
⊢ (↑r)⁻¹ < x
[PROOFSTEP]
convert hip r⁻¹
[GOAL]
x : ℝ*
⊢ InfiniteNeg x ↔ Infinitesimal x⁻¹ ∧ x⁻¹ < 0
[PROOFSTEP]
rw [← infinitePos_neg, infinitePos_iff_infinitesimal_inv_pos, inv_neg, neg_pos, infinitesimal_neg]
[GOAL]
x : ℝ*
h0 : x ≠ 0
hi : Infinitesimal x⁻¹
⊢ Infinite x
[PROOFSTEP]
cases' lt_or_gt_of_ne h0 with hn hp
[GOAL]
case inl
x : ℝ*
h0 : x ≠ 0
hi : Infinitesimal x⁻¹
hn : x < 0
⊢ Infinite x
[PROOFSTEP]
exact Or.inr (infiniteNeg_iff_infinitesimal_inv_neg.mpr ⟨hi, inv_lt_zero.mpr hn⟩)
[GOAL]
case inr
x : ℝ*
h0 : x ≠ 0
hi : Infinitesimal x⁻¹
hp : x > 0
⊢ Infinite x
[PROOFSTEP]
exact Or.inl (infinitePos_iff_infinitesimal_inv_pos.mpr ⟨hi, inv_pos.mpr hp⟩)
[GOAL]
x : ℝ*
⊢ Infinitesimal x⁻¹⁻¹ ∧ 0 < x⁻¹⁻¹ ↔ Infinitesimal x ∧ 0 < x
[PROOFSTEP]
rw [inv_inv]
[GOAL]
x : ℝ*
⊢ Infinitesimal x⁻¹⁻¹ ∧ x⁻¹⁻¹ < 0 ↔ Infinitesimal x ∧ x < 0
[PROOFSTEP]
rw [inv_inv]
[GOAL]
x : ℝ*
h : x ≠ 0
⊢ Infinitesimal x ↔ Infinitesimal x⁻¹⁻¹
[PROOFSTEP]
rw [inv_inv]
[GOAL]
x : ℝ*
r : ℝ
hi : ¬Infinitesimal x
hr : IsSt x r
⊢ r ≠ 0
[PROOFSTEP]
rintro rfl
[GOAL]
x : ℝ*
hi : ¬Infinitesimal x
hr : IsSt x 0
⊢ False
[PROOFSTEP]
exact hi hr
[GOAL]
x : ℝ*
⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
by_cases h0 : x = 0
[GOAL]
case pos
x : ℝ*
h0 : x = 0
⊢ st x⁻¹ = (st x)⁻¹
case neg x : ℝ* h0 : ¬x = 0 ⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
rw [h0, inv_zero, ← coe_zero, st_id_real, inv_zero]
[GOAL]
case neg
x : ℝ*
h0 : ¬x = 0
⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
by_cases h1 : Infinitesimal x
[GOAL]
case pos
x : ℝ*
h0 : ¬x = 0
h1 : Infinitesimal x
⊢ st x⁻¹ = (st x)⁻¹
case neg x : ℝ* h0 : ¬x = 0 h1 : ¬Infinitesimal x ⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
rw [((infinitesimal_iff_infinite_inv h0).mp h1).st_eq, h1.st_eq, inv_zero]
[GOAL]
case neg
x : ℝ*
h0 : ¬x = 0
h1 : ¬Infinitesimal x
⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
by_cases h2 : Infinite x
[GOAL]
case pos
x : ℝ*
h0 : ¬x = 0
h1 : ¬Infinitesimal x
h2 : Infinite x
⊢ st x⁻¹ = (st x)⁻¹
case neg x : ℝ* h0 : ¬x = 0 h1 : ¬Infinitesimal x h2 : ¬Infinite x ⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
rw [(infinitesimal_inv_of_infinite h2).st_eq, h2.st_eq, inv_zero]
[GOAL]
case neg
x : ℝ*
h0 : ¬x = 0
h1 : ¬Infinitesimal x
h2 : ¬Infinite x
⊢ st x⁻¹ = (st x)⁻¹
[PROOFSTEP]
exact ((isSt_st' h2).inv h1).st_eq
[GOAL]
x y : ℝ*
hx : InfinitePos x
hy₁ : ¬Infinitesimal y
hy₂ : 0 < y
r : ℝ
⊢ ↑r < x * y
[PROOFSTEP]
have hy₁' := not_forall.mp (mt infinitesimal_def.2 hy₁)
[GOAL]
x y : ℝ*
hx : InfinitePos x
hy₁ : ¬Infinitesimal y
hy₂ : 0 < y
r : ℝ
hy₁' : ∃ x, ¬(0 < x → -↑x < y ∧ y < ↑x)
⊢ ↑r < x * y
[PROOFSTEP]
let ⟨r₁, hy₁''⟩ := hy₁'
[GOAL]
x y : ℝ*
hx : InfinitePos x
hy₁ : ¬Infinitesimal y
hy₂ : 0 < y
r : ℝ
hy₁' : ∃ x, ¬(0 < x → -↑x < y ∧ y < ↑x)
r₁ : ℝ
hy₁'' : ¬(0 < r₁ → -↑r₁ < y ∧ y < ↑r₁)
⊢ ↑r < x * y
[PROOFSTEP]
have hyr : 0 < r₁ ∧ ↑r₁ ≤ y := by rwa [not_imp, ← abs_lt, not_lt, abs_of_pos hy₂] at hy₁''
[GOAL]
x y : ℝ*
hx : InfinitePos x
hy₁ : ¬Infinitesimal y
hy₂ : 0 < y
r : ℝ
hy₁' : ∃ x, ¬(0 < x → -↑x < y ∧ y < ↑x)
r₁ : ℝ
hy₁'' : ¬(0 < r₁ → -↑r₁ < y ∧ y < ↑r₁)
⊢ 0 < r₁ ∧ ↑r₁ ≤ y
[PROOFSTEP]
rwa [not_imp, ← abs_lt, not_lt, abs_of_pos hy₂] at hy₁''
[GOAL]
x y : ℝ*
hx : InfinitePos x
hy₁ : ¬Infinitesimal y
hy₂ : 0 < y
r : ℝ
hy₁' : ∃ x, ¬(0 < x → -↑x < y ∧ y < ↑x)
r₁ : ℝ
hy₁'' : ¬(0 < r₁ → -↑r₁ < y ∧ y < ↑r₁)
hyr : 0 < r₁ ∧ ↑r₁ ≤ y
⊢ ↑r < x * y
[PROOFSTEP]
rw [← div_mul_cancel r (ne_of_gt hyr.1), coe_mul]
[GOAL]
x y : ℝ*
hx : InfinitePos x
hy₁ : ¬Infinitesimal y
hy₂ : 0 < y
r : ℝ
hy₁' : ∃ x, ¬(0 < x → -↑x < y ∧ y < ↑x)
r₁ : ℝ
hy₁'' : ¬(0 < r₁ → -↑r₁ < y ∧ y < ↑r₁)
hyr : 0 < r₁ ∧ ↑r₁ ≤ y
⊢ ↑(r / r₁) * ↑r₁ < x * y
[PROOFSTEP]
exact mul_lt_mul (hx (r / r₁)) hyr.2 (coe_lt_coe.2 hyr.1) (le_of_lt (hx 0))
[GOAL]
x y : ℝ*
⊢ InfiniteNeg x → ¬Infinitesimal y → y < 0 → InfinitePos (x * y)
[PROOFSTEP]
rw [← infinitePos_neg, ← neg_pos, ← neg_mul_neg, ← infinitesimal_neg]
[GOAL]
x y : ℝ*
⊢ InfinitePos (-x) → ¬Infinitesimal (-y) → 0 < -y → InfinitePos (-x * -y)
[PROOFSTEP]
exact infinitePos_mul_of_infinitePos_not_infinitesimal_pos
[GOAL]
x y : ℝ*
⊢ InfinitePos x → ¬Infinitesimal y → y < 0 → InfiniteNeg (x * y)
[PROOFSTEP]
rw [← infinitePos_neg, ← neg_pos, neg_mul_eq_mul_neg, ← infinitesimal_neg]
[GOAL]
x y : ℝ*
⊢ InfinitePos x → ¬Infinitesimal (-y) → 0 < -y → InfinitePos (x * -y)
[PROOFSTEP]
exact infinitePos_mul_of_infinitePos_not_infinitesimal_pos
[GOAL]
x y : ℝ*
⊢ InfiniteNeg x → ¬Infinitesimal y → 0 < y → InfiniteNeg (x * y)
[PROOFSTEP]
rw [← infinitePos_neg, ← infinitePos_neg, neg_mul_eq_neg_mul]
[GOAL]
x y : ℝ*
⊢ InfinitePos (-x) → ¬Infinitesimal y → 0 < y → InfinitePos (-x * y)
[PROOFSTEP]
exact infinitePos_mul_of_infinitePos_not_infinitesimal_pos
[GOAL]
x y : ℝ*
hx : ¬Infinitesimal x
hp : 0 < x
hy : InfiniteNeg y
⊢ InfiniteNeg (x * y)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
x y : ℝ*
hx : ¬Infinitesimal x
hp : 0 < x
hy : InfiniteNeg y
⊢ InfiniteNeg (y * x)
[PROOFSTEP]
exact infiniteNeg_mul_of_infiniteNeg_not_infinitesimal_pos hy hx hp
[GOAL]
x y : ℝ*
hx : ¬Infinitesimal x
hy : Infinite y
⊢ Infinite (x * y)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
x y : ℝ*
hx : ¬Infinitesimal x
hy : Infinite y
⊢ Infinite (y * x)
[PROOFSTEP]
exact infinite_mul_of_infinite_not_infinitesimal hy hx