|
| 1 | +/- |
| 2 | +Copyright (c) 2023 Eric Wieser. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Eric Wieser |
| 5 | +-/ |
| 6 | +import algebra.triv_sq_zero_ext |
| 7 | +import topology.algebra.infinite_sum |
| 8 | +import topology.algebra.module.basic |
| 9 | + |
| 10 | +/-! |
| 11 | +# Topology on `triv_sq_zero_ext R M` |
| 12 | +
|
| 13 | +The type `triv_sq_zero_ext R M` inherits the topology from `R × M`. |
| 14 | +
|
| 15 | +Note that this is not the topology induced by the seminorm on the dual numbers suggested by |
| 16 | +[this Math.SE answer](https://math.stackexchange.com/a/1056378/1896), which instead induces |
| 17 | +the topology pulled back through the projection map `triv_sq_zero_ext.fst : tsze R M → R`. |
| 18 | +Obviously, that topology is not Hausdorff and using it would result in `exp` converging to more than |
| 19 | +one value. |
| 20 | +
|
| 21 | +## Main results |
| 22 | +
|
| 23 | +* `triv_sq_zero_ext.topological_ring`: the ring operations are continuous |
| 24 | +
|
| 25 | +-/ |
| 26 | + |
| 27 | +variables {α S R M : Type*} |
| 28 | + |
| 29 | +local notation `tsze` := triv_sq_zero_ext |
| 30 | + |
| 31 | +namespace triv_sq_zero_ext |
| 32 | +variables [topological_space R] [topological_space M] |
| 33 | + |
| 34 | +instance : topological_space (tsze R M) := |
| 35 | +topological_space.induced fst ‹_› ⊓ topological_space.induced snd ‹_› |
| 36 | + |
| 37 | +instance [t2_space R] [t2_space M] : t2_space (tsze R M) := |
| 38 | +prod.t2_space |
| 39 | + |
| 40 | +lemma nhds_def (x : tsze R M) : nhds x = (nhds x.fst).prod (nhds x.snd) := |
| 41 | +by cases x; exact nhds_prod_eq |
| 42 | +lemma nhds_inl [has_zero M] (x : R) : nhds (inl x : tsze R M) = (nhds x).prod (nhds 0) := nhds_def _ |
| 43 | +lemma nhds_inr [has_zero R] (m : M) : nhds (inr m : tsze R M) = (nhds 0).prod (nhds m) := nhds_def _ |
| 44 | + |
| 45 | +lemma continuous_fst : continuous (fst : tsze R M → R) := continuous_fst |
| 46 | +lemma continuous_snd : continuous (snd : tsze R M → M) := continuous_snd |
| 47 | + |
| 48 | +lemma continuous_inl [has_zero M] : continuous (inl : R → tsze R M) := |
| 49 | +continuous_id.prod_mk continuous_const |
| 50 | +lemma continuous_inr [has_zero R] : continuous (inr : M → tsze R M) := |
| 51 | +continuous_const.prod_mk continuous_id |
| 52 | + |
| 53 | +lemma embedding_inl [has_zero M] : embedding (inl : R → tsze R M) := |
| 54 | +embedding_of_embedding_compose continuous_inl continuous_fst embedding_id |
| 55 | +lemma embedding_inr [has_zero R] : embedding (inr : M → tsze R M) := |
| 56 | +embedding_of_embedding_compose continuous_inr continuous_snd embedding_id |
| 57 | + |
| 58 | +variables (R M) |
| 59 | + |
| 60 | +/-- `triv_sq_zero_ext.fst` as a continuous linear map. -/ |
| 61 | +@[simps] |
| 62 | +def fst_clm [comm_semiring R] [add_comm_monoid M] [module R M] : tsze R M →L[R] R := |
| 63 | +{ to_fun := fst, |
| 64 | + .. continuous_linear_map.fst R R M } |
| 65 | + |
| 66 | +/-- `triv_sq_zero_ext.snd` as a continuous linear map. -/ |
| 67 | +@[simps] |
| 68 | +def snd_clm [comm_semiring R] [add_comm_monoid M] [module R M] : tsze R M →L[R] M := |
| 69 | +{ to_fun := snd, |
| 70 | + cont := continuous_snd, |
| 71 | + .. continuous_linear_map.snd R R M } |
| 72 | + |
| 73 | +/-- `triv_sq_zero_ext.inl` as a continuous linear map. -/ |
| 74 | +@[simps] |
| 75 | +def inl_clm [comm_semiring R] [add_comm_monoid M] [module R M] : R →L[R] tsze R M := |
| 76 | +{ to_fun := inl, |
| 77 | + .. continuous_linear_map.inl R R M } |
| 78 | + |
| 79 | +/-- `triv_sq_zero_ext.inr` as a continuous linear map. -/ |
| 80 | +@[simps] |
| 81 | +def inr_clm [comm_semiring R] [add_comm_monoid M] [module R M] : M →L[R] tsze R M := |
| 82 | +{ to_fun := inr, |
| 83 | + .. continuous_linear_map.inr R R M } |
| 84 | + |
| 85 | +variables {R M} |
| 86 | + |
| 87 | +instance [has_add R] [has_add M] |
| 88 | + [has_continuous_add R] [has_continuous_add M] : |
| 89 | + has_continuous_add (tsze R M) := |
| 90 | +prod.has_continuous_add |
| 91 | + |
| 92 | +instance [has_mul R] [has_add M] [has_smul R M] |
| 93 | + [has_continuous_mul R] [has_continuous_smul R M] [has_continuous_add M] : |
| 94 | + has_continuous_mul (tsze R M) := |
| 95 | +⟨((continuous_fst.comp _root_.continuous_fst).mul (continuous_fst.comp _root_.continuous_snd)) |
| 96 | + .prod_mk $ |
| 97 | + ((continuous_fst.comp _root_.continuous_fst).smul |
| 98 | + (continuous_snd.comp _root_.continuous_snd)).add |
| 99 | + ((continuous_fst.comp _root_.continuous_snd).smul |
| 100 | + (continuous_snd.comp _root_.continuous_fst))⟩ |
| 101 | + |
| 102 | +instance [has_neg R] [has_neg M] |
| 103 | + [has_continuous_neg R] [has_continuous_neg M] : |
| 104 | + has_continuous_neg (tsze R M) := |
| 105 | +prod.has_continuous_neg |
| 106 | + |
| 107 | +instance [semiring R] [add_comm_monoid M] [module R M] |
| 108 | + [topological_semiring R] [has_continuous_add M] [has_continuous_smul R M] : |
| 109 | + topological_semiring (tsze R M) := |
| 110 | +{} |
| 111 | + |
| 112 | +instance [comm_ring R] [add_comm_group M] [module R M] |
| 113 | + [topological_ring R] [topological_add_group M] [has_continuous_smul R M] : |
| 114 | + topological_ring (tsze R M) := |
| 115 | +{} |
| 116 | + |
| 117 | +instance [has_smul S R] [has_smul S M] |
| 118 | + [has_continuous_const_smul S R] [has_continuous_const_smul S M] : |
| 119 | + has_continuous_const_smul S (tsze R M) := |
| 120 | +prod.has_continuous_const_smul |
| 121 | + |
| 122 | +instance [topological_space S] [has_smul S R] [has_smul S M] |
| 123 | + [has_continuous_smul S R] [has_continuous_smul S M] : |
| 124 | + has_continuous_smul S (tsze R M) := |
| 125 | +prod.has_continuous_smul |
| 126 | + |
| 127 | +variables (M) |
| 128 | + |
| 129 | +lemma has_sum_inl [add_comm_monoid R] [add_comm_monoid M] {f : α → R} {a : R} (h : has_sum f a) : |
| 130 | + has_sum (λ x, inl (f x)) (inl a : tsze R M) := |
| 131 | +h.map (⟨inl, inl_zero _, inl_add _⟩ : R →+ tsze R M) continuous_inl |
| 132 | + |
| 133 | +lemma has_sum_inr [add_comm_monoid R] [add_comm_monoid M] {f : α → M} {a : M} (h : has_sum f a) : |
| 134 | + has_sum (λ x, inr (f x)) (inr a : tsze R M) := |
| 135 | +h.map (⟨inr, inr_zero _, inr_add _⟩ : M →+ tsze R M) continuous_inr |
| 136 | + |
| 137 | +lemma has_sum_fst [add_comm_monoid R] [add_comm_monoid M] {f : α → tsze R M} {a : tsze R M} |
| 138 | + (h : has_sum f a) : has_sum (λ x, fst (f x)) (fst a) := |
| 139 | +h.map (⟨fst, fst_zero, fst_add⟩ : tsze R M →+ R) continuous_fst |
| 140 | + |
| 141 | +lemma has_sum_snd [add_comm_monoid R] [add_comm_monoid M] {f : α → tsze R M} {a : tsze R M} |
| 142 | + (h : has_sum f a) : has_sum (λ x, snd (f x)) (snd a) := |
| 143 | +h.map (⟨snd, snd_zero, snd_add⟩ : tsze R M →+ M) continuous_snd |
| 144 | + |
| 145 | +end triv_sq_zero_ext |
0 commit comments