Theorem: AddCircle.injective_toCircle
File: Mathlib/Analysis/SpecialFunctions/Complex/Circle.lean

Proof steps:
state_before: T : ℝ
hT : T ≠ 0
⊢ Injective toCircle
state_after: T : ℝ
hT : T ≠ 0
a b : AddCircle T
h : a.toCircle = b.toCircle
⊢ a = b
tactic: intro a b h
state_before: T : ℝ
hT : T ≠ 0
a b : AddCircle T
h : a.toCircle = b.toCircle
⊢ a = b
state_after: case H
T : ℝ
hT : T ≠ 0
b : AddCircle T
z✝ : ℝ
h : toCircle ↑z✝ = b.toCircle
⊢ ↑z✝ = b
tactic: induction a using QuotientAddGroup.induction_on'
state_before: case H
T : ℝ
hT : T ≠ 0
b : AddCircle T
z✝ : ℝ
h : toCircle ↑z✝ = b.toCircle
⊢ ↑z✝ = b
state_after: case H.H
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : toCircle ↑z✝¹ = toCircle ↑z✝
⊢ ↑z✝¹ = ↑z✝
tactic: induction b using QuotientAddGroup.induction_on'
state_before: case H.H
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : toCircle ↑z✝¹ = toCircle ↑z✝
⊢ ↑z✝¹ = ↑z✝
state_after: case H.H
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
⊢ ↑z✝¹ = ↑z✝
tactic: simp_rw [toCircle_apply_mk] at h
state_before: case H.H
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
⊢ ↑z✝¹ = ↑z✝
state_after: case H.H.intro
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ ↑z✝¹ = ↑z✝
tactic: obtain ⟨m, hm⟩ := expMapCircle_eq_expMapCircle.mp h.symm
state_before: case H.H.intro
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ ↑z✝¹ = ↑z✝
state_after: case H.H.intro
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ -z✝¹ + z✝ ∈ AddSubgroup.zmultiples T
tactic: rw [QuotientAddGroup.eq]
state_before: case H.H.intro
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ -z✝¹ + z✝ ∈ AddSubgroup.zmultiples T
state_after: case H.H.intro
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ ∃ k, ↑k * T = -z✝¹ + z✝
tactic: simp_rw [AddSubgroup.mem_zmultiples_iff, zsmul_eq_mul]
state_before: case H.H.intro
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ ∃ k, ↑k * T = -z✝¹ + z✝
state_after: case h
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ ↑m * T = -z✝¹ + z✝
tactic: use m
state_before: case h
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π / T * z✝ = 2 * π / T * z✝¹ + ↑m * (2 * π)
⊢ ↑m * T = -z✝¹ + z✝
state_after: case h
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π * z✝ = 2 * π * z✝¹ + ↑m * (2 * π) * T
⊢ ↑m * T = -z✝¹ + z✝
tactic: field_simp at hm
state_before: case h
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π * z✝ = 2 * π * z✝¹ + ↑m * (2 * π) * T
⊢ ↑m * T = -z✝¹ + z✝
state_after: case h
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π * z✝ = 2 * π * z✝¹ + ↑m * (2 * π) * T
⊢ 2 * π * (↑m * T) = 2 * π * (-z✝¹ + z✝)
tactic: rw [← mul_right_inj' Real.two_pi_pos.ne']
state_before: case h
T : ℝ
hT : T ≠ 0
z✝¹ z✝ : ℝ
h : expMapCircle (2 * π / T * z✝¹) = expMapCircle (2 * π / T * z✝)
m : ℤ
hm : 2 * π * z✝ = 2 * π * z✝¹ + ↑m * (2 * π) * T
⊢ 2 * π * (↑m * T) = 2 * π * (-z✝¹ + z✝)
state_after: no goals
tactic: linarith