Theorem: AffineSubspace.sup_direction_lt_of_nonempty_of_inter_empty
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: cases' h1 with p1 hp1
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
h1 : Set.Nonempty ↑s1
h2 : Set.Nonempty ↑s2
he : ↑s1 ∩ ↑s2 = ∅
⊢ direction s1 ⊔ direction s2 < direction (s1 ⊔ s2)

tactic: cases' h2 with p2 hp2
state_before: case intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
h2 : Set.Nonempty ↑s2
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
⊢ direction s1 ⊔ direction s2 < direction (s1 ⊔ s2)

tactic: rw [SetLike.lt_iff_le_and_exists]
state_before: case intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
⊢ direction s1 ⊔ direction s2 < direction (s1 ⊔ s2)

tactic: use sup_direction_le s1 s2, p2 -ᵥ p1,
  vsub_mem_direction ((le_sup_right : s2 ≤ s1 ⊔ s2) hp2) ((le_sup_left : s1 ≤ s1 ⊔ s2) hp1)
state_before: case intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
⊢ direction s1 ⊔ direction s2 ≤ direction (s1 ⊔ s2) ∧ ∃ x, x ∈ direction (s1 ⊔ s2) ∧ ¬x ∈ direction s1 ⊔ direction s2

tactic: intro h
state_before: case intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
⊢ ¬p2 -ᵥ p1 ∈ direction s1 ⊔ direction s2

tactic: rw [Submodule.mem_sup] at h
state_before: case intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
h : p2 -ᵥ p1 ∈ direction s1 ⊔ direction s2
⊢ False

tactic: rcases h with ⟨v1, hv1, v2, hv2, hv1v2⟩
state_before: case intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
h : ∃ y, y ∈ direction s1 ∧ ∃ z, z ∈ direction s2 ∧ y + z = p2 -ᵥ p1
⊢ False

tactic: rw [← sub_eq_zero, sub_eq_add_neg, neg_vsub_eq_vsub_rev, add_comm v1, add_assoc, ←
  vadd_vsub_assoc, ← neg_neg v2, add_comm, ← sub_eq_add_neg, ← vsub_vadd_eq_vsub_sub,
  vsub_eq_zero_iff_eq] at hv1v2
state_before: case intro.intro.intro.intro.intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
v1 : V
hv1 : v1 ∈ direction s1
v2 : V
hv2 : v2 ∈ direction s2
hv1v2 : v1 + v2 = p2 -ᵥ p1
⊢ False

tactic: refine' Set.Nonempty.ne_empty _ he
state_before: case intro.intro.intro.intro.intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
v1 : V
hv1 : v1 ∈ direction s1
v2 : V
hv2 : v2 ∈ direction s2
hv1v2✝ : v1 + v2 = p2 -ᵥ p1
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ False

tactic: use v1 +ᵥ p1, vadd_mem_of_mem_direction hv1 hp1
state_before: case intro.intro.intro.intro.intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
v1 : V
hv1 : v1 ∈ direction s1
v2 : V
hv2 : v2 ∈ direction s2
hv1v2✝ : v1 + v2 = p2 -ᵥ p1
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ Set.Nonempty (↑s1 ∩ ↑s2)

tactic: rw [hv1v2]
state_before: case intro.intro.intro.intro.intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
v1 : V
hv1 : v1 ∈ direction s1
v2 : V
hv2 : v2 ∈ direction s2
hv1v2✝ : v1 + v2 = p2 -ᵥ p1
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ v1 +ᵥ p1 ∈ ↑s2

tactic: exact vadd_mem_of_mem_direction (Submodule.neg_mem _ hv2) hp2
state_before: case intro.intro.intro.intro.intro.intro
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s1 s2 : AffineSubspace k P
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
p2 : P
hp2 : p2 ∈ ↑s2
v1 : V
hv1 : v1 ∈ direction s1
v2 : V
hv2 : v2 ∈ direction s2
hv1v2✝ : v1 + v2 = p2 -ᵥ p1
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ -v2 +ᵥ p2 ∈ ↑s2