Theorem: RootPairing.ext
File: Mathlib/LinearAlgebra/RootSystem/Basic.lean

tactic: have hp (hc' : P₁.coroot = P₂.coroot) : P₁.reflection_perm = P₂.reflection_perm := by
  ext i j
  refine P₁.root.injective ?_
  conv_rhs => rw [hr]
  rw [root_reflection_perm, root_reflection_perm]
  simp only [hr, he, hc', reflection_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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
⊢ P₁ = P₂
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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
⊢ P₁ = P₂

tactic: suffices P₁.coroot = P₂.coroot by
  cases' P₁ with p₁; cases' P₂ with p₂; cases p₁; cases p₂; congr; exact hp this
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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
⊢ P₁ = P₂
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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
⊢ P₁.coroot = P₂.coroot

tactic: have := NoZeroSMulDivisors.int_of_charZero R M
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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
⊢ P₁.coroot = P₂.coroot
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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
⊢ P₁.coroot = P₂.coroot

tactic: ext 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
⊢ P₁.coroot = P₂.coroot
state_after: case h
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ P₁.coroot i = P₂.coroot i

tactic: apply P₁.injOn_dualMap_subtype_span_root_coroot (mem_range_self i) (hc ▸ mem_range_self i)
state_before: case h
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ P₁.coroot i = P₂.coroot i
state_after: case h
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ ((span R (range ⇑P₁.root)).subtype.dualMap ∘ₗ P₁.toLin.flip) (P₁.coroot i) =
    ((span R (range ⇑P₁.root)).subtype.dualMap ∘ₗ P₁.toLin.flip) (P₂.coroot i)

tactic: simp only [LinearMap.coe_comp, LinearEquiv.coe_coe, comp_apply]
state_before: case h
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ ((span R (range ⇑P₁.root)).subtype.dualMap ∘ₗ P₁.toLin.flip) (P₁.coroot i) =
    ((span R (range ⇑P₁.root)).subtype.dualMap ∘ₗ P₁.toLin.flip) (P₂.coroot i)
state_after: case h
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ (span R (range ⇑P₁.root)).subtype.dualMap (P₁.toLin.flip (P₁.coroot i)) =
    (span R (range ⇑P₁.root)).subtype.dualMap (P₁.toLin.flip (P₂.coroot i))

tactic: apply Dual.eq_of_preReflection_mapsTo' (P₁.ne_zero i) (finite_range P₁.root)
state_before: case h
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ (span R (range ⇑P₁.root)).subtype.dualMap (P₁.toLin.flip (P₁.coroot i)) =
    (span R (range ⇑P₁.root)).subtype.dualMap (P₁.toLin.flip (P₂.coroot i))
state_after: case h.hx'
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ P₁.root i ∈ span R (range ⇑P₁.root)

case h.hf₁
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ (P₁.toLin.flip (P₁.coroot i)) (P₁.root i) = 2

case h.hf₂
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ MapsTo (⇑(preReflection (P₁.root i) (P₁.toLin.flip (P₁.coroot i)))) (range ⇑P₁.root) (range ⇑P₁.root)

case h.hg₁
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ (P₁.toLin.flip (P₂.coroot i)) (P₁.root i) = 2

case h.hg₂
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ MapsTo (⇑(preReflection (P₁.root i) (P₁.toLin.flip (P₂.coroot i)))) (range ⇑P₁.root) (range ⇑P₁.root)

tactic: ext i 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
⊢ P₁.reflection_perm = P₂.reflection_perm
state_after: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ (P₁.reflection_perm i) j = (P₂.reflection_perm i) j

tactic: refine P₁.root.injective ?_
state_before: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ (P₁.reflection_perm i) j = (P₂.reflection_perm i) j
state_after: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ P₁.root ((P₁.reflection_perm i) j) = P₁.root ((P₂.reflection_perm i) j)

tactic: conv_rhs => rw [hr]
state_before: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ P₁.root ((P₁.reflection_perm i) j) = P₁.root ((P₂.reflection_perm i) j)
state_after: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ P₁.root ((P₁.reflection_perm i) j) = P₂.root ((P₂.reflection_perm i) j)

tactic: rw [root_reflection_perm, root_reflection_perm]
state_before: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ P₁.root ((P₁.reflection_perm i) j) = P₂.root ((P₂.reflection_perm i) j)
state_after: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ (P₁.reflection i) (P₁.root j) = (P₂.reflection i) (P₂.root j)

tactic: simp only [hr, he, hc', reflection_apply]
state_before: case h.H
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hc' : P₁.coroot = P₂.coroot
i j : ι
⊢ (P₁.reflection i) (P₁.root j) = (P₂.reflection i) (P₂.root j)
state_after: no goals

tactic: cases' P₁ with p₁
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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : P₁.coroot = P₂.coroot
⊢ P₁ = P₂
state_after: case mk
ι : 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₂ : RootPairing ι R M N
p₁ : PerfectPairing R M N
root✝ : ι ↪ M
coroot✝ : ι ↪ N
root_coroot_two✝ : ∀ (i : ι), (p₁.toLin (root✝ i)) (coroot✝ i) = 2
reflection_perm✝ : ι → ι ≃ ι
reflection_perm_root✝ :
  ∀ (i j : ι), root✝ j - (p₁.toLin (root✝ j)) (coroot✝ i) • root✝ i = root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι), coroot✝ j - (p₁.toLin (root✝ i)) (coroot✝ j) • coroot✝ i = coroot✝ ((reflection_perm✝ i) j)
he :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.toLin =
    P₂.toLin
hr :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.root =
    P₂.root
hc :
  range
      ⇑{ toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
            reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
            reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    range ⇑P₂.coroot
hp :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
      P₂.coroot →
    { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm =
      P₂.reflection_perm
this :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    P₂.coroot
⊢ { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
      reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
      reflection_perm_coroot := reflection_perm_coroot✝ } =
    P₂

tactic: cases' P₂ with p₂
state_before: case mk
ι : 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₂ : RootPairing ι R M N
p₁ : PerfectPairing R M N
root✝ : ι ↪ M
coroot✝ : ι ↪ N
root_coroot_two✝ : ∀ (i : ι), (p₁.toLin (root✝ i)) (coroot✝ i) = 2
reflection_perm✝ : ι → ι ≃ ι
reflection_perm_root✝ :
  ∀ (i j : ι), root✝ j - (p₁.toLin (root✝ j)) (coroot✝ i) • root✝ i = root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι), coroot✝ j - (p₁.toLin (root✝ i)) (coroot✝ j) • coroot✝ i = coroot✝ ((reflection_perm✝ i) j)
he :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.toLin =
    P₂.toLin
hr :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.root =
    P₂.root
hc :
  range
      ⇑{ toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
            reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
            reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    range ⇑P₂.coroot
hp :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
      P₂.coroot →
    { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm =
      P₂.reflection_perm
this :
  { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    P₂.coroot
⊢ { toPerfectPairing := p₁, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
      reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
      reflection_perm_coroot := reflection_perm_coroot✝ } =
    P₂
state_after: case mk.mk
ι : 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
root_coroot_two✝¹ : ∀ (i : ι), (p₁.toLin (root✝¹ i)) (coroot✝¹ i) = 2
reflection_perm✝¹ : ι → ι ≃ ι
reflection_perm_root✝¹ :
  ∀ (i j : ι), root✝¹ j - (p₁.toLin (root✝¹ j)) (coroot✝¹ i) • root✝¹ i = root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι), coroot✝¹ j - (p₁.toLin (root✝¹ i)) (coroot✝¹ j) • coroot✝¹ i = coroot✝¹ ((reflection_perm✝¹ i) j)
p₂ : PerfectPairing R M N
root✝ : ι ↪ M
coroot✝ : ι ↪ N
root_coroot_two✝ : ∀ (i : ι), (p₂.toLin (root✝ i)) (coroot✝ i) = 2
reflection_perm✝ : ι → ι ≃ ι
reflection_perm_root✝ :
  ∀ (i j : ι), root✝ j - (p₂.toLin (root✝ j)) (coroot✝ i) • root✝ i = root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι), coroot✝ j - (p₂.toLin (root✝ i)) (coroot✝ j) • coroot✝ i = coroot✝ ((reflection_perm✝ i) j)
he :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.toLin
hr :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.root =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.root
hc :
  range
      ⇑{ toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
            reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    range
      ⇑{ toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
            reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
            reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
hp :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.coroot →
    { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm
this :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
⊢ { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
      reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
      reflection_perm_coroot := reflection_perm_coroot✝¹ } =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
      reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
      reflection_perm_coroot := reflection_perm_coroot✝ }

tactic: cases p₁
state_before: case mk.mk
ι : 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
root_coroot_two✝¹ : ∀ (i : ι), (p₁.toLin (root✝¹ i)) (coroot✝¹ i) = 2
reflection_perm✝¹ : ι → ι ≃ ι
reflection_perm_root✝¹ :
  ∀ (i j : ι), root✝¹ j - (p₁.toLin (root✝¹ j)) (coroot✝¹ i) • root✝¹ i = root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι), coroot✝¹ j - (p₁.toLin (root✝¹ i)) (coroot✝¹ j) • coroot✝¹ i = coroot✝¹ ((reflection_perm✝¹ i) j)
p₂ : PerfectPairing R M N
root✝ : ι ↪ M
coroot✝ : ι ↪ N
root_coroot_two✝ : ∀ (i : ι), (p₂.toLin (root✝ i)) (coroot✝ i) = 2
reflection_perm✝ : ι → ι ≃ ι
reflection_perm_root✝ :
  ∀ (i j : ι), root✝ j - (p₂.toLin (root✝ j)) (coroot✝ i) • root✝ i = root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι), coroot✝ j - (p₂.toLin (root✝ i)) (coroot✝ j) • coroot✝ i = coroot✝ ((reflection_perm✝ i) j)
he :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.toLin
hr :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.root =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.root
hc :
  range
      ⇑{ toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
            reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    range
      ⇑{ toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
            reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
            reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
hp :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.coroot →
    { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm
this :
  { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
        reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
⊢ { toPerfectPairing := p₁, root := root✝¹, coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹,
      reflection_perm := reflection_perm✝¹, reflection_perm_root := reflection_perm_root✝¹,
      reflection_perm_coroot := reflection_perm_coroot✝¹ } =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝,
      reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝,
      reflection_perm_coroot := reflection_perm_coroot✝ }
state_after: case mk.mk.mk
ι : 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
root✝¹ : ι ↪ M
coroot✝¹ : ι ↪ N
reflection_perm✝¹ : ι → ι ≃ ι
p₂ : PerfectPairing R M N
root✝ : ι ↪ M
coroot✝ : ι ↪ N
root_coroot_two✝¹ : ∀ (i : ι), (p₂.toLin (root✝ i)) (coroot✝ i) = 2
reflection_perm✝ : ι → ι ≃ ι
reflection_perm_root✝¹ :
  ∀ (i j : ι), root✝ j - (p₂.toLin (root✝ j)) (coroot✝ i) • root✝ i = root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι), coroot✝ j - (p₂.toLin (root✝ i)) (coroot✝ j) • coroot✝ i = coroot✝ ((reflection_perm✝ i) j)
toLin✝ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝ : Bijective ⇑toLin✝
bijectiveRight✝ : Bijective ⇑toLin✝.flip
root_coroot_two✝ :
  ∀ (i : ι),
    ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝¹ i))
        (coroot✝¹ i) =
      2
reflection_perm_root✝ :
  ∀ (i j : ι),
    root✝¹ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝¹ j))
            (coroot✝¹ i) •
          root✝¹ i =
      root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι),
    coroot✝¹ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝¹ i))
            (coroot✝¹ j) •
          coroot✝¹ i =
      coroot✝¹ ((reflection_perm✝¹ i) j)
he :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.toLin =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin
hr :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.root =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.root
hc :
  range
      ⇑{ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
            coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
            reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    range
      ⇑{ toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
            reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot
hp :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot →
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm
this :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot
⊢ { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
      coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
      reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ } =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
      reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
      reflection_perm_coroot := reflection_perm_coroot✝¹ }

tactic: cases p₂
state_before: case mk.mk.mk
ι : 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
root✝¹ : ι ↪ M
coroot✝¹ : ι ↪ N
reflection_perm✝¹ : ι → ι ≃ ι
p₂ : PerfectPairing R M N
root✝ : ι ↪ M
coroot✝ : ι ↪ N
root_coroot_two✝¹ : ∀ (i : ι), (p₂.toLin (root✝ i)) (coroot✝ i) = 2
reflection_perm✝ : ι → ι ≃ ι
reflection_perm_root✝¹ :
  ∀ (i j : ι), root✝ j - (p₂.toLin (root✝ j)) (coroot✝ i) • root✝ i = root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι), coroot✝ j - (p₂.toLin (root✝ i)) (coroot✝ j) • coroot✝ i = coroot✝ ((reflection_perm✝ i) j)
toLin✝ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝ : Bijective ⇑toLin✝
bijectiveRight✝ : Bijective ⇑toLin✝.flip
root_coroot_two✝ :
  ∀ (i : ι),
    ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝¹ i))
        (coroot✝¹ i) =
      2
reflection_perm_root✝ :
  ∀ (i j : ι),
    root✝¹ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝¹ j))
            (coroot✝¹ i) •
          root✝¹ i =
      root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι),
    coroot✝¹ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝¹ i))
            (coroot✝¹ j) •
          coroot✝¹ i =
      coroot✝¹ ((reflection_perm✝¹ i) j)
he :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.toLin =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin
hr :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.root =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.root
hc :
  range
      ⇑{ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
            coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
            reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    range
      ⇑{ toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
            reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot
hp :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot →
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm =
      { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
          reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm
this :
  { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
        reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
        reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot
⊢ { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝¹,
      coroot := coroot✝¹, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝¹,
      reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ } =
    { toPerfectPairing := p₂, root := root✝, coroot := coroot✝, root_coroot_two := root_coroot_two✝¹,
      reflection_perm := reflection_perm✝, reflection_perm_root := reflection_perm_root✝¹,
      reflection_perm_coroot := reflection_perm_coroot✝¹ }
state_after: case mk.mk.mk.mk
ι : 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
root✝¹ : ι ↪ M
coroot✝¹ : ι ↪ N
reflection_perm✝¹ : ι → ι ≃ ι
root✝ : ι ↪ M
coroot✝ : ι ↪ N
reflection_perm✝ : ι → ι ≃ ι
toLin✝¹ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝¹ : Bijective ⇑toLin✝¹
bijectiveRight✝¹ : Bijective ⇑toLin✝¹.flip
root_coroot_two✝¹ :
  ∀ (i : ι),
    ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
        (coroot✝¹ i) =
      2
reflection_perm_root✝¹ :
  ∀ (i j : ι),
    root✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ j))
            (coroot✝¹ i) •
          root✝¹ i =
      root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι),
    coroot✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
            (coroot✝¹ j) •
          coroot✝¹ i =
      coroot✝¹ ((reflection_perm✝¹ i) j)
toLin✝ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝ : Bijective ⇑toLin✝
bijectiveRight✝ : Bijective ⇑toLin✝.flip
root_coroot_two✝ :
  ∀ (i : ι),
    ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
        (coroot✝ i) =
      2
reflection_perm_root✝ :
  ∀ (i j : ι),
    root✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ j))
            (coroot✝ i) •
          root✝ i =
      root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι),
    coroot✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
            (coroot✝ j) •
          coroot✝ i =
      coroot✝ ((reflection_perm✝ i) j)
he :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.toLin
hr :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.root =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.root
hc :
  range
      ⇑{ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
            coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
            reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    range
      ⇑{ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
            coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
            reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
hp :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot →
    { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm
this :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
⊢ { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
      coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
      reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ } =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
      coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
      reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }

tactic: congr
state_before: case mk.mk.mk.mk
ι : 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
root✝¹ : ι ↪ M
coroot✝¹ : ι ↪ N
reflection_perm✝¹ : ι → ι ≃ ι
root✝ : ι ↪ M
coroot✝ : ι ↪ N
reflection_perm✝ : ι → ι ≃ ι
toLin✝¹ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝¹ : Bijective ⇑toLin✝¹
bijectiveRight✝¹ : Bijective ⇑toLin✝¹.flip
root_coroot_two✝¹ :
  ∀ (i : ι),
    ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
        (coroot✝¹ i) =
      2
reflection_perm_root✝¹ :
  ∀ (i j : ι),
    root✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ j))
            (coroot✝¹ i) •
          root✝¹ i =
      root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι),
    coroot✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
            (coroot✝¹ j) •
          coroot✝¹ i =
      coroot✝¹ ((reflection_perm✝¹ i) j)
toLin✝ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝ : Bijective ⇑toLin✝
bijectiveRight✝ : Bijective ⇑toLin✝.flip
root_coroot_two✝ :
  ∀ (i : ι),
    ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
        (coroot✝ i) =
      2
reflection_perm_root✝ :
  ∀ (i j : ι),
    root✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ j))
            (coroot✝ i) •
          root✝ i =
      root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι),
    coroot✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
            (coroot✝ j) •
          coroot✝ i =
      coroot✝ ((reflection_perm✝ i) j)
he :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.toLin
hr :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.root =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.root
hc :
  range
      ⇑{ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
            coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
            reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    range
      ⇑{ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
            coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
            reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
hp :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot →
    { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm
this :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
⊢ { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
      coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
      reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ } =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
      coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
      reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }
state_after: case mk.mk.mk.mk.e_reflection_perm
ι : 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
root✝¹ : ι ↪ M
coroot✝¹ : ι ↪ N
reflection_perm✝¹ : ι → ι ≃ ι
root✝ : ι ↪ M
coroot✝ : ι ↪ N
reflection_perm✝ : ι → ι ≃ ι
toLin✝¹ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝¹ : Bijective ⇑toLin✝¹
bijectiveRight✝¹ : Bijective ⇑toLin✝¹.flip
root_coroot_two✝¹ :
  ∀ (i : ι),
    ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
        (coroot✝¹ i) =
      2
reflection_perm_root✝¹ :
  ∀ (i j : ι),
    root✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ j))
            (coroot✝¹ i) •
          root✝¹ i =
      root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι),
    coroot✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
            (coroot✝¹ j) •
          coroot✝¹ i =
      coroot✝¹ ((reflection_perm✝¹ i) j)
toLin✝ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝ : Bijective ⇑toLin✝
bijectiveRight✝ : Bijective ⇑toLin✝.flip
root_coroot_two✝ :
  ∀ (i : ι),
    ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
        (coroot✝ i) =
      2
reflection_perm_root✝ :
  ∀ (i j : ι),
    root✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ j))
            (coroot✝ i) •
          root✝ i =
      root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι),
    coroot✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
            (coroot✝ j) •
          coroot✝ i =
      coroot✝ ((reflection_perm✝ i) j)
he :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.toLin
hr :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.root =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.root
hc :
  range
      ⇑{ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
            coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
            reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    range
      ⇑{ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
            coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
            reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
hp :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot →
    { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm
this :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
⊢ reflection_perm✝¹ = reflection_perm✝

tactic: exact hp this
state_before: case mk.mk.mk.mk.e_reflection_perm
ι : 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
root✝¹ : ι ↪ M
coroot✝¹ : ι ↪ N
reflection_perm✝¹ : ι → ι ≃ ι
root✝ : ι ↪ M
coroot✝ : ι ↪ N
reflection_perm✝ : ι → ι ≃ ι
toLin✝¹ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝¹ : Bijective ⇑toLin✝¹
bijectiveRight✝¹ : Bijective ⇑toLin✝¹.flip
root_coroot_two✝¹ :
  ∀ (i : ι),
    ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
        (coroot✝¹ i) =
      2
reflection_perm_root✝¹ :
  ∀ (i j : ι),
    root✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ j))
            (coroot✝¹ i) •
          root✝¹ i =
      root✝¹ ((reflection_perm✝¹ i) j)
reflection_perm_coroot✝¹ :
  ∀ (i j : ι),
    coroot✝¹ j -
        ({ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹ }.toLin (root✝¹ i))
            (coroot✝¹ j) •
          coroot✝¹ i =
      coroot✝¹ ((reflection_perm✝¹ i) j)
toLin✝ : M →ₗ[R] N →ₗ[R] R
bijectiveLeft✝ : Bijective ⇑toLin✝
bijectiveRight✝ : Bijective ⇑toLin✝.flip
root_coroot_two✝ :
  ∀ (i : ι),
    ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
        (coroot✝ i) =
      2
reflection_perm_root✝ :
  ∀ (i j : ι),
    root✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ j))
            (coroot✝ i) •
          root✝ i =
      root✝ ((reflection_perm✝ i) j)
reflection_perm_coroot✝ :
  ∀ (i j : ι),
    coroot✝ j -
        ({ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝ }.toLin (root✝ i))
            (coroot✝ j) •
          coroot✝ i =
      coroot✝ ((reflection_perm✝ i) j)
he :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.toLin =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.toLin
hr :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.root =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.root
hc :
  range
      ⇑{ toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
            coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
            reflection_perm_root := reflection_perm_root✝¹,
            reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    range
      ⇑{ toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
            coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
            reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
hp :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot →
    { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
          coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
          reflection_perm_root := reflection_perm_root✝¹,
          reflection_perm_coroot := reflection_perm_coroot✝¹ }.reflection_perm =
      { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
          coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
          reflection_perm_root := reflection_perm_root✝,
          reflection_perm_coroot := reflection_perm_coroot✝ }.reflection_perm
this :
  { toLin := toLin✝¹, bijectiveLeft := bijectiveLeft✝¹, bijectiveRight := bijectiveRight✝¹, root := root✝¹,
        coroot := coroot✝¹, root_coroot_two := root_coroot_two✝¹, reflection_perm := reflection_perm✝¹,
        reflection_perm_root := reflection_perm_root✝¹, reflection_perm_coroot := reflection_perm_coroot✝¹ }.coroot =
    { toLin := toLin✝, bijectiveLeft := bijectiveLeft✝, bijectiveRight := bijectiveRight✝, root := root✝,
        coroot := coroot✝, root_coroot_two := root_coroot_two✝, reflection_perm := reflection_perm✝,
        reflection_perm_root := reflection_perm_root✝, reflection_perm_coroot := reflection_perm_coroot✝ }.coroot
⊢ reflection_perm✝¹ = reflection_perm✝
state_after: no goals

tactic: exact Submodule.subset_span (mem_range_self i)
state_before: case h.hx'
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ P₁.root i ∈ span R (range ⇑P₁.root)
state_after: no goals

tactic: exact P₁.coroot_root_two i
state_before: case h.hf₁
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ (P₁.toLin.flip (P₁.coroot i)) (P₁.root i) = 2
state_after: no goals

tactic: exact P₁.mapsTo_reflection_root i
state_before: case h.hf₂
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ MapsTo (⇑(preReflection (P₁.root i) (P₁.toLin.flip (P₁.coroot i)))) (range ⇑P₁.root) (range ⇑P₁.root)
state_after: no goals

tactic: exact hr ▸ he ▸ P₂.coroot_root_two i
state_before: case h.hg₁
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ (P₁.toLin.flip (P₂.coroot i)) (P₁.root i) = 2
state_after: no goals

tactic: exact hr ▸ he ▸ P₂.mapsTo_reflection_root i
state_before: case h.hg₂
ι : 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₁ P₂ : RootPairing ι R M N
he : P₁.toLin = P₂.toLin
hr : P₁.root = P₂.root
hc : range ⇑P₁.coroot = range ⇑P₂.coroot
hp : P₁.coroot = P₂.coroot → P₁.reflection_perm = P₂.reflection_perm
this : NoZeroSMulDivisors ℤ M
i : ι
⊢ MapsTo (⇑(preReflection (P₁.root i) (P₁.toLin.flip (P₂.coroot i)))) (range ⇑P₁.root) (range ⇑P₁.root)
state_after: no goals