Skip to content

Commit 8f013c4

Browse files
committed
chore(ContinuousMonoidHom): golf (#9189)
1 parent d7fc2c5 commit 8f013c4

File tree

1 file changed

+16
-39
lines changed

1 file changed

+16
-39
lines changed

Mathlib/Topology/Algebra/ContinuousMonoidHom.lean

Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -286,47 +286,24 @@ theorem embedding_toContinuousMap :
286286
#align continuous_monoid_hom.embedding_to_continuous_map ContinuousMonoidHom.embedding_toContinuousMap
287287
#align continuous_add_monoid_hom.embedding_to_continuous_map ContinuousAddMonoidHom.embedding_toContinuousMap
288288

289+
@[to_additive]
290+
lemma range_toContinuousMap :
291+
Set.range (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) =
292+
{f : C(A, B) | f 1 = 1 ∧ ∀ x y, f (x * y) = f x * f y} := by
293+
refine Set.Subset.antisymm (Set.range_subset_iff.2 fun f ↦ ⟨map_one f, map_mul f⟩) ?_
294+
rintro f ⟨h1, hmul⟩
295+
exact ⟨{ f with map_one' := h1, map_mul' := hmul }, rfl⟩
296+
289297
@[to_additive]
290298
theorem closedEmbedding_toContinuousMap [ContinuousMul B] [T2Space B] :
291-
ClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) :=
292-
⟨embedding_toContinuousMap A B,
293-
by
294-
suffices
295-
Set.range (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) =
296-
({ f | f '' {1} ⊆ {1}ᶜ } ∪
297-
⋃ (x) (y) (U) (V) (W) (_ : IsOpen U) (_ : IsOpen V) (_ : IsOpen W) (_ :
298-
Disjoint (U * V) W),
299-
{ f | f '' {x} ⊆ U } ∩ { f | f '' {y} ⊆ V } ∩ { f | f '' {x * y} ⊆ W } :
300-
Set C(A , B))ᶜ by
301-
rw [this, compl_compl]
302-
refine' (ContinuousMap.isOpen_gen isCompact_singleton isOpen_compl_singleton).union _
303-
repeat' apply isOpen_iUnion; intro
304-
repeat' apply IsOpen.inter
305-
all_goals apply ContinuousMap.isOpen_gen isCompact_singleton; assumption
306-
simp_rw [Set.compl_union, Set.compl_iUnion, Set.image_singleton, Set.singleton_subset_iff,
307-
Set.ext_iff, Set.mem_inter_iff, Set.mem_iInter, Set.mem_compl_iff]
308-
refine' fun f => ⟨_, _⟩
309-
· rintro ⟨f, rfl⟩
310-
exact
311-
fun h => h (map_one f), fun x y U V W _hU _hV _hW h ⟨⟨hfU, hfV⟩, hfW⟩ =>
312-
h.le_bot ⟨Set.mul_mem_mul hfU hfV, (congr_arg (· ∈ W) (map_mul f x y)).mp hfW⟩⟩
313-
· rintro ⟨hf1, hf2⟩
314-
suffices ∀ x y, f (x * y) = f x * f y by
315-
refine'
316-
⟨({ f with
317-
map_one' := of_not_not hf1
318-
map_mul' := this } :
319-
ContinuousMonoidHom A B),
320-
ContinuousMap.ext fun _ => rfl⟩
321-
intro x y
322-
contrapose! hf2
323-
obtain ⟨UV, W, hUV, hW, hfUV, hfW, h⟩ := t2_separation hf2.symm
324-
have hB := @continuous_mul B _ _ _
325-
obtain ⟨U, V, hU, hV, hfU, hfV, h'⟩ :=
326-
isOpen_prod_iff.mp (hUV.preimage hB) (f x) (f y) hfUV
327-
refine' ⟨x, y, U, V, W, hU, hV, hW, h.mono_left _, ⟨hfU, hfV⟩, hfW⟩
328-
rintro _ ⟨x, y, hx : (x, y).1 ∈ U, hy : (x, y).2 ∈ V, rfl⟩
329-
exact h' ⟨hx, hy⟩⟩⟩
299+
ClosedEmbedding (toContinuousMap : ContinuousMonoidHom A B → C(A, B)) where
300+
toEmbedding := embedding_toContinuousMap A B
301+
closed_range := by
302+
simp only [range_toContinuousMap, Set.setOf_and, Set.setOf_forall]
303+
refine .inter (isClosed_singleton.preimage (ContinuousMap.continuous_eval_const 1)) <|
304+
isClosed_iInter fun x ↦ isClosed_iInter fun y ↦ ?_
305+
exact isClosed_eq (ContinuousMap.continuous_eval_const (x * y)) <|
306+
.mul (ContinuousMap.continuous_eval_const x) (ContinuousMap.continuous_eval_const y)
330307
#align continuous_monoid_hom.closed_embedding_to_continuous_map ContinuousMonoidHom.closedEmbedding_toContinuousMap
331308
#align continuous_add_monoid_hom.closed_embedding_to_continuous_map ContinuousAddMonoidHom.closedEmbedding_toContinuousMap
332309

0 commit comments

Comments
 (0)