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 : (↑s1).Nonempty
h2 : (↑s2).Nonempty
he : ↑s1 ∩ ↑s2 = ∅
⊢ s1.direction ⊔ s2.direction < (s1 ⊔ s2).direction
state_after: 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 : (↑s2).Nonempty
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
⊢ s1.direction ⊔ s2.direction < (s1 ⊔ s2).direction

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 : (↑s2).Nonempty
he : ↑s1 ∩ ↑s2 = ∅
p1 : P
hp1 : p1 ∈ ↑s1
⊢ s1.direction ⊔ s2.direction < (s1 ⊔ s2).direction
state_after: 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
⊢ s1.direction ⊔ s2.direction < (s1 ⊔ s2).direction

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
⊢ s1.direction ⊔ s2.direction < (s1 ⊔ s2).direction
state_after: 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
⊢ s1.direction ⊔ s2.direction ≤ (s1 ⊔ s2).direction ∧ ∃ x ∈ (s1 ⊔ s2).direction, x ∉ s1.direction ⊔ s2.direction

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
⊢ s1.direction ⊔ s2.direction ≤ (s1 ⊔ s2).direction ∧ ∃ x ∈ (s1 ⊔ s2).direction, x ∉ s1.direction ⊔ s2.direction
state_after: case right
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 ∉ s1.direction ⊔ s2.direction

tactic: intro h
state_before: case right
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 ∉ s1.direction ⊔ s2.direction
state_after: case right
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 ∈ s1.direction ⊔ s2.direction
⊢ False

tactic: rw [Submodule.mem_sup] at h
state_before: case right
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 ∈ s1.direction ⊔ s2.direction
⊢ False
state_after: case right
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 ∈ s1.direction, ∃ z ∈ s2.direction, y + z = p2 -ᵥ p1
⊢ False

tactic: rcases h with ⟨v1, hv1, v2, hv2, hv1v2⟩
state_before: case right
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 ∈ s1.direction, ∃ z ∈ s2.direction, y + z = p2 -ᵥ p1
⊢ False
state_after: case right.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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 + v2 = 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 right.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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 + v2 = p2 -ᵥ p1
⊢ False
state_after: case right.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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ False

tactic: refine Set.Nonempty.ne_empty ?_ he
state_before: case right.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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ False
state_after: case right.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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ (↑s1 ∩ ↑s2).Nonempty

tactic: use v1 +ᵥ p1, vadd_mem_of_mem_direction hv1 hp1
state_before: case right.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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ (↑s1 ∩ ↑s2).Nonempty
state_after: case right
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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ v1 +ᵥ p1 ∈ ↑s2

tactic: rw [hv1v2]
state_before: case right
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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ v1 +ᵥ p1 ∈ ↑s2
state_after: case right
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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ -v2 +ᵥ p2 ∈ ↑s2

tactic: exact vadd_mem_of_mem_direction (Submodule.neg_mem _ hv2) hp2
state_before: case right
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 ∈ s1.direction
v2 : V
hv2 : v2 ∈ s2.direction
hv1v2 : v1 +ᵥ p1 = -v2 +ᵥ p2
⊢ -v2 +ᵥ p2 ∈ ↑s2
state_after: no goals