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

tactic: have : _root_.Finite Φ := 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Φ : Φ.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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
⊢ 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
⊢ 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
⊢ 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
⊢ 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
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: 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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: 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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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: 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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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: 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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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: simpa using hnm.resolve_right 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Φ : Φ.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 ∈ Φ
this✝ : _root_.Finite ↑Φ
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: intro n
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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
⊢ ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
n : ℕ
⊢ (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)

tactic: 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
n : ℕ
⊢ (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
state_after: no goals

tactic: simp
state_before: case zero
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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
⊢ (⇑sxy)^[0] y = y + (2 * ↑0) • (x - y)
state_after: no goals

tactic: 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]
state_before: case succ
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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
n : ℕ
ih : (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
⊢ (⇑sxy)^[n + 1] y = y + (2 * ↑(n + 1)) • (x - y)
state_after: case succ
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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
n : ℕ
ih : (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
⊢ x + x - y +
      (-((2 * ↑n) • x) -
          ((2 * ↑n) • y - ((2 * ↑n) • x + (2 * ↑n) • x) + ((2 * ↑n) • y - ((2 * ↑n) • x + (2 * ↑n) • x))) -
        ((2 * ↑n) • x + (2 * ↑n) • x - (2 * ↑n) • y)) =
    y + ((2 * ↑n) • x - (2 * ↑n) • y + (x - y + (x - y)))

tactic: abel
state_before: case succ
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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
n : ℕ
ih : (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
⊢ x + x - y +
      (-((2 * ↑n) • x) -
          ((2 * ↑n) • y - ((2 * ↑n) • x + (2 * ↑n) • x) + ((2 * ↑n) • y - ((2 * ↑n) • x + (2 * ↑n) • x))) -
        ((2 * ↑n) • x + (2 * ↑n) • x - (2 * ↑n) • y)) =
    y + ((2 * ↑n) • x - (2 * ↑n) • y + (x - y + (x - y)))
state_after: no goals

tactic: rw [← IsFixedPt.image_iterate hb.image_eq n]
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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
n : ℕ
⊢ (⇑sxy)^[n] 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
n : ℕ
⊢ (⇑sxy)^[n] y ∈ (⇑sxy)^[n] '' Φ

tactic: 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Φ : Φ.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 ∈ Φ
this : _root_.Finite ↑Φ
sxy : M ≃ₗ[R] M := reflection hgy ≪≫ₗ reflection hfx
hb : BijOn (⇑sxy) Φ Φ
hsxy : ∀ (n : ℕ), (⇑sxy)^[n] y = y + (2 * ↑n) • (x - y)
n : ℕ
⊢ (⇑sxy)^[n] y ∈ (⇑sxy)^[n] '' Φ
state_after: no goals