Skip to content

Commit 20abe47

Browse files
committed
more API for module topology
1 parent 46cedc0 commit 20abe47

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

FLT/ForMathlib/ActionTopology.lean

+47-5
Original file line numberDiff line numberDiff line change
@@ -242,31 +242,73 @@ section Pi
242242

243243
variable {R : Type*} [τR : TopologicalSpace R] [Semiring R] [TopologicalSemiring R]
244244

245+
-- not sure I'm going to do it this way -- see `pi` below.
245246
instance piNat (n : ℕ) {A : Fin n → Type*} [∀ i, AddCommGroup (A i)]
246247
[∀ i, Module R (A i)] [∀ i, TopologicalSpace (A i)]
247248
[∀ i, IsActionTopology R (A i)]: IsActionTopology R (Π i, A i) := by
248249
induction n
249250
· infer_instance
250-
·
251+
· case succ n IH _ _ _ _ =>
252+
specialize IH (A := fun i => A (Fin.castSucc i))
251253
sorry
252254

253255
variable {ι : Type*} [Finite ι] {A : ι → Type*} [∀ i, AddCommGroup (A i)]
254256
[∀ i, Module R (A i)] [∀ i, TopologicalSpace (A i)]
255257
[∀ i, IsActionTopology R (A i)]
256258

259+
variable (R) in
260+
def LinearEquiv.sumPiEquivProdPi (S T : Type*) (A : S ⊕ T → Type*)
261+
[∀ st, AddCommGroup (A st)] [∀ st, Module R (A st)] :
262+
(∀ (st : S ⊕ T), A st) ≃ₗ[R] (∀ (s : S), A (.inl s)) × (∀ (t : T), A (.inr t)) where
263+
toFun f := (fun s ↦ f (.inl s), fun t ↦ f (.inr t))
264+
map_add' f g := by aesop
265+
map_smul' := by aesop
266+
invFun fg st := Sum.rec (fun s => fg.1 s) (fun t => fg.2 t) st
267+
left_inv := by intro x; aesop
268+
right_inv := by intro x; aesop
269+
270+
def Homeomorph.sumPiEquivProdPi (S T : Type*) (A : S ⊕ T → Type*)
271+
[∀ st, TopologicalSpace (A st)] :
272+
(∀ (st : S ⊕ T), A st) ≃ₜ (∀ (s : S), A (.inl s)) × (∀ (t : T), A (.inr t)) where
273+
toFun f := (fun s ↦ f (.inl s), fun t ↦ f (.inr t))
274+
invFun fg st := Sum.rec (fun s => fg.1 s) (fun t => fg.2 t) st
275+
left_inv := by intro x; aesop
276+
right_inv := by intro x; aesop
277+
continuous_toFun := Continuous.prod_mk (by fun_prop) (by fun_prop)
278+
continuous_invFun := continuous_pi <| fun st ↦ by
279+
rcases st with s | t
280+
· simp
281+
fun_prop
282+
· simp
283+
fun_prop
284+
285+
--example (f : PUnit → Type*) [∀ x, TopologicalSpace (f x)]: ((t : PUnit) → (f t)) ≃ₜ f () := by exact?
286+
--example (f : PUnit → Type*) [∀ x, AddCommGroup (f x)] [∀ x, Module R (f x)] : ((t : PUnit) → (f t)) ≃ₗ[R] f () := by exact?
287+
257288
instance pi : IsActionTopology R (∀ i, A i) := by
258289
induction ι using Finite.induction_empty_option
259290
· case of_equiv X Y e hind _ _ _ _ =>
260291
specialize hind (A := fun x ↦ A (e x))
261-
apply iso (R := R) (A := ∀ i, A (e i)) (B := ∀ i, A i)
292+
apply iso (R := R) (A := ∀ j, A (e j)) (B := ∀ i, A i)
262293
(Homeomorph.piCongrLeft e) (by exact LinearEquiv.piCongrLeft R A e)
263294
aesop
264295
· apply subsingleton
265296
· case h_option X _ hind _ _ _ _ =>
266297
specialize hind (A := fun x ↦ A (some x))
267-
-- Option X ≃ X ⊕ Unit
268-
-- look at what Yakov told me
269-
sorry
298+
let e : Option X ≃ X ⊕ Unit := Equiv.optionEquivSumPUnit X
299+
apply @iso (R := R) (A := ∀ y, A (e.symm y)) (B := ∀ x, A x)
300+
(ehomeo := Homeomorph.piCongrLeft e.symm)
301+
(elinear := LinearEquiv.piCongrLeft R A e.symm) _ (_) (_)
302+
· intros
303+
rfl
304+
· apply @iso (ehomeo := (Homeomorph.sumPiEquivProdPi X Unit _).symm)
305+
(elinear := (LinearEquiv.sumPiEquivProdPi R X Unit _).symm) (_) (_) (_)
306+
· intros
307+
rfl
308+
· apply @prod _ _ _ _ _ _ (_) (_) _ _ _ (_) (_)
309+
· exact hind
310+
· --apply @iso (ehomeo := (_ : A (e.symm (Sum.inr ())) ≃ₜ _))
311+
sorry
270312

271313
end Pi
272314

0 commit comments

Comments
 (0)