Theorem: Module.Dual.eq_of_preReflection_mapsTo'
File: Mathlib/LinearAlgebra/Reflection.lean

tactic: set Φ' : Set (span R Φ) := range (inclusion <| Submodule.subset_span (R := R) (s := Φ))
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : Φ.Finite
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : Φ.Finite
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: rw [← finite_coe_iff] at hΦ₁
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : Φ.Finite
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: have hΦ'₁ : Φ'.Finite := finite_range (inclusion Submodule.subset_span)
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: have hΦ'₂ : span R Φ' = ⊤ := by simp [Φ']
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: let x' : span R Φ := ⟨x, hx'⟩
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'⟩
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: have hx' : x' ≠ 0 := Subtype.coe_ne_coe.1 hx
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'⟩
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: have this : ∀ {F : Dual R M}, MapsTo (preReflection x F) Φ Φ →
    MapsTo (preReflection x' ((span R Φ).subtype.dualMap F)) Φ' Φ' := by
  intro F hF ⟨y, hy⟩ hy'
  simp only [Φ', range_inclusion, SetLike.coe_sort_coe, mem_setOf_eq] at hy' ⊢
  exact hF hy'
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
this :
  ∀ {F : Dual R M},
    MapsTo (⇑(preReflection x F)) Φ Φ → MapsTo (⇑(preReflection x' ((span R Φ).subtype.dualMap F))) Φ' Φ'
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g

tactic: exact eq_of_preReflection_mapsTo hx' hΦ'₁ hΦ'₂ hf₁ (this hf₂) hg₁ (this hg₂)
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
this :
  ∀ {F : Dual R M},
    MapsTo (⇑(preReflection x F)) Φ Φ → MapsTo (⇑(preReflection x' ((span R Φ).subtype.dualMap F))) Φ' Φ'
⊢ (span R Φ).subtype.dualMap f = (span R Φ).subtype.dualMap g
state_after: no goals

tactic: simp [Φ']
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx' : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
⊢ span R Φ' = ⊤
state_after: no goals

tactic: intro F hF ⟨y, hy⟩ hy'
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
⊢ ∀ {F : Dual R M},
    MapsTo (⇑(preReflection x F)) Φ Φ → MapsTo (⇑(preReflection x' ((span R Φ).subtype.dualMap F))) Φ' Φ'
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y✝ : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
F : Dual R M
hF : MapsTo (⇑(preReflection x F)) Φ Φ
y : M
hy : y ∈ span R Φ
hy' : ⟨y, hy⟩ ∈ Φ'
⊢ (preReflection x' ((span R Φ).subtype.dualMap F)) ⟨y, hy⟩ ∈ Φ'

tactic: simp only [Φ', range_inclusion, SetLike.coe_sort_coe, mem_setOf_eq] at hy' ⊢
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y✝ : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
F : Dual R M
hF : MapsTo (⇑(preReflection x F)) Φ Φ
y : M
hy : y ∈ span R Φ
hy' : ⟨y, hy⟩ ∈ Φ'
⊢ (preReflection x' ((span R Φ).subtype.dualMap F)) ⟨y, hy⟩ ∈ Φ'
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y✝ : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
F : Dual R M
hF : MapsTo (⇑(preReflection x F)) Φ Φ
y : M
hy : y ∈ span R Φ
hy' : y ∈ Φ
⊢ ↑((preReflection x' ((span R Φ).subtype.dualMap F)) ⟨y, hy⟩) ∈ Φ

tactic: exact hF hy'
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
x✝ : M
f✝ : Dual R M
y✝ : M
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
x : M
hx : x ≠ 0
Φ : Set M
hΦ₁ : _root_.Finite ↑Φ
hx'✝ : x ∈ span R Φ
f g : Dual R M
hf₁ : f x = 2
hf₂ : MapsTo (⇑(preReflection x f)) Φ Φ
hg₁ : g x = 2
hg₂ : MapsTo (⇑(preReflection x g)) Φ Φ
Φ' : Set ↥(span R Φ) := range (inclusion ⋯)
hΦ'₁ : Φ'.Finite
hΦ'₂ : span R Φ' = ⊤
x' : ↥(span R Φ) := ⟨x, hx'✝⟩
hx' : x' ≠ 0
F : Dual R M
hF : MapsTo (⇑(preReflection x F)) Φ Φ
y : M
hy : y ∈ span R Φ
hy' : y ∈ Φ
⊢ ↑((preReflection x' ((span R Φ).subtype.dualMap F)) ⟨y, hy⟩) ∈ Φ
state_after: no goals