Theorem: AddSubgroup.exists_isLeast_pos
File: Mathlib/GroupTheory/Archimedean.lean

Proof steps:
state_before: G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
state_after: G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
tactic: have : ∃ n : ℕ, Set.Nonempty (H ∩ Ioc (n • a) ((n + 1) • a)) := by
    rcases (bot_or_exists_ne_zero H).resolve_left hbot with ⟨g, hgH, hg₀⟩
    rcases hex |g| (abs_pos.2 hg₀) with ⟨n, hn⟩
    exact ⟨n, _, (@abs_mem_iff (AddSubgroup G) G _ _).2 hgH, hn⟩
state_before: G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
state_after: case mk.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
tactic: classical rcases Nat.findX this with ⟨n, ⟨x, hxH, hnx, hxn⟩, hmin⟩
state_before: case mk.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
state_after: case mk.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ¬∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
⊢ False
tactic: by_contra hxmin
state_before: case mk.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ¬∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
⊢ False
state_after: case mk.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
⊢ False
tactic: simp only [IsLeast, not_and, mem_setOf_eq, mem_lowerBounds, not_exists, not_forall,
    not_le] at hxmin
state_before: case mk.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
⊢ False
state_after: case mk.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
⊢ False
tactic: rcases hxmin x ⟨hxH, (nsmul_nonneg h₀.le _).trans_lt hnx⟩ with ⟨y, ⟨hyH, hy₀⟩, hxy⟩
state_before: case mk.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
⊢ False
state_after: case mk.intro.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
m : ℕ
hm : y ∈ Ioc (m • a) ((m + 1) • a)
⊢ False
tactic: rcases hex y hy₀ with ⟨m, hm⟩
state_before: case mk.intro.intro.intro.intro.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
m : ℕ
hm : y ∈ Ioc (m • a) ((m + 1) • a)
⊢ False
state_after: case mk.intro.intro.intro.intro.intro.intro.intro.intro.inl
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
m : ℕ
hm : y ∈ Ioc (m • a) ((m + 1) • a)
hmn : m < n
⊢ False

case mk.intro.intro.intro.intro.intro.intro.intro.intro.inr
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
hbot : H ≠ ⊥
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hex : ∀ g > 0, ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, (↑H ∩ Ioc (n • a) ((n + 1) • a)).Nonempty
n : ℕ
hmin : ∀ m < n, ¬(↑H ∩ Ioc (m • a) ((m + 1) • a)).Nonempty
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1, ∃ (_ : x_1 ∈ H ∧ 0 < x_1), x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
m : ℕ
hm : y ∈ Ioc (m • a) ((m + 1) • a)
hnm : n ≤ m
⊢ False
tactic: cases' lt_or_le m n with hmn hnm