Skip to content

Commit f6b6018

Browse files
committed
continuous_add for finite modules under natural topology
1 parent 58338fa commit f6b6018

File tree

1 file changed

+132
-45
lines changed

1 file changed

+132
-45
lines changed

FLT/HIMExperiments/natural_topology.lean

+132-45
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,57 @@ which we call the *something* topology.
3131

3232
-- end continuous_smul
3333

34+
section elsewhere
35+
36+
variable {A : Type*} [AddCommGroup A] [τA : TopologicalSpace A] [ContinuousAdd A] [ContinuousNeg A]
37+
variable {B : Type*} [AddCommGroup B] [τB : TopologicalSpace B] --[ContinuousAdd B] [ContinuousNeg B]
38+
39+
lemma foo {α : Type*} (P : Prop) [Decidable P] (X : Set α) :
40+
⋃ (_ : P), X = if P then X else ∅ := by
41+
aesop
42+
43+
lemma AddMonoidHom.sub_mem_ker_iff {A B : Type*} [AddCommGroup A]
44+
[AddCommGroup B] (φ : A →+ B) {x y : A} :
45+
x - y ∈ AddMonoidHom.ker φ ↔ φ x = φ y := by
46+
rw [AddMonoidHom.mem_ker, map_sub, sub_eq_zero]
47+
48+
lemma isOpenMap_of_coinduced (φ : A →+ B) (hφc : Continuous φ)
49+
(h : TopologicalSpace.coinduced φ τA = τB) :
50+
IsOpenMap φ := by
51+
intro U hU
52+
rw [← h]
53+
rw [isOpen_coinduced]
54+
have foo : IsOpen (⋃ k ∈ AddMonoidHom.ker φ, (fun x ↦ x + k) ⁻¹' U) := by
55+
apply isOpen_sUnion
56+
intro kU
57+
intro hkU
58+
rw [Set.mem_range] at hkU
59+
rcases hkU with ⟨k, hk, rfl⟩
60+
classical
61+
simp_rw [foo]
62+
split
63+
· apply Continuous.isOpen_preimage _ _ hU
64+
continuity
65+
· exact isOpen_empty
66+
convert foo
67+
ext x
68+
constructor
69+
· rintro ⟨y, hyU, hyx⟩
70+
apply Set.mem_iUnion_of_mem (y - x)
71+
suffices y - x ∈ AddMonoidHom.ker φ by simp_all
72+
rwa [AddMonoidHom.sub_mem_ker_iff]
73+
· intro h
74+
rw [Set.mem_iUnion] at h
75+
rcases h with ⟨y, h⟩
76+
rw [Set.mem_iUnion] at h
77+
rcases h with ⟨h1, h2⟩
78+
rw [Set.mem_preimage] at h2
79+
use x + y, h2
80+
rw [AddMonoidHom.map_add, h1, add_zero]
81+
82+
end elsewhere
83+
84+
3485
section basics
3586

3687
variable (R : Type*) [TopologicalSpace R] [Ring R] [TopologicalRing R]
@@ -161,7 +212,7 @@ end surj
161212
section add
162213

163214
variable {R : Type*} [τR : TopologicalSpace R] [Ring R] [TopologicalRing R]
164-
variable {A : Type*} [AddCommMonoid A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
215+
variable {A : Type*} [AddCommGroup A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
165216

166217
variable (R A) in
167218
abbrev thing2 : A × A →ₗ[R] A where
@@ -171,70 +222,106 @@ abbrev thing2 : A × A →ₗ[R] A where
171222
map_smul' r x := by
172223
simp only [Prod.smul_fst, Prod.smul_snd, RingHom.id_apply, smul_add]
173224

225+
open TopologicalSpace in
226+
lemma coinduced_prod_eq_prod_coinduced (X Y S T : Type*) [AddCommGroup X] [AddCommGroup Y]
227+
[AddCommGroup S] [AddCommGroup T] (f : X →+ S) (g : Y →+ T)
228+
(hf : Function.Surjective f) (hg : Function.Surjective g)
229+
[τX : TopologicalSpace X] [ContinuousAdd X] [τY : TopologicalSpace Y] [ContinuousAdd Y] :
230+
coinduced (Prod.map f g) instTopologicalSpaceProd =
231+
@instTopologicalSpaceProd S T (coinduced f τX) (coinduced g τY) := by
232+
ext U
233+
rw [@isOpen_prod_iff]
234+
rw [isOpen_coinduced]
235+
rw [isOpen_prod_iff]
236+
constructor
237+
· intro h s t hst
238+
obtain ⟨x, rfl⟩ := hf s
239+
obtain ⟨y, rfl⟩ := hg t
240+
obtain ⟨V1, V2, hV1, hV2, hx1, hy2, h12⟩ := h x y hst
241+
have this1 := @isOpenMap_of_coinduced _ _ _ _ _ _ (coinduced f τX) f ?_ rfl V1 hV1
242+
· have this2 := @isOpenMap_of_coinduced _ _ _ _ _ _ (coinduced g τY) g ?_ rfl V2 hV2
243+
· use f '' V1, g '' V2, this1, this2, ⟨x, hx1, rfl⟩, ⟨y, hy2, rfl⟩
244+
intro ⟨s, t⟩ ⟨⟨x', hx', hxs⟩, ⟨y', hy', hyt⟩⟩
245+
subst hxs hyt
246+
specialize @h12 (x', y') ⟨hx', hy'⟩
247+
exact h12
248+
· rw [continuous_iff_coinduced_le]
249+
· rw [continuous_iff_coinduced_le]
250+
· intro h x y hxy
251+
rw [Set.mem_preimage, Prod.map_apply] at hxy
252+
obtain ⟨U1, U2, hU1, hU2, hx1, hy2, h12⟩ := h (f x) (g y) hxy
253+
use f ⁻¹' U1, g ⁻¹' U2, hU1, hU2, hx1, hy2
254+
intro ⟨x', y'⟩ ⟨hx', hy'⟩
255+
apply h12
256+
exact ⟨hx', hy'⟩
257+
258+
variable (R A) in
259+
@[continuity, fun_prop]
174260
lemma continuous_add [Module.Finite R A]: Continuous (fun ab ↦ ab.1 + ab.2 : A × A → A) := by
175261
rw [continuous_iff_coinduced_le, isActionTopology R A]
176262
obtain ⟨n, f, hf⟩ := Module.Finite.exists_fin' R A
177263
rw [← surj hf]
178-
rw [← continuous_iff_coinduced_le]
179-
180-
--refine le_iSup_of_le 2 ?_
181-
182-
-- rw [le_iSup_iff]
183-
-- intro τA hτA
184-
-- rw [←continuous_iff_coinduced_le]
185-
sorry
264+
intro U hU
265+
rw [isOpen_coinduced] at hU ⊢
266+
apply @Continuous.isOpen_preimage ((Fin n → R) × (Fin n → R)) (Fin n → R) _ _
267+
(fun rs ↦ rs.1 + rs.2) (by continuity) at hU
268+
let ff : (Fin n → R) × (Fin n → R) →ₗ[R] A × A := f.prodMap f
269+
convert isOpenMap_of_coinduced (τB := TopologicalSpace.coinduced ff instTopologicalSpaceProd)
270+
ff.toAddMonoidHom _ rfl _ hU
271+
· symm
272+
convert @coinduced_prod_eq_prod_coinduced (Fin n → R) (Fin n → R) A A _ _ _ _ f f hf hf _ _ _ _
273+
· ext x
274+
cases' x with a b
275+
simp only [Set.mem_preimage, LinearMap.toAddMonoidHom_coe, Set.mem_image, map_add, Prod.exists]
276+
constructor
277+
· intro h
278+
obtain ⟨a1, rfl⟩ := hf a
279+
obtain ⟨b1, rfl⟩ := hf b
280+
use a1, b1, h
281+
rfl
282+
· rintro ⟨a1, b1, hU, hab⟩
283+
cases hab
284+
exact hU
285+
· rw [continuous_iff_coinduced_le]
286+
rfl
186287

187288
end add
188289

189290

190291
section prod
191292

192-
variable {R : Type*} [τR : TopologicalSpace R] [Ring R]
193-
variable {A : Type*} [AddCommMonoid A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
194-
variable {B : Type*} [AddCommMonoid B] [Module R B] [aB : TopologicalSpace B] [IsActionTopology R B]
293+
variable {R : Type*} [τR : TopologicalSpace R] [Ring R] [TopologicalRing R]
294+
variable {A : Type*} [AddCommGroup A] [Module R A] [aA : TopologicalSpace A] [IsActionTopology R A]
295+
variable {B : Type*} [AddCommGroup B] [Module R B] [aB : TopologicalSpace B] [IsActionTopology R B]
195296

196297
example : A × B →ₗ[R] A := by exact LinearMap.fst R A B
197298

299+
example : A →ₗ[R] A × B := by exact LinearMap.inl R A B
198300
open TopologicalSpace in
199-
lemma prod : IsActionTopology R (A × B) := by
301+
lemma prod [Module.Finite R A] [Module.Finite R B] :
302+
IsActionTopology R (A × B) := by
200303
constructor
201304
apply le_antisymm
202305
· rw [← continuous_id_iff_le]
203-
let id' : A × B → A × B := fun ab ↦ (ab.1, 0) + (0, ab.2)
204-
have hid : @id (A × B) = fun ab ↦ (ab.1, 0) + (0, ab.2) := by ext ⟨a, b⟩ <;> simp
306+
have hid : @id (A × B) = (fun abcd ↦ abcd.1 + abcd.2) ∘ (fun ab ↦ ((ab.1, 0),(0, ab.2))) := by ext ⟨a, b⟩ <;> simp
205307
rw [hid]
206-
207-
208-
sorry
308+
apply @Continuous.comp (A × B) ((A × B) × (A × B)) (A × B) instTopologicalSpaceProd (@instTopologicalSpaceProd _ _ (actionTopology R _) (actionTopology R _)) (actionTopology R _) _ _
309+
· apply @continuous_add R _ _ _ (A × B) _ _ (actionTopology R _) ?_
310+
convert IsActionTopology.mk rfl
311+
· convert @Continuous.prod_map (A × B) (A × B) A B (actionTopology R _) (actionTopology R _) _ _ (LinearMap.inl R A B) (LinearMap.inr R A B) _ _ using 1
312+
· rw [isActionTopology R A]
313+
apply continuous_of_linearMap'
314+
· rw [isActionTopology R B]
315+
apply continuous_of_linearMap'
209316
· apply le_inf
210317
· rw [← continuous_iff_le_induced]
211-
convert continuous_of_linearMap (LinearMap.fst R A B)
212-
·
213-
sorry
214-
·
215-
sorry
216-
·
217-
sorry
218-
-- · trans @instTopologicalSpaceProd M N (coinduced Prod.fst (actionTopology R (M × N))) (coinduced Prod.snd (actionTopology R (M × N)))
219-
-- · apply le_inf
220-
-- · rw [← continuous_iff_le_induced]
221-
-- rw [continuous_iff_coinduced_le]
222-
-- apply coinduced_mono
223-
-- sorry
224-
-- ·
225-
-- sorry
226-
-- -- apply TopologicalSpace.prod_mono
227-
-- -- NOTE
228-
-- -- this is the one that isn't done
229-
-- rw [← continuous_id_iff_le]
230-
-- -- There is no more proof here.
231-
-- -- In the code below I go off on a tangent
232-
-- -- trying to prove something else,
233-
-- -- and then sorry this goal.
234-
235-
-- sorry
236-
-- sorry
237-
318+
rw [isActionTopology R A]
319+
change @Continuous (A × B) A (actionTopology R _) (actionTopology R _) (LinearMap.fst R A B)
320+
apply continuous_of_linearMap'
321+
· rw [← continuous_iff_le_induced]
322+
rw [isActionTopology R B]
323+
change @Continuous (A × B) B (actionTopology R _) (actionTopology R _) (LinearMap.snd R A B)
324+
apply continuous_of_linearMap'
238325
#exit
239326

240327
-- idea: map R x M -> M is R x M -> R x M x N, τR x σ

0 commit comments

Comments
 (0)