Theorem: Module.eq_of_mapsTo_reflection_of_mem
File: Mathlib/LinearAlgebra/Reflection.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : Φ.Finite
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
⊢ x = y
tactic: rw [← finite_coe_iff] at hΦ
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
⊢ x = y
tactic: set sxy : M ≃ₗ[R] M := (Module.reflection hgy).trans (Module.reflection hfx)
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
⊢ x = y
tactic: have hb : BijOn sxy Φ Φ :=
    (bijOn_reflection_of_mapsTo hfx hxfΦ).comp (bijOn_reflection_of_mapsTo hgy hygΦ)
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
⊢ x = y
tactic: have hsxy : ∀ n : ℕ, (sxy^[n]) y = y + (2 * n : ℤ) • (x - y) := by
    intro n
    induction n with
    | zero => simp
    | succ n ih =>
      simp only [iterate_succ', comp_apply, ih, zsmul_sub, map_add, LinearEquiv.trans_apply,
        reflection_apply_self, map_neg, reflection_apply, hfy, two_smul, neg_sub, map_sub,
        map_zsmul, hgx, smul_neg, smul_add, Nat.cast_succ, mul_add, mul_one, add_smul, sxy]
      abel
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
⊢ x = y
tactic: set f' : ℕ → Φ := fun n ↦ ⟨(sxy^[n]) y, by
    rw [← IsFixedPt.image_iterate hb.image_eq n]; exact mem_image_of_mem _ hyΦ⟩
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : ¬Injective f'
⊢ x = y
tactic: have : ¬ Injective f' := not_injective_infinite_finite f'
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : ¬Injective f'
⊢ x = y
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : x ≠ y
⊢ Injective f'
tactic: contrapose! this
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : x ≠ y
⊢ Injective f'
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : x ≠ y
n m : ℕ
hnm : f' n = f' m
⊢ n = m
tactic: intros n m hnm
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : x ≠ y
n m : ℕ
hnm : f' n = f' m
⊢ n = m
state_after: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : x ≠ y
n m : ℕ
hnm : 2 * ↑n = 2 * ↑m ∨ x = y
⊢ n = m
tactic: rw [Subtype.mk_eq_mk, hsxy, hsxy, add_right_inj, ← sub_eq_zero, ← sub_smul, smul_eq_zero,
    sub_eq_zero, sub_eq_zero] at hnm
state_before: R : Type u_1
M : Type u_2
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
x : M
f : Dual R M
y : M
g : Dual R M
inst✝ : NoZeroSMulDivisors ℤ M
Φ : Set M
hΦ : _root_.Finite ↑Φ
hfx : f x = 2
hgy : g y = 2
hgx : g x = 2
hfy : f y = 2
hxfΦ : MapsTo (⇑(preReflection x f)) Φ Φ
hygΦ : MapsTo (⇑(preReflection y g)) Φ Φ
hyΦ : y ∈ Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
f' : ℕ → ↑Φ := fun n => ⟨(⇑sxy)^[n] y, ⋯⟩
this : x ≠ y
n m : ℕ
hnm : 2 * ↑n = 2 * ↑m ∨ x = y
⊢ n = m
state_after: no goals
tactic: simpa using hnm.resolve_right this