|
1 |
| -From Coq Require Import Program.Subset. |
2 |
| -From ZornsLemma Require Import EnsemblesTactics Powerset_facts. |
3 |
| -Require Export TopologicalSpaces Nets FilterLimits Homeomorphisms SeparatednessAxioms SubspaceTopology. |
4 |
| -Require Import FiltersAndNets ClassicalChoice. |
| 1 | +From Coq Require Import ClassicalChoice Program.Subset. |
| 2 | +From ZornsLemma Require Import EnsemblesTactics Finite_sets Powerset_facts. |
| 3 | +From Topology Require Export TopologicalSpaces Nets FilterLimits Homeomorphisms SeparatednessAxioms SubspaceTopology. |
| 4 | +From Topology Require Import FiltersAndNets. |
5 | 5 | Set Asymmetric Patterns.
|
6 | 6 |
|
7 | 7 | Definition compact (X:TopologicalSpace) :=
|
@@ -382,6 +382,47 @@ assert (x = x0).
|
382 | 382 | now subst.
|
383 | 383 | Qed.
|
384 | 384 |
|
| 385 | +(* Every closed subset of a compact space is compact, but avoid |
| 386 | + mentioning the subspace topology. *) |
| 387 | +Lemma closed_compact_ens (X : TopologicalSpace) (S : Ensemble X) : |
| 388 | + compact X -> closed S -> |
| 389 | + forall F : Family X, |
| 390 | + (forall U, In F U -> open U) -> |
| 391 | + Included S (FamilyUnion F) -> |
| 392 | + exists C, |
| 393 | + Finite C /\ Included C F /\ |
| 394 | + Included S (FamilyUnion C). |
| 395 | +Proof. |
| 396 | + intros X_compact S_closed cover_of_S cover_open cover_covers. |
| 397 | + specialize (X_compact (Union cover_of_S (Singleton (Complement S)))) |
| 398 | + as [fincover [Hfincover0 [Hfincover1 Hfincover2]]]. |
| 399 | + { intros. destruct H; auto. |
| 400 | + destruct H. auto. |
| 401 | + } |
| 402 | + { rewrite family_union_union. |
| 403 | + rewrite family_union_singleton. |
| 404 | + apply union_complement_included_l. |
| 405 | + assumption. |
| 406 | + } |
| 407 | + exists (Intersection cover_of_S fincover); repeat split. |
| 408 | + - apply Intersection_preserves_finite. |
| 409 | + assumption. |
| 410 | + - intros U HU. |
| 411 | + apply Intersection_decreases_l in HU. |
| 412 | + assumption. |
| 413 | + - intros x Hx. |
| 414 | + assert (In (FamilyUnion fincover) x). |
| 415 | + { rewrite Hfincover2. constructor. } |
| 416 | + destruct H. exists S0; auto. |
| 417 | + split; auto. |
| 418 | + apply Hfincover1 in H. |
| 419 | + destruct H. |
| 420 | + 2: { |
| 421 | + destruct H; contradiction. |
| 422 | + } |
| 423 | + assumption. |
| 424 | +Qed. |
| 425 | + |
385 | 426 | Lemma closed_compact: forall (X:TopologicalSpace) (S:Ensemble X),
|
386 | 427 | compact X -> closed S -> compact (SubspaceTopology S).
|
387 | 428 | Proof.
|
@@ -458,206 +499,105 @@ Proof.
|
458 | 499 | intros X HX_compact HX_Hausdorff.
|
459 | 500 | split.
|
460 | 501 | { now apply Hausdorff_impl_T1_sep. }
|
461 |
| -destruct (choice (fun (xy:{xy:X * X | |
462 |
| - let (x,y):=xy in x <> y}) |
463 |
| - (UV:Ensemble X * Ensemble X) => |
464 |
| - match xy with | exist (x,y) i => |
465 |
| - let (U,V):=UV in |
466 |
| - open U /\ open V /\ In U x /\ In V y /\ Intersection U V = Empty_set |
467 |
| - end)) as |
468 |
| - [choice_fun Hchoice_fun]. |
469 |
| -{ destruct x as [[x y] i]. |
470 |
| - destruct (HX_Hausdorff _ _ i) as [U [V]]. |
471 |
| - now exists (U, V). |
472 |
| -} |
473 |
| -pose (choice_fun_U := fun (x y:X) |
474 |
| - (Hineq:x<>y) => fst (choice_fun (exist _ (x,y) Hineq))). |
475 |
| -pose (choice_fun_V := fun (x y:X) |
476 |
| - (Hineq:x<>y) => snd (choice_fun (exist _ (x,y) Hineq))). |
477 |
| -assert (forall (x y:X) (Hineq:x<>y), |
478 |
| - open (choice_fun_U x y Hineq) /\ |
479 |
| - open (choice_fun_V x y Hineq) /\ |
480 |
| - In (choice_fun_U x y Hineq) x /\ |
481 |
| - In (choice_fun_V x y Hineq) y /\ |
482 |
| - Intersection (choice_fun_U x y Hineq) (choice_fun_V x y Hineq) = Empty_set) |
483 |
| - as HUV. |
484 |
| -{ intros. |
485 |
| - unfold choice_fun_U; unfold choice_fun_V. |
486 |
| - pose proof (Hchoice_fun (exist _ (x,y) Hineq)). |
487 |
| - now destruct (choice_fun (exist _ (x,y) Hineq)). |
488 |
| -} |
489 |
| -clearbody choice_fun_U choice_fun_V; clear choice_fun Hchoice_fun. |
490 |
| -intros x F HF_closed HFx. |
491 |
| -pose proof (closed_compact _ _ HX_compact HF_closed) as HF_compact. |
492 |
| -assert (forall y:X, In F y -> x <> y) as HF_neq_x. |
493 |
| -{ intros. congruence. |
| 502 | +intros x F HF HFx. |
| 503 | +pose (P := fun y => (fun p : Ensemble X * Ensemble X => |
| 504 | + open (fst p) /\ open (snd p) /\ |
| 505 | + Intersection (fst p) (snd p) = Empty_set /\ |
| 506 | + In (fst p) x /\ In (snd p) y)). |
| 507 | +pose (cover_of_F := fun V => exists U y, In (P y) (U, V)). |
| 508 | + |
| 509 | +assert (forall V, In cover_of_F V -> open V) as Hcover_open. |
| 510 | +{ intros V HV. |
| 511 | + destruct HV as [U [y []]]. |
| 512 | + intuition. |
494 | 513 | }
|
495 |
| -pose (cover := fun (y:SubspaceTopology F) => |
496 |
| - let (y,i):=y in inverse_image (subspace_inc F) |
497 |
| - (choice_fun_V x y (HF_neq_x y i))). |
498 |
| -destruct (compactness_on_indexed_covers _ _ cover HF_compact) |
499 |
| - as [subcover []]. |
500 |
| -{ destruct a as [y i]. |
501 |
| - apply subspace_inc_continuous, HUV. |
| 514 | +destruct (closed_compact_ens X F HX_compact HF cover_of_F) as |
| 515 | + [fincover [Hfincover0 [Hfincover1 Hfincover2]]]; auto. |
| 516 | +{ intros y Hy. |
| 517 | + specialize (HX_Hausdorff x y) as [U [V [HU [HV [HUx [HVx0]]]]]]. |
| 518 | + { intros ?. subst. contradiction. } |
| 519 | + exists V; auto. |
| 520 | + exists U, y. |
| 521 | + repeat split; auto. |
502 | 522 | }
|
503 |
| -{ apply Extensionality_Ensembles; split; red; intros y ?. |
504 |
| - { constructor. } |
505 |
| - exists y. |
506 |
| - destruct y as [y i]. |
507 |
| - simpl. |
508 |
| - constructor. |
509 |
| - simpl. |
510 |
| - apply HUV. |
511 |
| -} |
512 |
| -exists (IndexedIntersection |
513 |
| - (fun y:{y:SubspaceTopology F | In subcover y} => |
514 |
| - let (y,_):=y in let (y,i):=y in choice_fun_U x y (HF_neq_x y i))). |
515 |
| -exists (IndexedUnion |
516 |
| - (fun y:{y:SubspaceTopology F | In subcover y} => |
517 |
| - let (y,_):=y in let (y,i):=y in choice_fun_V x y (HF_neq_x y i))). |
518 |
| -repeat split. |
519 |
| -- apply open_finite_indexed_intersection. |
520 |
| - + now apply Finite_ens_type. |
521 |
| - + destruct a as [[y]]. |
522 |
| - apply HUV. |
523 |
| -- apply open_indexed_union. |
524 |
| - destruct a as [[y]]. |
525 |
| - apply HUV. |
526 |
| -- destruct a as [[y]]. |
527 |
| - apply HUV. |
528 |
| -- red; intros y ?. |
529 |
| - assert (In (IndexedUnion |
530 |
| - (fun y:{y:SubspaceTopology F | In subcover y} => |
531 |
| - cover (proj1_sig y))) (exist _ y H1)). |
532 |
| - { rewrite H0. constructor. } |
533 |
| - remember (exist (In F) y H1) as ysig. |
534 |
| - destruct H2 as [[y']]. |
535 |
| - rewrite Heqysig in H2; clear x0 Heqysig. |
536 |
| - simpl in H2. |
537 |
| - destruct y' as [y']. |
538 |
| - simpl in H2. |
539 |
| - destruct H2. |
540 |
| - simpl in H2. |
541 |
| - now exists (exist _ (exist _ y' i0) i). |
542 |
| -- apply Extensionality_Ensembles; split; auto with sets; red; intros y ?. |
543 |
| - destruct H1. |
544 |
| - destruct H1. |
545 |
| - destruct H2. |
546 |
| - pose proof (H1 a). |
547 |
| - destruct a as [[y]]. |
548 |
| - replace (@Empty_set X) with |
549 |
| - (Intersection (choice_fun_U x y (HF_neq_x y i)) |
550 |
| - (choice_fun_V x y (HF_neq_x y i))). |
551 |
| - + now constructor. |
552 |
| - + apply HUV. |
| 523 | + |
| 524 | +(* recover the corresponding sets *) |
| 525 | +destruct (finite_ens_pair_choice |
| 526 | + fincover (fun V U => exists y, In (P y) (U, V))) |
| 527 | + as [fincomplement [Hfincomplement0 [Hfincomplement1 Hfincomplement2]]]; |
| 528 | + auto. |
| 529 | +(* finish the proof *) |
| 530 | +exists (FamilyIntersection fincomplement), (FamilyUnion fincover). |
| 531 | +repeat split; auto using open_family_union. |
| 532 | +1: apply open_finite_family_intersection; auto. |
| 533 | +(* the other properties follow from [Hfincomplement2] and the def. of [P] *) |
| 534 | +1,2: intros V H0; specialize (Hfincomplement2 V H0) as [? [? [? []]]]; |
| 535 | + intuition. |
| 536 | + |
| 537 | +(* disjointness needs some work *) |
| 538 | +apply Extensionality_Ensembles; split; |
| 539 | + auto with sets; red; intros. |
| 540 | +destruct H. destruct H. destruct H0 as [S ? HS_fincover]. |
| 541 | +specialize (Hfincomplement1 S HS_fincover) |
| 542 | + as [U [? [y []]]]. |
| 543 | +intuition. simpl in *. |
| 544 | +specialize (H U H1). |
| 545 | +rewrite <- H3. |
| 546 | +split; assumption. |
553 | 547 | Qed.
|
554 | 548 |
|
555 | 549 | Lemma compact_Hausdorff_impl_normal_sep: forall X:TopologicalSpace,
|
556 | 550 | compact X -> Hausdorff X -> normal_sep X.
|
557 | 551 | Proof.
|
558 |
| -intros. |
559 |
| -pose proof (compact_Hausdorff_impl_T3_sep X H H0). |
560 |
| -destruct (choice (fun (xF:{p:X * Ensemble X | |
561 |
| - let (x,F):=p in closed F /\ ~ In F x}) |
562 |
| - (UV:Ensemble X * Ensemble X) => |
563 |
| - let (p,i):=xF in let (x,F):=p in |
564 |
| - let (U,V):=UV in |
565 |
| - open U /\ open V /\ In U x /\ Included F V /\ |
566 |
| - Intersection U V = Empty_set)) as [choice_fun]. |
567 |
| -{ destruct x as [[x F] []]. |
568 |
| - destruct H1. |
569 |
| - destruct (H4 x F H2 H3) as [U [V]]. |
570 |
| - now exists (U, V). |
571 |
| -} |
572 |
| -pose (choice_fun_U := fun (x:X) (F:Ensemble X) |
573 |
| - (HC:closed F) (Hni:~ In F x) => |
574 |
| - fst (choice_fun (exist _ (x,F) (conj HC Hni)))). |
575 |
| -pose (choice_fun_V := fun (x:X) (F:Ensemble X) |
576 |
| - (HC:closed F) (Hni:~ In F x) => |
577 |
| - snd (choice_fun (exist _ (x,F) (conj HC Hni)))). |
578 |
| -assert (forall (x:X) (F:Ensemble X) |
579 |
| - (HC:closed F) (Hni:~ In F x), |
580 |
| - open (choice_fun_U x F HC Hni) /\ |
581 |
| - open (choice_fun_V x F HC Hni) /\ |
582 |
| - In (choice_fun_U x F HC Hni) x /\ |
583 |
| - Included F (choice_fun_V x F HC Hni) /\ |
584 |
| - Intersection (choice_fun_U x F HC Hni) (choice_fun_V x F HC Hni) = |
585 |
| - Empty_set). |
586 |
| -{ intros. |
587 |
| - pose proof (H2 (exist _ (x,F) (conj HC Hni))). |
588 |
| - unfold choice_fun_U, choice_fun_V. |
589 |
| - now destruct (choice_fun (exist _ (x,F) (conj HC Hni))). |
590 |
| -} |
591 |
| -clearbody choice_fun_U choice_fun_V; clear choice_fun H2. |
592 |
| -split. |
593 |
| -{ apply H1. } |
594 |
| -intros. |
595 |
| -pose proof (closed_compact _ _ H H2). |
596 |
| -assert (forall x:X, In F x -> ~ In G x). |
597 |
| -{ intros. |
598 |
| - intro. |
599 |
| - absurd (In Empty_set x). |
600 |
| - - easy. |
601 |
| - - now rewrite <- H5. |
602 |
| -} |
| 552 | +intros X HX_compact HX_Hausdorff. |
| 553 | +apply compact_Hausdorff_impl_T3_sep in HX_Hausdorff as [HX_T1 HX_regular]; |
| 554 | + try assumption. |
| 555 | +split; try assumption. |
| 556 | +intros F G HF_closed HG_closed HFG_disjoint. |
| 557 | +pose (P := fun y => (fun p : Ensemble X * Ensemble X => |
| 558 | + open (fst p) /\ open (snd p) /\ |
| 559 | + Intersection (fst p) (snd p) = Empty_set /\ |
| 560 | + In (fst p) y /\ Included G (snd p))). |
| 561 | +pose (cover_of_F := fun U => exists V y, In (P y) (U, V)). |
603 | 562 |
|
604 |
| -pose (cover := fun x:SubspaceTopology F => |
605 |
| - let (x,i):=x in inverse_image (subspace_inc F) |
606 |
| - (choice_fun_U x G H4 (H7 x i))). |
607 |
| -destruct (compactness_on_indexed_covers _ _ cover H6) as [subcover []]. |
608 |
| -{ destruct a as [x i]. |
609 |
| - apply subspace_inc_continuous, H3. |
| 563 | +assert (forall U, In cover_of_F U -> open U) as Hcover_open. |
| 564 | +{ intros U HU. |
| 565 | + destruct HU as [V [y []]]. |
| 566 | + intuition. |
610 | 567 | }
|
611 |
| -{ apply Extensionality_Ensembles; split; red; intros. |
612 |
| - { constructor. } |
613 |
| - exists x. |
614 |
| - destruct x. |
615 |
| - simpl cover. |
616 |
| - constructor. |
617 |
| - simpl. |
618 |
| - apply H3. |
| 568 | +destruct (closed_compact_ens X F HX_compact HF_closed cover_of_F) as |
| 569 | + [fincover [Hfincover0 [Hfincover1 Hfincover2]]]; auto. |
| 570 | +{ intros y Hy. |
| 571 | + specialize (HX_regular y G) as [U [V [HU [HV [HUx [HVx0]]]]]]; |
| 572 | + auto. |
| 573 | + { intros ?. |
| 574 | + assert (In Empty_set y); try contradiction. |
| 575 | + rewrite <- HFG_disjoint; split; assumption. |
| 576 | + } |
| 577 | + exists U; auto. |
| 578 | + exists V, y. |
| 579 | + repeat split; auto. |
619 | 580 | }
|
620 |
| -exists (IndexedUnion |
621 |
| - (fun x:{x:SubspaceTopology F | In subcover x} => |
622 |
| - let (x,i):=proj1_sig x in choice_fun_U x G H4 (H7 x i))). |
623 |
| -exists (IndexedIntersection |
624 |
| - (fun x:{x:SubspaceTopology F | In subcover x} => |
625 |
| - let (x,i):=proj1_sig x in choice_fun_V x G H4 (H7 x i))). |
626 |
| -repeat split. |
627 |
| -- apply open_indexed_union. |
628 |
| - destruct a as [[x]]. |
629 |
| - simpl. |
630 |
| - apply H3. |
631 |
| -- apply open_finite_indexed_intersection. |
632 |
| - + apply Finite_ens_type; trivial. |
633 |
| - + destruct a as [[x]]. |
634 |
| - simpl. |
635 |
| - apply H3. |
636 |
| -- intros x ?. |
637 |
| - assert (In (@Full_set (SubspaceTopology F)) (exist _ x H10)) |
638 |
| - by constructor. |
639 |
| - rewrite <- H9 in H11. |
640 |
| - remember (exist _ x H10) as xsig. |
641 |
| - destruct H11. |
642 |
| - destruct a as [x']. |
643 |
| - destruct x' as [x']. |
644 |
| - rewrite Heqxsig in H11; clear x0 Heqxsig. |
645 |
| - simpl in H11. |
646 |
| - destruct H11. |
647 |
| - now exists (exist _ (exist _ x' i0) i). |
648 |
| -- destruct a as [x']. |
649 |
| - simpl. |
650 |
| - destruct x' as [x']. |
651 |
| - assert (Included G (choice_fun_V x' G H4 (H7 x' i0))) by apply H3. |
| 581 | + |
| 582 | +destruct (finite_ens_pair_choice |
| 583 | + fincover (fun U V => exists y, In (P y) (U, V))) |
| 584 | + as [fincomplement [Hfincomplement0 [Hfincomplement1 Hfincomplement2]]]; |
652 | 585 | auto.
|
653 |
| -- extensionality_ensembles. |
654 |
| - specialize H11 with a. |
655 |
| - destruct a as [[x']]. |
656 |
| - simpl in H11, H10. |
657 |
| - replace (@Empty_set X) with (Intersection |
658 |
| - (choice_fun_U x' G H4 (H7 x' i)) |
659 |
| - (choice_fun_V x' G H4 (H7 x' i))) by apply H3. |
660 |
| - now split. |
| 586 | +exists (FamilyUnion fincover), (FamilyIntersection fincomplement). |
| 587 | +repeat split; auto using open_family_union. |
| 588 | +1: apply open_finite_family_intersection; auto. |
| 589 | +1,2: intros V H0; specialize (Hfincomplement2 V H0) as [? [? [? []]]]; |
| 590 | + intuition. |
| 591 | + |
| 592 | +apply Extensionality_Ensembles; split; |
| 593 | + auto with sets; red; intros. |
| 594 | +destruct H. destruct H0. destruct H as [S ? HS_fincover]. |
| 595 | +specialize (Hfincomplement1 S HS_fincover) |
| 596 | + as [U [? [y []]]]. |
| 597 | +intuition. simpl in *. |
| 598 | +specialize (H0 U H1). |
| 599 | +rewrite <- H3. |
| 600 | +split; assumption. |
661 | 601 | Qed.
|
662 | 602 |
|
663 | 603 | Lemma topological_property_compact :
|
|
0 commit comments