Theorem: EuclideanGeometry.angle_eq_zero_of_angle_eq_pi_left
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/Affine.lean

tactic: unfold angle at h
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : ∠ p1 p2 p3 = π
⊢ ∠ p2 p1 p3 = 0
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) = π
⊢ ∠ p2 p1 p3 = 0

tactic: rw [angle_eq_pi_iff] at h
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : InnerProductGeometry.angle (p1 -ᵥ p2) (p3 -ᵥ p2) = π
⊢ ∠ p2 p1 p3 = 0
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : p1 -ᵥ p2 ≠ 0 ∧ ∃ r < 0, p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ ∠ p2 p1 p3 = 0

tactic: rcases h with ⟨hp1p2, ⟨r, ⟨hr, hpr⟩⟩⟩
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
h : p1 -ᵥ p2 ≠ 0 ∧ ∃ r < 0, p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ ∠ p2 p1 p3 = 0
state_after: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p1 -ᵥ p2 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ ∠ p2 p1 p3 = 0

tactic: unfold angle
state_before: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p1 -ᵥ p2 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ ∠ p2 p1 p3 = 0
state_after: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p1 -ᵥ p2 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ InnerProductGeometry.angle (p2 -ᵥ p1) (p3 -ᵥ p1) = 0

tactic: rw [angle_eq_zero_iff]
state_before: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p1 -ᵥ p2 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ InnerProductGeometry.angle (p2 -ᵥ p1) (p3 -ᵥ p1) = 0
state_after: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p1 -ᵥ p2 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p2 -ᵥ p1 ≠ 0 ∧ ∃ r, 0 < r ∧ p3 -ᵥ p1 = r • (p2 -ᵥ p1)

tactic: rw [← neg_vsub_eq_vsub_rev, neg_ne_zero] at hp1p2
state_before: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p1 -ᵥ p2 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p2 -ᵥ p1 ≠ 0 ∧ ∃ r, 0 < r ∧ p3 -ᵥ p1 = r • (p2 -ᵥ p1)
state_after: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p2 -ᵥ p1 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p2 -ᵥ p1 ≠ 0 ∧ ∃ r, 0 < r ∧ p3 -ᵥ p1 = r • (p2 -ᵥ p1)

tactic: use hp1p2, -r + 1, add_pos (neg_pos_of_neg hr) zero_lt_one
state_before: case intro.intro.intro
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p2 -ᵥ p1 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p2 -ᵥ p1 ≠ 0 ∧ ∃ r, 0 < r ∧ p3 -ᵥ p1 = r • (p2 -ᵥ p1)
state_after: case right
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p2 -ᵥ p1 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p3 -ᵥ p1 = (-r + 1) • (p2 -ᵥ p1)

tactic: rw [add_smul, ← neg_vsub_eq_vsub_rev p1 p2, smul_neg]
state_before: case right
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p2 -ᵥ p1 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p3 -ᵥ p1 = (-r + 1) • (p2 -ᵥ p1)
state_after: case right
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p2 -ᵥ p1 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p3 -ᵥ p1 = -(-r • (p1 -ᵥ p2)) + 1 • -(p1 -ᵥ p2)

tactic: simp [← hpr]
state_before: case right
V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p p₀ p₁ p₂ p1 p2 p3 : P
hp1p2 : p2 -ᵥ p1 ≠ 0
r : ℝ
hr : r < 0
hpr : p3 -ᵥ p2 = r • (p1 -ᵥ p2)
⊢ p3 -ᵥ p1 = -(-r • (p1 -ᵥ p2)) + 1 • -(p1 -ᵥ p2)
state_after: no goals