|
1 | | -(* mathcomp analysis (c) 2017 Inria and AIST. License: CeCILL-C. *) |
| 1 | +(* mathcomp analysis (c) 2025 Inria and AIST. License: CeCILL-C. *) |
2 | 2 | From HB Require Import structures. |
3 | 3 | From mathcomp Require Import all_ssreflect all_algebra finmap all_classical. |
4 | 4 | From mathcomp Require Export filter. |
@@ -40,6 +40,7 @@ From mathcomp Require Export filter. |
40 | 40 | (* x^' == set of neighbourhoods of x where x is *) |
41 | 41 | (* excluded (a "deleted neighborhood") *) |
42 | 42 | (* limit_point E == the set of limit points of E *) |
| 43 | +(* isolated A == the set of isolated points of A *) |
43 | 44 | (* dense S == the set (S : set T) is dense in T, with T of *) |
44 | 45 | (* type topologicalType *) |
45 | 46 | (* continuousType == type of continuous functions *) |
@@ -687,12 +688,43 @@ Proof. by rewrite limit_pointEnbhs; under eq_fun do rewrite meets_openr. Qed. |
687 | 688 | Lemma subset_limit_point E : limit_point E `<=` closure E. |
688 | 689 | Proof. by move=> t Et U tU; have [p [? ? ?]] := Et _ tU; exists p. Qed. |
689 | 690 |
|
690 | | -Lemma closure_limit_point E : closure E = E `|` limit_point E. |
| 691 | +Definition isolated (A : set T) (x : T) := |
| 692 | + x \in A /\ exists2 V, nbhs x V & V `&` A = [set x]. |
| 693 | + |
| 694 | +Lemma isolatedS (A : set T) : isolated A `<=` A. |
| 695 | +Proof. by move=> x [/set_mem]. Qed. |
| 696 | + |
| 697 | +Lemma disjoint_isolated_limit_point (A : set T) : |
| 698 | + [disjoint isolated A & limit_point A]. |
| 699 | +Proof. |
| 700 | +apply/disj_setPS => t [[At [V tV]]] /[swap]. |
| 701 | +move/(_ _ tV) => [x [xt Ax Vx]]. |
| 702 | +have /[swap] -> : [set x] `<=` V `&` A by move=> ? ->; split. |
| 703 | +move/subset_set1 => [/seteqP[/(_ _ erefl)//]|]. |
| 704 | +by move=> /seteqP[_ /(_ _ erefl)/=]; apply/eqP; rewrite eq_sym. |
| 705 | +Qed. |
| 706 | + |
| 707 | +Lemma closure_isolated_limit_point (A : set T) : |
| 708 | + closure A = isolated A `|` limit_point A. |
| 709 | +Proof. |
| 710 | +apply/seteqP; split=> [t At0|t [|]]. |
| 711 | +- rewrite /setU/= -implyNp => /not_andP[tA U /At0[x [Ux Ax]]|+ U tU]. |
| 712 | + by exists x; split => //; contra: tA => <-; exact/mem_set. |
| 713 | + move/forall2NP => /(_ U)[//|/seteqP/not_andP[|]]. |
| 714 | + by contra => H x [Ux Ax]; apply/eqP/negPn/negP => /H /(_ Ax). |
| 715 | + have [At tUA|At _] := pselect (A t). |
| 716 | + by absurd: tUA => _ ->; split => //; exact: nbhs_singleton. |
| 717 | + have [x [Ax Ux]] := At0 _ tU. |
| 718 | + by exists x; split => //; contra: At => <-. |
| 719 | +- by move/isolatedS; exact: subset_closure. |
| 720 | +- exact: subset_limit_point. |
| 721 | +Qed. |
| 722 | + |
| 723 | +Lemma __deprecated__closure_limit_point E : closure E = E `|` limit_point E. |
691 | 724 | Proof. |
692 | | -rewrite predeqE => t; split => [cEt|]; last first. |
| 725 | +apply/seteqP; split => [|x]; last first. |
693 | 726 | by case; [exact: subset_closure|exact: subset_limit_point]. |
694 | | -have [?|Et] := pselect (E t); [by left|right=> U tU; have [p []] := cEt _ tU]. |
695 | | -by exists p; split => //; apply/eqP => pt; apply: Et; rewrite -pt. |
| 727 | +by rewrite closure_isolated_limit_point => x [/isolatedS|]; [left|right]. |
696 | 728 | Qed. |
697 | 729 |
|
698 | 730 | Definition closed (D : set T) := closure D `<=` D. |
@@ -749,6 +781,9 @@ Lemma closed_closure (A : set T) : closed (closure A). |
749 | 781 | Proof. by move=> p clclAp B /nbhs_interior /clclAp [q [clAq /clAq]]. Qed. |
750 | 782 |
|
751 | 783 | End Closed. |
| 784 | +(*#[deprecated(since="mathcomp-analysis 1.15.0", note="use `closure_limit_point_isolated` instead")] |
| 785 | +Notation closure_limit_point := __deprecated__closure_limit_point (only parsing). |
| 786 | +*) |
752 | 787 |
|
753 | 788 | Lemma closed_comp {T U : topologicalType} (f : T -> U) (D : set U) : |
754 | 789 | {in ~` f @^-1` D, continuous f} -> closed D -> closed (f @^-1` D). |
|
0 commit comments