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

tactic: ext p
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
⊢ s1 = s2
state_after: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
⊢ p ∈ s1 ↔ p ∈ s2

tactic: have hq1 := Set.mem_of_mem_inter_left hn.some_mem
state_before: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
⊢ p ∈ s1 ↔ p ∈ s2
state_after: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
⊢ p ∈ s1 ↔ p ∈ s2

tactic: have hq2 := Set.mem_of_mem_inter_right hn.some_mem
state_before: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
⊢ p ∈ s1 ↔ p ∈ s2
state_after: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
⊢ p ∈ s1 ↔ p ∈ s2

tactic: constructor
state_before: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
⊢ p ∈ s1 ↔ p ∈ s2
state_after: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
⊢ p ∈ s1 → p ∈ s2

case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
⊢ p ∈ s2 → p ∈ s1

tactic: intro hp
state_before: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
⊢ p ∈ s1 → p ∈ s2
state_after: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p ∈ s2

tactic: rw [← vsub_vadd p hn.some]
state_before: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p ∈ s2
state_after: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p -ᵥ hn.some +ᵥ hn.some ∈ s2

tactic: refine vadd_mem_of_mem_direction ?_ hq2
state_before: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p -ᵥ hn.some +ᵥ hn.some ∈ s2
state_after: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p -ᵥ hn.some ∈ s2.direction

tactic: rw [← hd]
state_before: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p -ᵥ hn.some ∈ s2.direction
state_after: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p -ᵥ hn.some ∈ s1.direction

tactic: exact vsub_mem_direction hp hq1
state_before: case h.mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s1
⊢ p -ᵥ hn.some ∈ s1.direction
state_after: no goals

tactic: intro hp
state_before: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
⊢ p ∈ s2 → p ∈ s1
state_after: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p ∈ s1

tactic: rw [← vsub_vadd p hn.some]
state_before: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p ∈ s1
state_after: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p -ᵥ hn.some +ᵥ hn.some ∈ s1

tactic: refine vadd_mem_of_mem_direction ?_ hq1
state_before: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p -ᵥ hn.some +ᵥ hn.some ∈ s1
state_after: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p -ᵥ hn.some ∈ s1.direction

tactic: rw [hd]
state_before: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p -ᵥ hn.some ∈ s1.direction
state_after: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p -ᵥ hn.some ∈ s2.direction

tactic: exact vsub_mem_direction hp hq2
state_before: case h.mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s1 s2 : AffineSubspace k P
hd : s1.direction = s2.direction
hn : (↑s1 ∩ ↑s2).Nonempty
p : P
hq1 : hn.some ∈ ↑s1
hq2 : hn.some ∈ ↑s2
hp : p ∈ s2
⊢ p -ᵥ hn.some ∈ s2.direction
state_after: no goals