Theorem: Orientation.inner_eq_zero_iff_eq_zero_or_eq_smul_rotation_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: rw [← o.eq_zero_or_oangle_eq_iff_inner_eq_zero]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ ⟪x, y⟫_ℝ = 0 ↔ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2) ↔ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y

tactic: refine ⟨fun h => ?_, fun h => ?_⟩
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2) ↔ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: case refine_1
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y

case refine_2
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2)

tactic: rcases h with (rfl | rfl | h | h)
state_before: case refine_1
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: case refine_1.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
y : V
⊢ 0 = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) 0 = y

case refine_1.inr.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = 0

case refine_1.inr.inr.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y

case refine_1.inr.inr.inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y

tactic: exact Or.inl rfl
state_before: case refine_1.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
y : V
⊢ 0 = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) 0 = y
state_after: no goals

tactic: exact Or.inr ⟨0, zero_smul _ _⟩
state_before: case refine_1.inr.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = 0
state_after: no goals

tactic: obtain ⟨r, _, rfl⟩ :=
  (o.oangle_eq_iff_eq_pos_smul_rotation_of_ne_zero (o.left_ne_zero_of_oangle_eq_pi_div_two h)
    (o.right_ne_zero_of_oangle_eq_pi_div_two h) _).1 h
state_before: case refine_1.inr.inr.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: case refine_1.inr.inr.inl.intro.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
left✝ : 0 < r
h : o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2)
⊢ x = 0 ∨ ∃ r_1, r_1 • (o.rotation ↑(π / 2)) x = r • (o.rotation ↑(π / 2)) x

tactic: exact Or.inr ⟨r, rfl⟩
state_before: case refine_1.inr.inr.inl.intro.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
left✝ : 0 < r
h : o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2)
⊢ x = 0 ∨ ∃ r_1, r_1 • (o.rotation ↑(π / 2)) x = r • (o.rotation ↑(π / 2)) x
state_after: no goals

tactic: obtain ⟨r, _, rfl⟩ :=
  (o.oangle_eq_iff_eq_pos_smul_rotation_of_ne_zero
    (o.left_ne_zero_of_oangle_eq_neg_pi_div_two h)
    (o.right_ne_zero_of_oangle_eq_neg_pi_div_two h) _).1 h
state_before: case refine_1.inr.inr.inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
state_after: case refine_1.inr.inr.inr.intro.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
left✝ : 0 < r
h : o.oangle x (r • (o.rotation ↑(-π / 2)) x) = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r_1, r_1 • (o.rotation ↑(π / 2)) x = r • (o.rotation ↑(-π / 2)) x

tactic: refine Or.inr ⟨-r, ?_⟩
state_before: case refine_1.inr.inr.inr.intro.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
left✝ : 0 < r
h : o.oangle x (r • (o.rotation ↑(-π / 2)) x) = ↑(-π / 2)
⊢ x = 0 ∨ ∃ r_1, r_1 • (o.rotation ↑(π / 2)) x = r • (o.rotation ↑(-π / 2)) x
state_after: case refine_1.inr.inr.inr.intro.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
left✝ : 0 < r
h : o.oangle x (r • (o.rotation ↑(-π / 2)) x) = ↑(-π / 2)
⊢ -r • (o.rotation ↑(π / 2)) x = r • (o.rotation ↑(-π / 2)) x

tactic: rw [neg_smul, ← smul_neg, o.neg_rotation_pi_div_two]
state_before: case refine_1.inr.inr.inr.intro.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
left✝ : 0 < r
h : o.oangle x (r • (o.rotation ↑(-π / 2)) x) = ↑(-π / 2)
⊢ -r • (o.rotation ↑(π / 2)) x = r • (o.rotation ↑(-π / 2)) x
state_after: no goals

tactic: rcases h with (rfl | ⟨r, rfl⟩)
state_before: case refine_2
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : x = 0 ∨ ∃ r, r • (o.rotation ↑(π / 2)) x = y
⊢ x = 0 ∨ y = 0 ∨ o.oangle x y = ↑(π / 2) ∨ o.oangle x y = ↑(-π / 2)
state_after: case refine_2.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
y : V
⊢ 0 = 0 ∨ y = 0 ∨ o.oangle 0 y = ↑(π / 2) ∨ o.oangle 0 y = ↑(-π / 2)

case refine_2.inr.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

tactic: exact Or.inl rfl
state_before: case refine_2.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
y : V
⊢ 0 = 0 ∨ y = 0 ∨ o.oangle 0 y = ↑(π / 2) ∨ o.oangle 0 y = ↑(-π / 2)
state_after: no goals

tactic: by_cases hx : x = 0
state_before: case refine_2.inr.intro
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: case pos
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : x = 0
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

case neg
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

tactic: rcases lt_trichotomy r 0 with (hr | rfl | hr)
state_before: case neg
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: case neg.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : r < 0
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

case neg.inr.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
hx : ¬x = 0
⊢ x = 0 ∨
    0 • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (0 • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (0 • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

case neg.inr.inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : 0 < r
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

tactic: exact Or.inl hx
state_before: case pos
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : x = 0
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: no goals

tactic: refine Or.inr (Or.inr (Or.inr ?_))
state_before: case neg.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : r < 0
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: case neg.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : r < 0
⊢ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)

tactic: rw [o.oangle_smul_right_of_neg _ _ hr, o.neg_rotation_pi_div_two,
  o.oangle_rotation_self_right hx]
state_before: case neg.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : r < 0
⊢ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: no goals

tactic: exact Or.inr (Or.inl (zero_smul _ _))
state_before: case neg.inr.inl
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
hx : ¬x = 0
⊢ x = 0 ∨
    0 • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (0 • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (0 • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: no goals

tactic: refine Or.inr (Or.inr (Or.inl ?_))
state_before: case neg.inr.inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : 0 < r
⊢ x = 0 ∨
    r • (o.rotation ↑(π / 2)) x = 0 ∨
      o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2) ∨ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(-π / 2)
state_after: case neg.inr.inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : 0 < r
⊢ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2)

tactic: rw [o.oangle_smul_right_of_pos _ _ hr, o.oangle_rotation_self_right hx]
state_before: case neg.inr.inr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x : V
r : ℝ
hx : ¬x = 0
hr : 0 < r
⊢ o.oangle x (r • (o.rotation ↑(π / 2)) x) = ↑(π / 2)
state_after: no goals