[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
ha : IsLeast {g | g ∈ H ∧ 0 < g} a
⊢ H = closure {a}
[PROOFSTEP]
obtain ⟨⟨a_in, a_pos⟩, a_min⟩ := ha
[GOAL]
case intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
⊢ H = closure {a}
[PROOFSTEP]
refine' le_antisymm _ (H.closure_le.mpr <| by simp [a_in])
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
⊢ {a} ⊆ ↑H
[PROOFSTEP]
simp [a_in]
[GOAL]
case intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
⊢ H ≤ closure {a}
[PROOFSTEP]
intro g g_in
[GOAL]
case intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
⊢ g ∈ closure {a}
[PROOFSTEP]
obtain ⟨k, ⟨nonneg, lt⟩, _⟩ := existsUnique_zsmul_near_of_pos' a_pos g
[GOAL]
case intro.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
⊢ g ∈ closure {a}
[PROOFSTEP]
have h_zero : g - k • a = 0 := by
  by_contra h
  have h : a ≤ g - k • a := by
    refine' a_min ⟨_, _⟩
    · exact AddSubgroup.sub_mem H g_in (AddSubgroup.zsmul_mem H a_in k)
    · exact lt_of_le_of_ne nonneg (Ne.symm h)
  have h' : ¬a ≤ g - k • a := not_le.mpr lt
  contradiction
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
⊢ g - k • a = 0
[PROOFSTEP]
by_contra h
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h : ¬g - k • a = 0
⊢ False
[PROOFSTEP]
have h : a ≤ g - k • a := by
  refine' a_min ⟨_, _⟩
  · exact AddSubgroup.sub_mem H g_in (AddSubgroup.zsmul_mem H a_in k)
  · exact lt_of_le_of_ne nonneg (Ne.symm h)
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h : ¬g - k • a = 0
⊢ a ≤ g - k • a
[PROOFSTEP]
refine' a_min ⟨_, _⟩
[GOAL]
case refine'_1
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h : ¬g - k • a = 0
⊢ g - k • a ∈ H
[PROOFSTEP]
exact AddSubgroup.sub_mem H g_in (AddSubgroup.zsmul_mem H a_in k)
[GOAL]
case refine'_2
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h : ¬g - k • a = 0
⊢ 0 < g - k • a
[PROOFSTEP]
exact lt_of_le_of_ne nonneg (Ne.symm h)
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h✝ : ¬g - k • a = 0
h : a ≤ g - k • a
⊢ False
[PROOFSTEP]
have h' : ¬a ≤ g - k • a := not_le.mpr lt
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h✝ : ¬g - k • a = 0
h : a ≤ g - k • a
h' : ¬a ≤ g - k • a
⊢ False
[PROOFSTEP]
contradiction
[GOAL]
case intro.intro.intro.intro.intro
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
a_min : a ∈ lowerBounds {g | g ∈ H ∧ 0 < g}
a_in : a ∈ H
a_pos : 0 < a
g : G
g_in : g ∈ H
k : ℤ
right✝ : ∀ (y : ℤ), (fun k => 0 ≤ g - k • a ∧ g - k • a < a) y → y = k
nonneg : 0 ≤ g - k • a
lt : g - k • a < a
h_zero : g - k • a = 0
⊢ g ∈ closure {a}
[PROOFSTEP]
simp [sub_eq_zero.mp h_zero, AddSubgroup.mem_closure_singleton]
[GOAL]
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)
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
[PROOFSTEP]
have hex : ∀ g > 0, ∃ n : ℕ, g ∈ Ioc (n • a) ((n + 1) • a) := fun g hg =>
  by
  rcases existsUnique_add_zsmul_mem_Ico h₀ 0 (g - a) with ⟨m, ⟨hm, hm'⟩, -⟩
  simp only [zero_add, sub_le_iff_le_add, sub_add_cancel, ← add_one_zsmul] at hm hm' 
  lift m to ℕ
  · rw [← Int.lt_add_one_iff, ← zsmul_lt_zsmul_iff h₀, zero_zsmul]
    exact hg.trans_le hm
  · simp only [← Nat.cast_succ, coe_nat_zsmul] at hm hm' 
    exact ⟨m, hm', hm⟩
[GOAL]
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)
g : G
hg : g > 0
⊢ ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
[PROOFSTEP]
rcases existsUnique_add_zsmul_mem_Ico h₀ 0 (g - a) with ⟨m, ⟨hm, hm'⟩, -⟩
[GOAL]
case 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)
g : G
hg : g > 0
m : ℤ
hm : g - a ≤ 0 + m • a
hm' : 0 + m • a < g - a + a
⊢ ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
[PROOFSTEP]
simp only [zero_add, sub_le_iff_le_add, sub_add_cancel, ← add_one_zsmul] at hm hm' 
[GOAL]
case 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)
g : G
hg : g > 0
m : ℤ
hm : g ≤ (m + 1) • a
hm' : m • a < g
⊢ ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
[PROOFSTEP]
lift m to ℕ
[GOAL]
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)
g : G
hg : g > 0
m : ℤ
hm : g ≤ (m + 1) • a
hm' : m • a < g
⊢ 0 ≤ m
[PROOFSTEP]
rw [← Int.lt_add_one_iff, ← zsmul_lt_zsmul_iff h₀, zero_zsmul]
[GOAL]
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)
g : G
hg : g > 0
m : ℤ
hm : g ≤ (m + 1) • a
hm' : m • a < g
⊢ 0 < (m + 1) • a
[PROOFSTEP]
exact hg.trans_le hm
[GOAL]
case 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)
g : G
hg : g > 0
m : ℕ
hm : g ≤ (↑m + 1) • a
hm' : ↑m • a < g
⊢ ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
[PROOFSTEP]
simp only [← Nat.cast_succ, coe_nat_zsmul] at hm hm' 
[GOAL]
case 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)
g : G
hg : g > 0
m : ℕ
hm : g ≤ Nat.succ m • a
hm' : m • a < g
⊢ ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
[PROOFSTEP]
exact ⟨m, hm', hm⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
[PROOFSTEP]
have : ∃ n : ℕ, Set.Nonempty (H ∩ Ioc (n • a) ((n + 1) • a))
[GOAL]
case this
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
⊢ ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
[PROOFSTEP]
rcases(bot_or_exists_ne_zero H).resolve_left hbot with ⟨g, hgH, hg₀⟩
[GOAL]
case this.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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
g : G
hgH : g ∈ H
hg₀ : g ≠ 0
⊢ ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
[PROOFSTEP]
rcases hex |g| (abs_pos.2 hg₀) with ⟨n, hn⟩
[GOAL]
case this.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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
g : G
hgH : g ∈ H
hg₀ : g ≠ 0
n : ℕ
hn : |g| ∈ Ioc (n • a) ((n + 1) • a)
⊢ ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
[PROOFSTEP]
exact ⟨n, _, (@abs_mem_iff (AddSubgroup G) G _ _).2 hgH, hn⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
[PROOFSTEP]
classical rcases Nat.findX this with ⟨n, ⟨x, hxH, hnx, hxn⟩, hmin⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
[PROOFSTEP]
rcases Nat.findX this with ⟨n, ⟨x, hxH, hnx, hxn⟩, hmin⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
⊢ ∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
[PROOFSTEP]
by_contra hxmin
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ¬∃ b, IsLeast {g | g ∈ H ∧ 0 < g} b
⊢ False
[PROOFSTEP]
simp only [IsLeast, not_and, mem_setOf_eq, mem_lowerBounds, not_exists, not_forall, not_le] at hxmin 
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1 h, x_1 < x
⊢ False
[PROOFSTEP]
rcases hxmin x ⟨hxH, (nsmul_nonneg h₀.le _).trans_lt hnx⟩ with ⟨y, ⟨hyH, hy₀⟩, hxy⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1 h, x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
⊢ False
[PROOFSTEP]
rcases hex y hy₀ with ⟨m, hm⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1 h, x_1 < x
y : G
hxy : y < x
hyH : y ∈ H
hy₀ : 0 < y
m : ℕ
hm : y ∈ Ioc (m • a) ((m + 1) • a)
⊢ False
[PROOFSTEP]
cases' lt_or_le m n with hmn hnm
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1 h, 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
[PROOFSTEP]
exact hmin m hmn ⟨y, hyH, hm⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1 h, 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
[PROOFSTEP]
refine disjoint_left.1 hd (sub_mem hxH hyH) ⟨sub_pos.2 hxy, sub_lt_iff_lt_add'.2 ?_⟩
[GOAL]
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 : G), g > 0 → ∃ n, g ∈ Ioc (n • a) ((n + 1) • a)
this : ∃ n, Set.Nonempty (↑H ∩ Ioc (n • a) ((n + 1) • a))
n : ℕ
hmin : ∀ (m : ℕ), m < n → ¬Set.Nonempty (↑H ∩ Ioc (m • a) ((m + 1) • a))
x : G
hxH : x ∈ ↑H
hnx : n • a < x
hxn : x ≤ (n + 1) • a
hxmin : ∀ (x : G), x ∈ H ∧ 0 < x → ∃ x_1 h, 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
⊢ x < y + a
[PROOFSTEP]
calc
  x ≤ (n + 1) • a := hxn
  _ ≤ (m + 1) • a := (nsmul_le_nsmul h₀.le (add_le_add_right hnm _))
  _ = m • a + a := (succ_nsmul' _ _)
  _ < y + a := add_lt_add_right hm.1 _
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
⊢ ∃ b, H = closure {b}
[PROOFSTEP]
rcases eq_or_ne H ⊥ with rfl | hbot
[GOAL]
case inl
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
a : G
h₀ : 0 < a
hd : Disjoint (↑⊥) (Ioo 0 a)
⊢ ∃ b, ⊥ = closure {b}
[PROOFSTEP]
exact ⟨0, closure_singleton_zero.symm⟩
[GOAL]
case inr
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup G
a : G
h₀ : 0 < a
hd : Disjoint (↑H) (Ioo 0 a)
hbot : H ≠ ⊥
⊢ ∃ b, H = closure {b}
[PROOFSTEP]
exact (exists_isLeast_pos hbot h₀ hd).imp fun _ => cyclic_of_min
[GOAL]
G : Type u_1
inst✝¹ : LinearOrderedAddCommGroup G
inst✝ : Archimedean G
H : AddSubgroup ℤ
this : Ioo 0 1 = ∅
⊢ Disjoint (↑H) (Ioo 0 1)
[PROOFSTEP]
simp [this]
