Theorem: UpperHalfPlane.denom_ne_zero
File: Mathlib/Analysis/Complex/UpperHalfPlane/Basic.lean

tactic: intro H
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
⊢ denom g z ≠ 0
state_after: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
⊢ False

tactic: have DET := (mem_glpos _).1 g.prop
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
⊢ False
state_after: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < ↑(GeneralLinearGroup.det ↑g)
⊢ False

tactic: have hz := z.prop
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < ↑(GeneralLinearGroup.det ↑g)
⊢ False
state_after: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < ↑(GeneralLinearGroup.det ↑g)
hz : 0 < (↑z).im
⊢ False

tactic: simp only [GeneralLinearGroup.val_det_apply] at DET
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < ↑(GeneralLinearGroup.det ↑g)
hz : 0 < (↑z).im
⊢ False
state_after: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
⊢ False

tactic: have H1 : (↑ₘg 1 0 : ℝ) = 0 ∨ z.im = 0 := by simpa [num, denom] using congr_arg Complex.im H
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
⊢ False
state_after: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0 ∨ z.im = 0
⊢ False

tactic: cases' H1 with H1
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0 ∨ z.im = 0
⊢ False
state_after: case inl
g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0
⊢ False

case inr
g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
h✝ : z.im = 0
⊢ False

tactic: simpa [num, denom] using congr_arg Complex.im H
state_before: g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
⊢ ↑↑g 1 0 = 0 ∨ z.im = 0
state_after: no goals

tactic: simp only [H1, Complex.ofReal_zero, denom, zero_mul, zero_add,
  Complex.ofReal_eq_zero] at H
state_before: case inl
g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0
⊢ False
state_after: case inl
g : ↥GL(2, ℝ)⁺
z : ℍ
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0
H : ↑↑g 1 1 = 0
⊢ False

tactic: rw [Matrix.det_fin_two (↑ₘg : Matrix (Fin 2) (Fin 2) ℝ)] at DET
state_before: case inl
g : ↥GL(2, ℝ)⁺
z : ℍ
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0
H : ↑↑g 1 1 = 0
⊢ False
state_after: case inl
g : ↥GL(2, ℝ)⁺
z : ℍ
DET : 0 < ↑↑g 0 0 * ↑↑g 1 1 - ↑↑g 0 1 * ↑↑g 1 0
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0
H : ↑↑g 1 1 = 0
⊢ False

tactic: simp only [H, H1, mul_zero, sub_zero, lt_self_iff_false] at DET
state_before: case inl
g : ↥GL(2, ℝ)⁺
z : ℍ
DET : 0 < ↑↑g 0 0 * ↑↑g 1 1 - ↑↑g 0 1 * ↑↑g 1 0
hz : 0 < (↑z).im
H1 : ↑↑g 1 0 = 0
H : ↑↑g 1 1 = 0
⊢ False
state_after: no goals

tactic: change z.im > 0 at hz
state_before: case inr
g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
hz : 0 < (↑z).im
h✝ : z.im = 0
⊢ False
state_after: case inr
g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
h✝ : z.im = 0
hz : z.im > 0
⊢ False

tactic: linarith
state_before: case inr
g : ↥GL(2, ℝ)⁺
z : ℍ
H : denom g z = 0
DET : 0 < (↑↑g).det
h✝ : z.im = 0
hz : z.im > 0
⊢ False
state_after: no goals