@@ -105,6 +105,14 @@ lemma reflection_symm (h : f x = 2) :
105
105
(reflection h).symm = reflection h :=
106
106
rfl
107
107
108
+ lemma invOn_reflection_of_mapsTo {Φ : Set M} (h : f x = 2 ) :
109
+ InvOn (reflection h) (reflection h) Φ Φ :=
110
+ ⟨fun x _ ↦ involutive_reflection h x, fun x _ ↦ involutive_reflection h x⟩
111
+
112
+ lemma bijOn_reflection_of_mapsTo {Φ : Set M} (h : f x = 2 ) (h' : MapsTo (reflection h) Φ Φ) :
113
+ BijOn (reflection h) Φ Φ :=
114
+ (invOn_reflection_of_mapsTo h).bijOn h' h'
115
+
108
116
/-- See also `Module.Dual.eq_of_preReflection_mapsTo'` for a variant of this lemma which
109
117
applies when `Φ` does not span.
110
118
@@ -162,4 +170,49 @@ lemma Dual.eq_of_preReflection_mapsTo' [CharZero R] [NoZeroSMulDivisors R M]
162
170
exact hF hy'
163
171
exact eq_of_preReflection_mapsTo hx' hΦ'₁ hΦ'₂ hf₁ (this hf₂) hg₁ (this hg₂)
164
172
173
+ variable {y}
174
+ variable {g : Dual R M}
175
+
176
+ lemma eq_of_mapsTo_reflection_of_mem [NoZeroSMulDivisors ℤ M] {Φ : Set M} (hΦ : Φ.Finite)
177
+ (hfx : f x = 2 ) (hgy : g y = 2 ) (hgx : g x = 2 ) (hfy : f y = 2 )
178
+ (hxfΦ : MapsTo (preReflection x f) Φ Φ)
179
+ (hygΦ : MapsTo (preReflection y g) Φ Φ)
180
+ (hyΦ : y ∈ Φ) :
181
+ x = y := by
182
+ have : _root_.Finite Φ := hΦ
183
+ set sxy : M ≃ₗ[R] M := (Module.reflection hgy).trans (Module.reflection hfx)
184
+ have hb : BijOn sxy Φ Φ :=
185
+ (bijOn_reflection_of_mapsTo hfx hxfΦ).comp (bijOn_reflection_of_mapsTo hgy hygΦ)
186
+ have hsxy : ∀ n : ℕ, (sxy^[n]) y = y + (2 * n : ℤ) • (x - y) := by
187
+ intro n
188
+ induction n with
189
+ | zero => simp
190
+ | succ n ih =>
191
+ simp only [iterate_succ', comp_apply, ih, zsmul_sub, map_add, LinearEquiv.trans_apply,
192
+ reflection_apply_self, map_neg, reflection_apply, hfy, two_smul, neg_sub, map_sub,
193
+ map_zsmul, hgx, smul_neg, smul_add, Nat.cast_succ, mul_add, mul_one, add_smul, sxy]
194
+ abel
195
+ set f' : ℕ → Φ := fun n ↦ ⟨(sxy^[n]) y, by
196
+ rw [← IsFixedPt.image_iterate hb.image_eq n]; exact mem_image_of_mem _ hyΦ⟩
197
+ have : ¬ Injective f' := not_injective_infinite_finite f'
198
+ contrapose! this
199
+ intros n m hnm
200
+ rw [Subtype.mk_eq_mk, hsxy, hsxy, add_right_inj, ← sub_eq_zero, ← sub_smul, smul_eq_zero,
201
+ sub_eq_zero, sub_eq_zero] at hnm
202
+ simpa using hnm.resolve_right this
203
+
204
+ lemma injOn_dualMap_subtype_span_range_range {ι : Type *} [NoZeroSMulDivisors ℤ M]
205
+ {r : ι ↪ M} {c : ι → Dual R M} (hfin : (range r).Finite)
206
+ (h_two : ∀ i, c i (r i) = 2 )
207
+ (h_mapsTo : ∀ i, MapsTo (preReflection (r i) (c i)) (range r) (range r)) :
208
+ InjOn (span R (range r)).subtype.dualMap (range c) := by
209
+ rintro - ⟨i, rfl⟩ - ⟨j, rfl⟩ hij
210
+ congr
211
+ suffices ∀ k, c i (r k) = c j (r k) by
212
+ rw [← EmbeddingLike.apply_eq_iff_eq r]
213
+ exact eq_of_mapsTo_reflection_of_mem (f := c i) (g := c j) hfin (h_two i) (h_two j)
214
+ (by rw [← this, h_two]) (by rw [this, h_two]) (h_mapsTo i) (h_mapsTo j) (mem_range_self j)
215
+ intro k
216
+ simpa using LinearMap.congr_fun hij ⟨r k, Submodule.subset_span (mem_range_self k)⟩
217
+
165
218
end Module
0 commit comments