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

tactic: cases' inter_nonempty_of_nonempty_of_sup_direction_eq_top h1 h2 hd.sup_eq_top with p hp
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
hd : IsCompl (direction s1) (direction s2)
⊢ ∃ p, ↑s1 ∩ ↑s2 = {p}

tactic: use p
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
h1 : Set.Nonempty ↑s1
h2 : Set.Nonempty ↑s2
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
⊢ ∃ p, ↑s1 ∩ ↑s2 = {p}

tactic: ext q
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
h1 : Set.Nonempty ↑s1
h2 : Set.Nonempty ↑s2
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
⊢ ↑s1 ∩ ↑s2 = {p}

tactic: rw [Set.mem_singleton_iff]
state_before: case intro.h
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
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
q : P
⊢ q ∈ ↑s1 ∩ ↑s2 ↔ q ∈ {p}

tactic: constructor
state_before: case intro.h
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
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
q : P
⊢ q ∈ ↑s1 ∩ ↑s2 ↔ q = p

tactic: rintro ⟨hq1, hq2⟩
state_before: case intro.h.mp
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
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
q : P
⊢ q ∈ ↑s1 ∩ ↑s2 → q = p

tactic: have hqp : q -ᵥ p ∈ s1.direction ⊓ s2.direction :=
  ⟨vsub_mem_direction hq1 hp.1, vsub_mem_direction hq2 hp.2⟩
state_before: case intro.h.mp.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
h1 : Set.Nonempty ↑s1
h2 : Set.Nonempty ↑s2
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
q : P
hq1 : q ∈ ↑s1
hq2 : q ∈ ↑s2
⊢ q = p

tactic: rwa [hd.inf_eq_bot, Submodule.mem_bot, vsub_eq_zero_iff_eq] at hqp
state_before: case intro.h.mp.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
h1 : Set.Nonempty ↑s1
h2 : Set.Nonempty ↑s2
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
q : P
hq1 : q ∈ ↑s1
hq2 : q ∈ ↑s2
hqp : q -ᵥ p ∈ direction s1 ⊓ direction s2
⊢ q = p

tactic: exact fun h => h.symm ▸ hp
state_before: case intro.h.mpr
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
hd : IsCompl (direction s1) (direction s2)
p : P
hp : p ∈ ↑s1 ∩ ↑s2
q : P
⊢ q = p → q ∈ ↑s1 ∩ ↑s2