Theorem: isBounded_pow
File: Mathlib/Topology/Bornology/BoundedOperation.lean

tactic: induction' n with n hn
state_before: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
⊢ Bornology.IsBounded ((fun x => x ^ n) '' s)
state_after: case zero
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)

case succ
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
⊢ Bornology.IsBounded ((fun x => x ^ (n + 1)) '' s)

tactic: by_cases s_empty : s = ∅
state_before: case zero
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)
state_after: case pos
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
s_empty : s = ∅
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)

case neg
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
s_empty : ¬s = ∅
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)

tactic: simp_rw [← nonempty_iff_ne_empty] at s_empty
state_before: case neg
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
s_empty : ¬s = ∅
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)
state_after: case neg
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
s_empty : s.Nonempty
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)

tactic: simp [s_empty]
state_before: case neg
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
s_empty : s.Nonempty
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)
state_after: no goals

tactic: simp [s_empty]
state_before: case pos
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
s_empty : s = ∅
⊢ Bornology.IsBounded ((fun x => x ^ 0) '' s)
state_after: no goals

tactic: have obs : ((fun x ↦ x ^ (n + 1)) '' s) ⊆ ((fun x ↦ x ^ n) '' s) * s := by
  intro x hx
  simp only [mem_image] at hx
  obtain ⟨y, y_in_s, ypow_eq_x⟩ := hx
  rw [← ypow_eq_x, pow_succ y n]
  apply Set.mul_mem_mul _ y_in_s
  use y
state_before: case succ
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
⊢ Bornology.IsBounded ((fun x => x ^ (n + 1)) '' s)
state_after: case succ
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
obs : (fun x => x ^ (n + 1)) '' s ⊆ (fun x => x ^ n) '' s * s
⊢ Bornology.IsBounded ((fun x => x ^ (n + 1)) '' s)

tactic: exact (isBounded_mul hn s_bdd).subset obs
state_before: case succ
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
obs : (fun x => x ^ (n + 1)) '' s ⊆ (fun x => x ^ n) '' s * s
⊢ Bornology.IsBounded ((fun x => x ^ (n + 1)) '' s)
state_after: no goals

tactic: intro x hx
state_before: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
⊢ (fun x => x ^ (n + 1)) '' s ⊆ (fun x => x ^ n) '' s * s
state_after: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x : R
hx : x ∈ (fun x => x ^ (n + 1)) '' s
⊢ x ∈ (fun x => x ^ n) '' s * s

tactic: simp only [mem_image] at hx
state_before: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x : R
hx : x ∈ (fun x => x ^ (n + 1)) '' s
⊢ x ∈ (fun x => x ^ n) '' s * s
state_after: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x : R
hx : ∃ x_1 ∈ s, x_1 ^ (n + 1) = x
⊢ x ∈ (fun x => x ^ n) '' s * s

tactic: obtain ⟨y, y_in_s, ypow_eq_x⟩ := hx
state_before: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x : R
hx : ∃ x_1 ∈ s, x_1 ^ (n + 1) = x
⊢ x ∈ (fun x => x ^ n) '' s * s
state_after: case intro.intro
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x y : R
y_in_s : y ∈ s
ypow_eq_x : y ^ (n + 1) = x
⊢ x ∈ (fun x => x ^ n) '' s * s

tactic: rw [← ypow_eq_x, pow_succ y n]
state_before: case intro.intro
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x y : R
y_in_s : y ∈ s
ypow_eq_x : y ^ (n + 1) = x
⊢ x ∈ (fun x => x ^ n) '' s * s
state_after: case intro.intro
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x y : R
y_in_s : y ∈ s
ypow_eq_x : y ^ (n + 1) = x
⊢ y ^ n * y ∈ (fun x => x ^ n) '' s * s

tactic: apply Set.mul_mem_mul _ y_in_s
state_before: case intro.intro
R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x y : R
y_in_s : y ∈ s
ypow_eq_x : y ^ (n + 1) = x
⊢ y ^ n * y ∈ (fun x => x ^ n) '' s * s
state_after: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x y : R
y_in_s : y ∈ s
ypow_eq_x : y ^ (n + 1) = x
⊢ y ^ n ∈ (fun x => x ^ n) '' s

tactic: use y
state_before: R✝ : Type u_1
R : Type u_2
inst✝² : Bornology R
inst✝¹ : Monoid R
inst✝ : BoundedMul R
s : Set R
s_bdd : Bornology.IsBounded s
n : ℕ
hn : Bornology.IsBounded ((fun x => x ^ n) '' s)
x y : R
y_in_s : y ∈ s
ypow_eq_x : y ^ (n + 1) = x
⊢ y ^ n ∈ (fun x => x ^ n) '' s
state_after: no goals