Theorem: _private.Mathlib.LinearAlgebra.RootSystem.Basic.0.RootPairing.coroot_eq_coreflection_of_root_eq'
File: Mathlib/LinearAlgebra/RootSystem/Basic.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
hk : root k = (preReflection (root i) (p.toLin.flip (coroot i))) (root j)
⊢ coroot k = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
hk : root k = (preReflection α (p.toLin.flip (coroot i))) (root j)
⊢ coroot k = (preReflection (coroot i) (p.toLin α)) (coroot j)
tactic: set α := root i
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
hk : root k = (preReflection α (p.toLin.flip (coroot i))) (root j)
⊢ coroot k = (preReflection (coroot i) (p.toLin α)) (coroot j)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
hk : root k = (preReflection α (p.toLin.flip (coroot i))) β
⊢ coroot k = (preReflection (coroot i) (p.toLin α)) (coroot j)
tactic: set β := root j
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
hk : root k = (preReflection α (p.toLin.flip (coroot i))) β
⊢ coroot k = (preReflection (coroot i) (p.toLin α)) (coroot j)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
hk : root k = (preReflection α (p.toLin.flip α')) β
⊢ coroot k = (preReflection α' (p.toLin α)) (coroot j)
tactic: set α' := coroot i
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
hk : root k = (preReflection α (p.toLin.flip α')) β
⊢ coroot k = (preReflection α' (p.toLin α)) (coroot j)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
hk : root k = (preReflection α (p.toLin.flip α')) β
β' : N := coroot j
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: set β' := coroot j
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
hk : root k = (preReflection α (p.toLin.flip α')) β
β' : N := coroot j
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: set sα := preReflection α (p.toLin.flip α')
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: set sβ := preReflection β (p.toLin.flip β')
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: let sα' := preReflection α' (p.toLin α)
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: have hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα := by
    ext
    have hpi : (p.toLin.flip (coroot i)) (root i) = 2 := by rw [LinearMap.flip_apply, hp i]
    simp [α, β, α', β', sα, sβ, sα', ← preReflection_preReflection β (p.toLin.flip β') hpi,
      preReflection_apply]
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: have hk₀ : root k ≠ 0 := fun h ↦ by simpa [h] using hp k
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
⊢ coroot k = (preReflection α' (p.toLin α)) β'
tactic: obtain ⟨l, hl⟩ := hc i (mem_range_self j)
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
⊢ coroot k = (preReflection α' (p.toLin α)) β'
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
⊢ coroot k = coroot l
tactic: rw [← hl]
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
⊢ coroot k = coroot l
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
⊢ coroot k = coroot l
tactic: have hkl : (p.toLin.flip (coroot l)) (root k) = 2 := by
    simp [hl, hk, preReflection_apply, mul_sub, mul_two, β', α, α', β, sα, hp i, hp j]
    rw [mul_comm (p.toLin (root i) (coroot j))]
    abel
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
⊢ coroot k = coroot l
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
⊢ p.toLin.flip (coroot k) = p.toLin.flip (coroot l)
tactic: suffices p.toLin.flip (coroot k) = p.toLin.flip (coroot l) from p.bijectiveRight.injective this
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
⊢ p.toLin.flip (coroot k) = p.toLin.flip (coroot l)
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
⊢ p.toLin.flip (coroot k) = p.toLin.flip (coroot l)
tactic: have _i : NoZeroSMulDivisors ℤ M := NoZeroSMulDivisors.int_of_charZero R M
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
⊢ p.toLin.flip (coroot k) = p.toLin.flip (coroot l)
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ p.toLin.flip (coroot k) = p.toLin.flip (coroot l)
tactic: have := injOn_dualMap_subtype_span_range_range (finite_range root)
    (c := p.toLin.flip ∘ coroot) hp hr
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ p.toLin.flip (coroot k) = p.toLin.flip (coroot l)
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ (span R (range ⇑root)).subtype.dualMap ((⇑p.toLin.flip ∘ ⇑coroot) k) =
    (span R (range ⇑root)).subtype.dualMap ((⇑p.toLin.flip ∘ ⇑coroot) l)
tactic: apply this (mem_range_self k) (mem_range_self l)
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ (span R (range ⇑root)).subtype.dualMap ((⇑p.toLin.flip ∘ ⇑coroot) k) =
    (span R (range ⇑root)).subtype.dualMap ((⇑p.toLin.flip ∘ ⇑coroot) l)
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ MapsTo (⇑(preReflection (root k) ((⇑p.toLin.flip ∘ ⇑coroot) l))) (range ⇑root) (range ⇑root)
tactic: refine Dual.eq_of_preReflection_mapsTo' hk₀ (finite_range root)
    (Submodule.subset_span <| mem_range_self k) (hp k) (hr k) hkl ?_
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ MapsTo (⇑(preReflection (root k) ((⇑p.toLin.flip ∘ ⇑coroot) l))) (range ⇑root) (range ⇑root)
state_after: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ MapsTo (⇑(sα ∘ₗ sβ ∘ₗ sα)) (range ⇑root) (range ⇑root)
tactic: rw [comp_apply, hl, hk, hij]
state_before: case intro
ι : Type u_1
R : Type u_2
M : Type u_3
N : Type u_4
inst✝⁷ : CommRing R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R M
inst✝⁴ : AddCommGroup N
inst✝³ : Module R N
inst✝² : _root_.Finite ι
P : RootPairing ι R M N
i✝ j✝ : ι
inst✝¹ : CharZero R
inst✝ : NoZeroSMulDivisors R M
p : PerfectPairing R M N
root : ι ↪ M
coroot : ι ↪ N
hp : ∀ (i : ι), (p.toLin (root i)) (coroot i) = 2
hr : ∀ (i : ι), MapsTo (⇑(preReflection (root i) (p.toLin.flip (coroot i)))) (range ⇑root) (range ⇑root)
hc : ∀ (i : ι), MapsTo (⇑(preReflection (coroot i) (p.toLin (root i)))) (range ⇑coroot) (range ⇑coroot)
i j k : ι
α : M := root i
β : M := root j
α' : N := coroot i
β' : N := coroot j
sα : End R M := preReflection α (p.toLin.flip α')
hk : root k = sα β
sβ : End R M := preReflection β (p.toLin.flip β')
sα' : End R N := preReflection α' (p.toLin α)
hij : preReflection (sα β) (p.toLin.flip (sα' β')) = sα ∘ₗ sβ ∘ₗ sα
hk₀ : root k ≠ 0
l : ι
hl : coroot l = (preReflection (coroot i) (p.toLin (root i))) (coroot j)
hkl : (p.toLin.flip (coroot l)) (root k) = 2
_i : NoZeroSMulDivisors ℤ M
this : InjOn (⇑(span R (range ⇑root)).subtype.dualMap) (range (⇑p.toLin.flip ∘ ⇑coroot))
⊢ MapsTo (⇑(sα ∘ₗ sβ ∘ₗ sα)) (range ⇑root) (range ⇑root)
state_after: no goals
tactic: exact (hr i).comp <| (hr j).comp (hr i)