Theory Topology_ZF_properties_3

(* 
    This file is a part of IsarMathLib - 
    a library of formalized mathematics written for Isabelle/Isar.

    Copyright (C) 2013 Daniel de la Concepcion

    This program is free software; Redistribution and use in source and binary forms, 
    with or without modification, are permitted provided that the following conditions are met:

   1. Redistributions of source code must retain the above copyright notice, 
   this list of conditions and the following disclaimer.
   2. Redistributions in binary form must reproduce the above copyright notice, 
   this list of conditions and the following disclaimer in the documentation and/or 
   other materials provided with the distribution.
   3. The name of the author may not be used to endorse or promote products 
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *)

section ‹Properties in Topology 3›

theory Topology_ZF_properties_3 imports Topology_ZF_7 Finite_ZF_1 Topology_ZF_1b Topology_ZF_9
  Topology_ZF_properties_2 FinOrd_ZF
begin

text‹This theory file deals with more topological properties and the
relation with the previous ones in other theory files.›

subsection‹More anti-properties›

text‹In this section we study more anti-properties.›

subsection‹First examples›

text‹A first example of an anti-compact space is the discrete space.›

lemma pow_compact_imp_finite:
  assumes "B{is compact in}Pow(A)"
  shows "Finite(B)"
proof-
  from assms have B:"BA" "MPow(Pow(A)). BM (NFinPow(M). BN)"
    unfolding IsCompact_def by auto
  from B(1) have "{{x}. xB}Pow(Pow(A))" "B{{x}. xB}" by auto
  with B(2) have "NFinPow({{x}. xB}). BN" by auto
  then obtain N where "NFinPow({{x}. xB})" "BN" by auto
  then have "Finite(N)" "N{{x}. xB}" "BN" unfolding FinPow_def by auto
  then have "Finite(N)" "bN. Finite(b)" "BN" by auto
  then have "BN" "Finite(N)" using Finite_Union[of "N"] by auto
  then show "Finite(B)" using subset_Finite by auto
qed
    
theorem pow_anti_compact:
  shows "Pow(A){is anti-compact}"
proof-
  {
    fix B assume as:"BPow(A)" "((Pow(A){restricted to}B)){is compact in}(Pow(A){restricted to}B)"
    then have sub:"BA" by auto
    then have "Pow(B)=Pow(A){restricted to}B" unfolding RestrictedTo_def by blast
    with as(2) have "(Pow(B)){is compact in}Pow(B)" by auto
    then have "B{is compact in}Pow(B)" by auto
    then have "Finite(B)" using pow_compact_imp_finite by auto
    then have "B{is in the spectrum of}(λT. (T){is compact in}T)" using compact_spectrum by auto
  }
  then show ?thesis unfolding IsAntiComp_def antiProperty_def by auto
qed

text‹In a previous file, @{file "Topology_ZF_5.thy"}, we proved that
the spectrum of the lindelöf property depends on the axiom of countable choice
on subsets of the power set of the natural number.›

text‹In this context, the examples depend on wether this choice principle holds or not.
This is the reason that the examples of anti-lindeloef topologies are left for the next
section.›

subsection‹Structural results›

text‹We first differenciate the spectrum of the lindeloef property depending
on some axiom of choice.›

lemma lindeloef_spec1:
  assumes "{the axiom of} nat {choice holds for subsets}(Pow(nat))"
  shows "(A {is in the spectrum of} (λT. ((T){is lindeloef in}T)))  (Anat)"
  using compactK_spectrum[OF assms Card_nat] unfolding IsLindeloef_def.

lemma lindeloef_spec2:
  assumes "¬({the axiom of} nat {choice holds for subsets}(Pow(nat)))"
  shows "(A {is in the spectrum of} (λT. ((T){is lindeloef in}T)))  Finite(A)"
proof
  assume "Finite(A)"
  then have A:"A{is in the spectrum of} (λT. ((T){is compact in}T))" using compact_spectrum by auto
  have s:"natcsucc(nat)" using le_imp_lesspoll[OF Card_csucc[OF Ord_nat]] lt_csucc[OF Ord_nat] le_iff by auto
  {
    fix T assume "T{is a topology}" "(T){is compact in}T"
    then have "(T){is compact of cardinal}nat{in}T" using Compact_is_card_nat by auto
    then have "(T){is compact of cardinal}csucc(nat){in}T" using s compact_greater_card Card_csucc[OF Ord_nat] by auto
    then have "(T){is lindeloef in}T" unfolding IsLindeloef_def by auto
  }
  then have "T. T{is a topology}  ((T){is compact in}T)  ((T){is lindeloef in}T)" by auto
  with A show "A {is in the spectrum of} (λT. ((T){is lindeloef in}T))" using P_imp_Q_spec_inv[
    where Q="λT. ((T){is compact in}T)" and P="λT. ((T){is lindeloef in}T)"] by auto
next
  assume A:"A {is in the spectrum of} (λT. ((T){is lindeloef in}T))"
  then have reg:"T. T{is a topology}TA  ((T){is compact of cardinal} csucc(nat){in}T)" using Spec_def
    unfolding IsLindeloef_def by auto
  then have "A{is compact of cardinal} csucc(nat) {in} Pow(A)" using Pow_is_top[of "A"] by auto
  then have "MPow(Pow(A)). AM  (NPow(M). AN  Ncsucc(nat))" unfolding IsCompactOfCard_def by auto
  moreover
  have "{{x}. xA}Pow(Pow(A))" by auto
  moreover
  have "A={{x}. xA}" by auto
  ultimately have "NPow({{x}. xA}). AN  Ncsucc(nat)" by auto
  then obtain N where "NPow({{x}. xA})" "AN" "Ncsucc(nat)" by auto
  then have "N{{x}. xA}" "Ncsucc(nat)" "AN" using FinPow_def by auto
  {
    fix t
    assume "t{{x}. xA}"
    then obtain x where "xA""t={x}" by auto
    with AN have "xN" by auto
    then obtain B where "BN""xB" by auto
    with N{{x}. xA} have "B={x}" by auto
    with t={x}BN have "tN" by auto 
  }
  with N{{x}. xA} have "N={{x}. xA}" by auto
  let ?B="{x,{x}. xA}"
  from N={{x}. xA} have "?B:A N" unfolding Pi_def function_def by auto
  with N={{x}. xA} have "?B:inj(A,N)" unfolding inj_def using apply_equality by auto
  then have "AN" using lepoll_def by auto
  with Ncsucc(nat) have "Acsucc(nat)" using lesspoll_trans1 by auto
  then have "Anat" using Card_less_csucc_eq_le Card_nat by auto
  then have "AnatAnat" using lepoll_iff_leqpoll by auto moreover
  {
    assume "Anat"
    then have "natA" using eqpoll_sym by auto
    with A have "nat {is in the spectrum of} (λT. ((T){is lindeloef in}T))" using equipollent_spect[
      where P="(λT. ((T){is lindeloef in}T))"] by auto
    moreover
    have "Pow(nat){is a topology}" using Pow_is_top by auto
    moreover
    have "Pow(nat)=nat" by auto
    then have "Pow(nat)nat" using eqpoll_refl by auto
    ultimately
    have "nat {is compact of cardinal} csucc(nat){in}Pow(nat)" using Spec_def unfolding IsLindeloef_def by auto
    then have "False" using Q_disc_comp_csuccQ_eq_Q_choice_csuccQ[OF InfCard_nat] assms by auto
  }
  ultimately have "Anat" by auto
  then show "Finite(A)" using lesspoll_nat_is_Finite by auto
qed

text‹If the axiom of countable choice on subsets of the pow of the natural numbers
doesn't hold, then anti-lindeloef spaces are anti-compact.›

theorem(in topology0) no_choice_imp_anti_lindeloef_is_anti_comp:
  assumes "¬({the axiom of} nat {choice holds for subsets}(Pow(nat)) )" "T{is anti-lindeloef}"
  shows "T{is anti-compact}"
proof-
  have s:"natcsucc(nat)" using le_imp_lesspoll[OF Card_csucc[OF Ord_nat]] lt_csucc[OF Ord_nat] le_iff by auto
  {
    fix T assume "T{is a topology}" "(T){is compact in}T"
    then have "(T){is compact of cardinal}nat{in}T" using Compact_is_card_nat by auto
    then have "(T){is compact of cardinal}csucc(nat){in}T" using s compact_greater_card Card_csucc[OF Ord_nat] by auto
    then have "(T){is lindeloef in}T" unfolding IsLindeloef_def by auto
  }
  then have "T. T{is a topology}  ((T){is compact in}T)  ((T){is lindeloef in}T)" by auto
  from eq_spect_rev_imp_anti[OF this] lindeloef_spec2[OF assms(1)] compact_spectrum
    show ?thesis using assms(2) unfolding IsAntiLin_def IsAntiComp_def by auto
qed

text‹If the axiom of countable choice holds for subsets of the power set of the
natural numbers, then there exists a topological space that is anti-lindeloef
but no anti-compact.›

theorem no_choice_imp_anti_lindeloef_is_anti_comp:
  assumes "({the axiom of} nat {choice holds for subsets}(Pow(nat)))"
  shows "({one-point compactification of}Pow(nat)){is anti-lindeloef}"
proof-
  have t:"({one-point compactification of}Pow(nat))={nat}nat" using topology0.op_compact_total
    unfolding topology0_def using Pow_is_top by auto
  have "{nat}1" using singleton_eqpoll_1 by auto
  then have "{nat}nat" using n_lesspoll_nat eq_lesspoll_trans by auto moreover
  have s:"natcsucc(nat)" using lt_Card_imp_lesspoll[OF Card_csucc] lt_csucc[OF Ord_nat] by auto
  ultimately have "{nat}csucc(nat)" using lesspoll_trans by blast
  with s have "{nat}natcsucc(nat)" using less_less_imp_un_less[OF _ _ InfCard_csucc[OF InfCard_nat]]
    by auto
  then have "{nat}natnat" using Card_less_csucc_eq_le[OF Card_nat] by auto
  with t have r:"({one-point compactification of}Pow(nat))nat" by auto
  {
    fix A assume A:"APow(({one-point compactification of}Pow(nat)))" "((({one-point compactification of}Pow(nat)){restricted to}A)){is lindeloef in}(({one-point compactification of}Pow(nat)){restricted to}A)"
    from A(1) have "A({one-point compactification of}Pow(nat))" by auto
    with r have "Anat" using subset_imp_lepoll lepoll_trans by blast
    then have "A{is in the spectrum of}(λT. ((T){is lindeloef in}T))" using assms
      lindeloef_spec1 by auto
  }
  then show ?thesis unfolding IsAntiLin_def antiProperty_def by auto
qed

theorem op_comp_pow_nat_no_anti_comp:
  shows "¬(({one-point compactification of}Pow(nat)){is anti-compact})"
proof
  let ?T="({one-point compactification of}Pow(nat)){restricted to}({nat}  nat)"
  assume antiComp:"({one-point compactification of}Pow(nat)){is anti-compact}"
  have "({nat}  nat){is compact in}({one-point compactification of}Pow(nat))"
    using topology0.compact_op[of "Pow(nat)"] Pow_is_top[of "nat"] unfolding topology0_def
    by auto
  then have "({nat}  nat){is compact in}?T" using compact_imp_compact_subspace Compact_is_card_nat by auto
  moreover have "?T=(({one-point compactification of}Pow(nat)))({nat}  nat)" unfolding RestrictedTo_def by auto
  then have "?T={nat}  nat" using topology0.op_compact_total unfolding topology0_def
    using Pow_is_top by auto
  ultimately have "(?T){is compact in}?T" by auto
  with antiComp have "({nat}  nat){is in the spectrum of}(λT. (T){is compact in}T)" unfolding IsAntiComp_def
    antiProperty_def using topology0.op_compact_total unfolding topology0_def using Pow_is_top by auto
  then have "Finite({nat}  nat)" using compact_spectrum by auto
  then have "Finite(nat)" using subset_Finite by auto
  then show "False" using nat_not_Finite by auto
qed

text‹In coclusion, we reached another equivalence of this choice principle.›

text‹The axiom of countable choice holds for subsets of the power set of the
natural numbers if and only if there exists a topological space which is anti-lindeloef
but not anti-compact; this space can be chosen as the one-point compactification
of the discrete topology on $\mathbb{N}$.›

theorem acc_pow_nat_equiv1:
  shows "({the axiom of} nat {choice holds for subsets}(Pow(nat)))  (({one-point compactification of}Pow(nat)){is anti-lindeloef})"
  using op_comp_pow_nat_no_anti_comp no_choice_imp_anti_lindeloef_is_anti_comp
  topology0.no_choice_imp_anti_lindeloef_is_anti_comp topology0.op_comp_is_top
  Pow_is_top[of "nat"] unfolding topology0_def by auto

theorem acc_pow_nat_equiv2:
  shows "({the axiom of} nat {choice holds for subsets}(Pow(nat)))  (T. T{is a topology}
   (T{is anti-lindeloef})  ¬(T{is anti-compact}))"
  using op_comp_pow_nat_no_anti_comp no_choice_imp_anti_lindeloef_is_anti_comp
  topology0.no_choice_imp_anti_lindeloef_is_anti_comp topology0.op_comp_is_top
  Pow_is_top[of "nat"] unfolding topology0_def by auto

text‹In the file @{file "Topology_ZF_properties.thy"}, it is proven that $\mathbb{N}$ is
lindeloef if and only if the axiom of countable choice holds for subsets of $Pow(\mathbb{N})$.
Now we check that, in ZF, this space is always anti-lindeloef.›

theorem nat_anti_lindeloef:
  shows "Pow(nat){is anti-lindeloef}"
proof-
  {
   fix A assume A:"APow(Pow(nat))" "((Pow(nat){restricted to}A)){is lindeloef in}(Pow(nat){restricted to}A)"
    from A(1) have "Anat" by auto
    then have "Pow(nat){restricted to}A=Pow(A)" unfolding RestrictedTo_def by blast
    with A(2) have lin:"A{is lindeloef in}Pow(A)" using subset_imp_lepoll by auto
    {
      fix T assume T:"T{is a topology}" "TA"
      then have "AT" using eqpoll_sym by auto
      then obtain f where f:"fbij(A,T)" unfolding eqpoll_def by auto
      then have "fsurj(A,T)" unfolding bij_def by auto
      moreover then have "IsContinuous(Pow(A),T,f)" unfolding IsContinuous_def
        surj_def using func1_1_L3 by blast
      moreover have "two_top_spaces0(Pow(A),T,f)" unfolding two_top_spaces0_def
        using f T(1) Pow_is_top unfolding bij_def inj_def by auto
      ultimately have "(T){is lindeloef in}T" using two_top_spaces0.cont_image_com
        lin unfolding IsLindeloef_def by auto
    }
    then have "A{is in the spectrum of} (λT. ((T){is lindeloef in}T))" unfolding Spec_def by auto
  }
  then show ?thesis unfolding IsAntiLin_def antiProperty_def by auto   
qed

text‹This result is interesting because depending on the different axioms we add
to ZF, it means two different things: 
\begin{itemize}
\item Every subspace of $\mathbb{N}$ is Lindeloef.
\item Only the compact subspaces of $\mathbb{N}$ are Lindeloef.
\end{itemize}
›

text‹Now, we could wonder if the class of compact spaces and the class of lindeloef spaces being equal
is consistent in ZF. Let's find a topological space which is lindeloef and no compact
without assuming any axiom of choice or any negation of one. This will prove
that the class of lindeloef spaces and the class of compact spaces cannot be equal
in any model of ZF.›

theorem lord_nat:
  shows "(LOrdTopology nat Le)={LeftRayX(nat,Le,n). nnat} {nat} {0}"
proof-
  {
    fix U assume U:"U{LeftRayX(nat,Le,n). nnat} {nat}" "U0"
    {
      assume "natU"
      with U have "U=nat" unfolding LeftRayX_def by auto
      then have "U{LeftRayX(nat,Le,n). nnat} {nat}{0}" by auto
    }
    moreover
    {
      assume "natU"
      with U have UU:"U{LeftRayX(nat,Le,n). nnat}{0}" by auto
      {
        assume A:"i. inat U LeftRayX(nat,Le,i)"
        let ?M="μ i. inat  U LeftRayX(nat,Le,i)"
        from A have M:"?Mnat" "U LeftRayX(nat,Le,?M)" using LeastI[OF _ nat_into_Ord, where P="λi. inat  U LeftRayX(nat,Le,i)"]
          by auto
        {
          fix y assume V:"yLeftRayX(nat,Le,?M)"
          then have y:"ynat" unfolding LeftRayX_def by auto
          {
            assume "VU. yV"
            then have "m{nnat. LeftRayX(nat,Le,n)U}. yLeftRayX(nat,Le,m)" using UU by auto
            then have "m{nnat. LeftRayX(nat,Le,n)U}. y,mLey=m" unfolding LeftRayX_def using y
              by auto
            then have RR:"m{nnat. LeftRayX(nat,Le,n)U}. m,yLe" using Le_directs_nat(1) y unfolding IsLinOrder_def IsTotal_def by blast
            {
              fix rr V assume "rrU"
              then obtain V where V:"VU" "rrV" by auto
              with UU obtain m where m:"V=LeftRayX(nat,Le,m)" "mnat" by auto
              with V(1) RR have a:"m,yLe" by auto
              from V(2) m(1) have b:"rr,mLe" "rrnat-{m}" unfolding LeftRayX_def by auto
              from a b(1) have "rr,yLe" using Le_directs_nat(1) unfolding IsLinOrder_def
                trans_def by blast moreover
              {
                assume "rr=y"
                with a b have "False" using Le_directs_nat(1) unfolding IsLinOrder_def antisym_def by blast
              }
              ultimately have "rrLeftRayX(nat,Le,y)" unfolding LeftRayX_def using b(2) by auto
            }
            then have "ULeftRayX(nat,Le,y)" by auto
            with y M(1) have "?M,yLe" using Least_le by auto
            with V have "False" unfolding LeftRayX_def using Le_directs_nat(1) unfolding IsLinOrder_def antisym_def by blast
          }
          then have "yU" by auto
        }
        then have "LeftRayX(nat,Le,?M)U" by auto
        with M(2) have "U=LeftRayX(nat,Le,?M)" by auto
        with M(1) have "U{LeftRayX(nat,Le,n). nnat} {nat}" by auto
      }
      moreover
      {
        assume "¬(i. i  nat  U  LeftRayX(nat, Le, i))"
        then have A:"i. inat  ¬(U  LeftRayX(nat, Le, i))" by auto
        {
          fix i assume i:"inat"
          with A have AA:"¬(U  LeftRayX(nat, Le, i))" by auto
          {
            assume "iU"
            then have "VU. iV" by auto
            then have "m{nnat. LeftRayX(nat, Le, n)U}. iLeftRayX(nat, Le, m)" by auto
            with i have "m{nnat. LeftRayX(nat, Le, n)U}. i,mLei=m" unfolding LeftRayX_def by auto
            with i have "m{nnat. LeftRayX(nat, Le, n)U}. ¬(im)i=m" unfolding Le_def by auto
            then have "m{nnat. LeftRayX(nat, Le, n)U}. m<im=i" using not_le_iff_lt[OF nat_into_Ord[OF i]
              nat_into_Ord] by auto
            then have M:"m{nnat. LeftRayX(nat, Le, n)U}. mi" using le_iff nat_into_Ord[OF i] by auto
            {
              fix s assume "sU"
              then obtain n where n:"nnat" "sLeftRayX(nat, Le, n)" "LeftRayX(nat, Le, n)U"
                using UU by auto
              with M have ni:"ni" by auto
              from n(2) have sn:"sn" "sn" unfolding LeftRayX_def by auto
              then have "si" "si" using le_trans[OF sn(1) ni] le_anti_sym[OF sn(1)] ni by auto
              then have "sLeftRayX(nat, Le, i)" using i le_in_nat unfolding LeftRayX_def by auto
            }
            with AA have "False" by auto
          }
          then have "iU" by auto
        }
        then have "natU" by auto
        then have "U=nat" using UU unfolding LeftRayX_def by auto
        then have "U{LeftRayX(nat,Le,n). nnat} {nat} {0}" by auto
      }
      ultimately have "U{LeftRayX(nat,Le,n). nnat} {nat} {0}" by auto
    }
    ultimately have "U{LeftRayX(nat,Le,n). nnat} {nat} {0}" by auto
  }
  moreover
  {
    fix U assume "U=0"
    then have "U{LeftRayX(nat,Le,n). nnat} {nat} {0}" by auto
  }
  ultimately have "U. U{LeftRayX(nat,Le,n). nnat} {nat}  U{LeftRayX(nat,Le,n). nnat} {nat} {0}"
    by auto
  then have "{LeftRayX(nat,Le,n). nnat} {nat} {0}={U. UPow({LeftRayX(nat,Le,n). nnat} {nat})}" by blast
  then show ?thesis using LOrdtopology_ROrdtopology_are_topologies(2)[OF Le_directs_nat(1)]
    unfolding IsAbaseFor_def by auto
qed

lemma countable_lord_nat:
  shows "{LeftRayX(nat,Le,n). nnat} {nat} {0}csucc(nat)"
proof-
  {
    fix e
    have "{e}1" using singleton_eqpoll_1 by auto
    then have "{e}nat" using n_lesspoll_nat eq_lesspoll_trans by auto moreover
    have s:"natcsucc(nat)" using lt_Card_imp_lesspoll[OF Card_csucc] lt_csucc[OF Ord_nat] by auto
    ultimately have "{e}csucc(nat)" using lesspoll_trans by blast
  }
  then have "{nat} {0}csucc(nat)" using less_less_imp_un_less[OF _ _ InfCard_csucc[OF InfCard_nat], of "{nat}" "{0}"]
    by auto moreover
  let ?FF="{n,LeftRayX(nat,Le,n). nnat}"
  have ff:"?FF:nat{LeftRayX(nat,Le,n). nnat}" unfolding Pi_def domain_def function_def by auto
  then have su:"?FFsurj(nat,{LeftRayX(nat,Le,n). nnat})" unfolding surj_def using apply_equality[
    OF _ ff] by auto
  then have "{LeftRayX(nat,Le,n). nnat}nat" using surj_fun_inv_2[OF su lepoll_refl[of "nat"]] Ord_nat 
    by auto
  then have "{LeftRayX(nat,Le,n). nnat}csucc(nat)" using Card_less_csucc_eq_le[OF Card_nat] by auto
  ultimately have "{LeftRayX(nat, Le, n) . n  nat}  ({nat}  {0})  csucc(nat)" using less_less_imp_un_less[OF _ _ InfCard_csucc[OF InfCard_nat]] by auto
  moreover have "{LeftRayX(nat, Le, n) . n  nat}  ({nat}  {0})={LeftRayX(nat, Le, n) . n  nat}  {nat}  {0}" by auto
  ultimately show ?thesis by auto
qed

corollary lindelof_lord_nat:
  shows "nat{is lindeloef in}(LOrdTopology nat Le)"
  unfolding IsLindeloef_def using countable_lord_nat lord_nat card_top_comp[OF Card_csucc[OF Ord_nat]]
    union_lordtopology_rordtopology(1)[OF Le_directs_nat(1)] by auto
  
theorem not_comp_lord_nat:
  shows "¬(nat{is compact in}(LOrdTopology nat Le))"
proof
  assume "nat{is compact in}(LOrdTopology nat Le)"
  with lord_nat have "nat{is compact in}({LeftRayX(nat,Le,n). nnat} {nat} {0})" by auto
  then have "MPow({LeftRayX(nat,Le,n). nnat} {nat} {0}). natM  (NFinPow(M). natN)"
    unfolding IsCompact_def by auto moreover
  {
    fix n assume n:"nnat"
    then have "n<succ(n)" by auto
    then have "n,succ(n)Le" "nsucc(n)" using n nat_succ_iff by auto
    then have "nLeftRayX(nat,Le,succ(n))" unfolding LeftRayX_def using n by auto
    then have "n({LeftRayX(nat,Le,n). nnat})" using n nat_succ_iff by auto
  }
  ultimately have "NFinPow({LeftRayX(nat,Le,n). nnat}). natN" by blast
  then obtain N where "NFinPow({LeftRayX(nat,Le,n). nnat})" "natN" by auto
  then have N:"N{LeftRayX(nat,Le,n). nnat}" "Finite(N)" "natN" unfolding FinPow_def by auto
  let ?F="{n,LeftRayX(nat,Le,n). n{mnat. LeftRayX(nat,Le,m)N}}"
  have ff:"?F:{mnat. LeftRayX(nat,Le,m)N}  N" unfolding Pi_def function_def by auto
  then have "?Fsurj({mnat. LeftRayX(nat,Le,m)N}, N)" unfolding surj_def using N(1) apply_equality[
    OF _ ff] by blast moreover
  {
    fix x y assume xyF:"x{mnat. LeftRayX(nat,Le,m)N}" "y{mnat. LeftRayX(nat,Le,m)N}" "?F`x=?F`y"
    then have "?F`x=LeftRayX(nat,Le,x)" "?F`y=LeftRayX(nat,Le,y)" using apply_equality[
      OF _ ff] by auto
    with xyF(3) have lxy:"LeftRayX(nat,Le,x)=LeftRayX(nat,Le,y)" by auto
    {
      fix r assume "r<x"
      then have "rx" "rx" using leI by auto
      with xyF(1) have "rLeftRayX(nat,Le,x)" unfolding LeftRayX_def using le_in_nat by auto
      then have "rLeftRayX(nat,Le,y)" using lxy by auto
      then have "ry" "ry" unfolding LeftRayX_def by auto
      then have "r<y" using le_iff by auto
    }
    then have "r. r<x  r<y" by auto
    then have r:"¬(y<x)" by auto
    {
      fix r assume "r<y"
      then have "ry" "ry" using leI by auto
      with xyF(2) have "rLeftRayX(nat,Le,y)" unfolding LeftRayX_def using le_in_nat by auto
      then have "rLeftRayX(nat,Le,x)" using lxy by auto
      then have "rx" "rx" unfolding LeftRayX_def by auto
      then have "r<x" using le_iff by auto
    }
    then have "¬(x<y)" by auto
    with r have "x=y" using not_lt_iff_le[OF nat_into_Ord nat_into_Ord] xyF(1,2)
      le_anti_sym by auto
  }
  then have "?Finj({mnat. LeftRayX(nat,Le,m)N}, N)" unfolding inj_def using ff by auto
  ultimately have "?Fbij({mnat. LeftRayX(nat,Le,m)N}, N)" unfolding bij_def by auto
  then have "{mnat. LeftRayX(nat,Le,m)N} N" unfolding eqpoll_def by auto
  with N(2) have fin:"Finite({mnat. LeftRayX(nat,Le,m)N})" using lepoll_Finite eqpoll_imp_lepoll
    by auto
  from N(3) have "N0" by auto
  then have nE:"{mnat. LeftRayX(nat,Le,m)N}0" using N(1) by auto
  let ?M="Maximum(Le,{mnat. LeftRayX(nat,Le,m)N})"
  have M:"?Mnat" "LeftRayX(nat,Le,?M)N" "𝔵{mnat. LeftRayX(nat,Le,m)N}. 𝔵,?MLe" using fin linord_max_props(1,3)[OF Le_directs_nat(1) _ nE]
    unfolding FinPow_def by auto
  {
    fix V 𝔵 assume V:"VN" "𝔵V"
    then obtain m where m:"V=LeftRayX(nat,Le,m)" "LeftRayX(nat,Le,m)N" "mnat" using N(1) by auto
    with V(2) have xx:"𝔵,mLe" "𝔵m" unfolding LeftRayX_def by auto
    from m(2,3) have "m{mnat. LeftRayX(nat,Le,m)N}" by auto
    then have mM:"m,?MLe" using M(3) by auto
    with xx(1) have "𝔵,?MLe" using le_trans unfolding Le_def by auto
    moreover
    {
      assume "𝔵=?M"
      with xx mM have "False" using le_anti_sym by auto
    }
    ultimately have "𝔵LeftRayX(nat,Le,?M)" unfolding LeftRayX_def by auto
  }
  then have "NLeftRayX(nat,Le,?M)" by auto
  with M(2) have "N=LeftRayX(nat,Le,?M)" by auto
  with N(3) have "natLeftRayX(nat,Le,?M)" by auto
  moreover from M(1) have "succ(?M)nat" using nat_succI by auto
  ultimately have "succ(?M)LeftRayX(nat,Le,?M)" by auto
  then have "succ(?M),?MLe" unfolding LeftRayX_def by blast
  then show "False" by auto
qed
      
subsection‹More Separation properties›

text‹In this section we study more separation properties.›

subsection‹Definitions›

text‹We start with a property that has already appeared in
@{file "Topology_ZF_1b.thy"}. A KC-space is a space where
compact sets are closed.›

definition
  IsKC ("_ {is KC}") where
  "T{is KC}  APow(T). A{is compact in}T  A{is closed in}T"

text‹Another type of space is an US-space; those where sequences
have at most one limit.›

definition
  IsUS ("_{is US}") where
  "T{is US}  N x y. (N:natT)  NetConvTop(N,Le,x,T)  NetConvTop(N,Le,y,T)  y=x"

subsection‹First results›

text‹The proof in @{file "Topology_ZF_1b.thy"} shows that a Hausdorff space
is KC.›

corollary(in topology0) T2_imp_KC:
  assumes "T{is T2}"
  shows "T{is KC}"
proof-
  {
    fix A assume "A{is compact in}T"
    then have "A{is closed in}T" using in_t2_compact_is_cl assms by auto
  }
  then show ?thesis unfolding IsKC_def by auto
qed

text‹From the spectrum of compactness, it follows that any KC-space
is $T_1$.›

lemma(in topology0) KC_imp_T1:
  assumes "T{is KC}"
  shows "T{is T1}"
proof-
  {
    fix x assume A:"xT"
    have "Finite({x})" by auto
    then have "{x}{is in the spectrum of}(λT. (T){is compact in}T)"
      using compact_spectrum by auto moreover
    have "(T{restricted to}{x}){is a topology}" using Top_1_L4 by auto
    moreover have "(T{restricted to}{x})={x}" using A unfolding RestrictedTo_def by auto
    ultimately have com:"{x}{is compact in}(T{restricted to}{x})" unfolding Spec_def
      by auto
    then have "{x}{is compact in}T" using compact_subspace_imp_compact A by auto
    then have "{x}{is closed in}T" using assms unfolding IsKC_def using A by auto
  }
  then show ?thesis using T1_iff_singleton_closed by auto
qed

text‹Even more, if a space is KC, then it is US. We already know that
for $T_2$ spaces, any net or filter has at most one limit; and that
this property is equivalent with $T_2$. The US property is much weaker
because we don't know what happends with other nets that are not directed by
the order on the natural numbers.›

theorem(in topology0) KC_imp_US:
  assumes "T{is KC}"
  shows "T{is US}"
proof-
  {
    fix N x y  assume A:"N:natT" "N,LeN x" "N,LeN y" "xy"
    have dir:"Le directs nat" using Le_directs_nat by auto moreover
    from A(1) have dom:"domain(N)=nat" using func1_1_L1 by auto
    moreover note A(1) ultimately have Net:"N,Le{is a net on}T" unfolding IsNet_def
      by auto
    from A(3) have y:"yT" unfolding NetConverges_def[OF Net] by auto
    from A(2) have x:"xT" unfolding NetConverges_def[OF Net] by auto
    from A(2) have o1:"UPow(T). xint(U)  (rnat. snat. r,sLe  N`sU)" unfolding NetConverges_def[OF Net]
       using dom by auto
    {
      assume B:"nnat. mnat. n,mLe  N`m=y"
      have "{y}{is closed in}T" using y T1_iff_singleton_closed KC_imp_T1 assms by auto
      then have o2:"T-{y}T" unfolding IsClosed_def by auto
      then have "int(T-{y})=T-{y}" using Top_2_L3 by auto
      with A(4) x have o3:"xint(T-{y})" by auto
      from o2 have "T-{y}Pow(T)" by auto
      with o1 o3 obtain r where r:"rnat" "snat. r,sLe  N`sT-{y}" by auto
      from B obtain n where n:"nnat" "mnat. n,mLe  N`m=y" by auto
      from dir r(1) n(1) obtain z where "r,zLe""n,zLe""znat" unfolding IsDirectedSet_def by auto
      with r(2) n(2) have "N`zT-{y}" "N`z=y" by auto
      then have "False" by auto
    }
    then have reg:"nnat. mnat. N`my  n,mLe" by auto
    let ?NN="{n,N`(μ i. N`iy  n,iLe). nnat}"
    {
      fix x z assume A1:"x, z  ?NN"
      {
        fix y' assume A2:"x,y'?NN"
        with A1 have "z=y'" by auto
      }
      then have "y'. x,y'?NN  z=y'" by auto
    }
    then have "x z. x, z  ?NN  (y'. x,y'?NN  z=y')" by auto
    moreover
    {
      fix n assume as:"nnat"
      with reg obtain m where "N`my  n,mLe" "mnat" by auto
      then have LI:"N`(μ i. N`iy  n,iLe)y" "n,μ i. N`iy  n,iLeLe" using LeastI[of "λm. N`my  n,mLe" "m"]
        nat_into_Ord[of "m"] by auto
      then have "(μ i. N`iy  n,iLe)nat" by auto
      then have "N`(μ i. N`iy  n,iLe)T" using apply_type[OF A(1)] by auto
      with as have "n,N`(μ i. N`iy  n,iLe)nat×T" by auto
    }
    then have "?NNPow(nat×T)" by auto
    ultimately have NFun:"?NN:natT" unfolding Pi_def function_def domain_def by auto
    {
      fix n assume as:"nnat"
      with reg obtain m where "N`my  n,mLe" "mnat" by auto
      then have LI:"N`(μ i. N`iy  n,iLe)y" "n,μ i. N`iy  n,iLeLe" using LeastI[of "λm. N`my  n,mLe" "m"]
        nat_into_Ord[of "m"] by auto
      then have "?NN`ny" using apply_equality[OF _ NFun] by auto
    }
    then have noy:"nnat. ?NN`ny" by auto
    have dom2:"domain(?NN)=nat" by auto
    then have net2:"?NN,Le{is a net on}T" unfolding IsNet_def using NFun dir by auto
    {
      fix U assume "UPow(T)" "xint(U)"
      then have "(rnat. snat. r,sLe  N`sU)" using o1 by auto
      then obtain r where r_def:"rnat" "snat. r,sLe  N`sU" by auto
      {
        fix s assume AA:"r,sLe"
        with reg obtain m where "N`my" "s,mLe" by auto
        then have "s,μ i. N`iy  s,iLeLe" using LeastI[of "λm. N`my  s,mLe" "m"]
          nat_into_Ord by auto
        with AA have "r,μ i. N`iy  s,iLeLe" using le_trans by auto
        with r_def(2) have "N`(μ i. N`iy  s,iLe)U" by blast
        then have "?NN`sU" using apply_equality[OF _ NFun] AA by auto
      }
      then have "snat. r,sLe  ?NN`sU" by auto
      with r_def(1) have "rnat. snat. r,sLe  ?NN`sU" by auto
    }
    then have conv2:"?NN,LeN x" unfolding NetConverges_def[OF net2] using x dom2 by auto
    let ?A="{x}?NN``nat"
    {
      fix M assume Acov:"?AM" "MT"
      then have "xM" by auto
      then obtain U where U:"xU" "UM" by auto
      with Acov(2) have UT:"UT" by auto
      then have "U=int(U)" using Top_2_L3 by auto
      with U(1) have "xint(U)" by auto
      with conv2 obtain r where rr:"rnat" "snat. r,sLe  ?NN`sU"
        unfolding NetConverges_def[OF net2] using dom2 UT by auto
      have NresFun:"restrict(?NN,{nnat. n,rLe}):{nnat. n,rLe}T" using restrict_fun
        [OF NFun, of "{nnat. n,rLe}"] by auto
      then have "restrict(?NN,{nnat. n,rLe})surj({nnat. n,rLe},range(restrict(?NN,{nnat. n,rLe})))"
        using fun_is_surj by auto moreover
      have "{nnat. n,rLe}nat" by auto
      then have "{nnat. n,rLe}nat" using subset_imp_lepoll by auto
      ultimately have "range(restrict(?NN,{nnat. n,rLe})){nnat. n,rLe}" using surj_fun_inv_2 by auto
      moreover
      have "{nnat. n,0Le}={0}" by auto
      then have "Finite({nnat. n,0Le})" by auto moreover
      {
        fix j assume as:"jnat" "Finite({nnat. n,jLe})"
        {
          fix t assume "t{nnat. n,succ(j)Le}"
          then have "tnat" "t,succ(j)Le" by auto
          then have "tsucc(j)" by auto
          then have "tsucc(j)" using le_imp_subset by auto
          then have "tj {j}" using succ_explained by auto
          then have "jttj" by auto
          then have "jttj" using subset_imp_le tnat jnat nat_into_Ord by auto
          then have "j {j}ttj" using tnat jnat nat_into_Ord unfolding Ord_def
            Transset_def by auto
          then have "succ(j)ttj" using succ_explained by auto
          with tsucc(j) have "t=succ(j)tj" by auto
          with tnat jnat have "t{nnat. n,jLe}  {succ(j)}" by auto
        }
        then have "{nnat. n,succ(j)Le} {nnat. n,jLe}  {succ(j)}" by auto
        moreover have "Finite({nnat. n,jLe}  {succ(j)})" using as(2) Finite_cons
          by auto
        ultimately have "Finite({nnat. n,succ(j)Le})" using subset_Finite by auto
      }
      then have "jnat. Finite({nnat. n,jLe})  Finite({nnat. n,succ(j)Le})"
        by auto
      ultimately have "Finite(range(restrict(?NN, {n  nat . n, r  Le})))"
        using lepoll_Finite[of "range(restrict(?NN, {n  nat . n, r  Le}))"
          "{n  nat . n, r  Le}"] ind_on_nat[OF rnat, where P="λt. Finite({nnat. n,tLe})"] by auto
      then have "Finite((restrict(?NN, {n  nat . n, r  Le}))``{n  nat . n, r  Le})" using range_image_domain[OF NresFun]
        by auto
      then have "Finite(?NN``{n  nat . n, r  Le})" using restrict_image by auto
      then have "(?NN``{n  nat . n, r  Le}){is in the spectrum of}(λT. (T){is compact in}T)" using compact_spectrum by auto
      moreover have "(T{restricted to}?NN``{n  nat . n, r  Le})=T?NN``{n  nat . n, r  Le}"
        unfolding RestrictedTo_def by auto moreover
      have "T?NN``{n  nat . n, r  Le}=?NN``{n  nat . n, r  Le}"
        using func1_1_L6(2)[OF NFun] by blast
      moreover have "(T{restricted to}?NN``{n  nat . n, r  Le}){is a topology}"
        using Top_1_L4 by auto
      ultimately have "(?NN``{n  nat . n, r  Le}){is compact in}(T{restricted to}?NN``{n  nat . n, r  Le})"
        unfolding Spec_def by force
      then have "(?NN``{n  nat . n, r  Le}){is compact in}T" using compact_subspace_imp_compact by auto
      moreover from Acov(1) have "(?NN``{n  nat . n, r  Le})M" by auto
      moreover note Acov(2) ultimately
      obtain 𝔑 where 𝔑:"𝔑FinPow(M)" "(?NN``{n  nat . n, r  Le})𝔑"
        unfolding IsCompact_def by blast
      from 𝔑(1) have "𝔑 {U}FinPow(M)" using U(2) unfolding FinPow_def by auto moreover
      {
        fix s assume s:"s?A" "sU"
        with U(1) have "s?NN``nat" by auto
        then have "s{?NN`n. nnat}" using func_imagedef[OF NFun] by auto
        then obtain n where n:"nnat" "s=?NN`n" by auto
        {
          assume "r,nLe"
          with rr have "?NN`nU" by auto
          with n(2) s(2) have "False" by auto
        }
        then have "r,nLe" by auto
        with rr(1) n(1) have "¬(rn)" by auto
        then have "nr" using Ord_linear_le[where thesis="n,rLe"] nat_into_Ord[OF rr(1)]
          nat_into_Ord[OF n(1)] by auto
        with rr(1) n(1) have "n,rLe" by auto
        with n(2) have "s{?NN`t. t{nnat. n,rLe}}" by auto moreover
        have "{nnat. n,rLe}nat" by auto
        ultimately have "s?NN``{nnat. n,rLe}" using func_imagedef[OF NFun]
          by auto
        with 𝔑(2) have "s𝔑" by auto
      }
      then have "?A𝔑  U" by auto
      then have "?A(𝔑  {U})" by auto ultimately
      have "𝔑FinPow(M). ?A𝔑" by auto
    }
    then have "MPow(T). ?AM  (𝔑FinPow(M). ?A𝔑)" by auto moreover
    have "?AT" using func1_1_L6(2)[OF NFun] x by blast ultimately
    have "?A{is compact in}T" unfolding IsCompact_def by auto
    with assms have "?A{is closed in}T" unfolding IsKC_def IsCompact_def by auto
    then have "T-?AT" unfolding IsClosed_def by auto
    then have "T-?A=int(T-?A)" using Top_2_L3 by auto moreover
    {
      assume "y?A"
      with A(4) have "y?NN``nat" by auto
      then have "y{?NN`n. nnat}" using func_imagedef[OF NFun] by auto
      then obtain n where "nnat""?NN`n=y" by auto
      with noy have "False" by auto
    }
    with y have "yT-?A" by force ultimately
    have "yint(T-?A)" "T-?APow(T)" by auto moreover
    have "(UPow(T).  y  int(U)  (tnat. mnat. t, m  Le  N ` m  U))"
      using A(3) dom unfolding NetConverges_def[OF Net] by auto
    ultimately have "tnat. mnat. t, m  Le  N ` m  T-?A" by blast
    then obtain r where r_def:"rnat" "snat. r,sLe  N`sT-?A" by auto
    {
        fix s assume AA:"r,sLe"
        with reg obtain m where "N`my" "s,mLe" by auto
        then have "s,μ i. N`iy  s,iLeLe" using LeastI[of "λm. N`my  s,mLe" "m"]
          nat_into_Ord by auto
        with AA have "r,μ i. N`iy  s,iLeLe" using le_trans by auto
        with r_def(2) have "N`(μ i. N`iy  s,iLe)T-?A" by force
        then have "?NN`sT-?A" using apply_equality[OF _ NFun] AA by auto
        moreover have "?NN`s{?NN`t. tnat}" using AA by auto
        then have "?NN`s?NN``nat" using func_imagedef[OF NFun] by auto
        then have "?NN`s?A" by auto
        ultimately have "False" by auto
      }
      moreover have "rsucc(r)" using succ_explained by auto
      then have "rsucc(r)" using subset_imp_le nat_into_Ord rnat nat_succI
        by auto
      then have "r,succ(r)Le" using rnat nat_succI by auto
      ultimately have "False" by auto
    }
    then have "N x y. (N:natT)  (N, Le N x {in} T)  (N, Le N y {in} T)
       x=y" by auto
  then show ?thesis unfolding IsUS_def by auto
qed

text‹US spaces are also $T_1$.›

theorem (in topology0) US_imp_T1:
  assumes "T{is US}"
  shows "T{is T1}"
proof-
  {
    fix x assume x:"xT"
    then have "{x}T" by auto
    {
      fix y assume y:"yx" "ycl({x})"
      then have r:"UT. yU  xU" using cl_inter_neigh[OF {x}T] by auto
      let ?N="ConstantFunction(nat,x)"
      have fun:"?N:natT" using x func1_3_L1 by auto
      then have dom:"domain(?N)=nat" using func1_1_L1 by auto
      with fun have Net:"?N,Le{is a net on}T" using Le_directs_nat unfolding IsNet_def
        by auto
      {
        fix U assume "UPow(T)" "xint(U)"
        then have "xU" using Top_2_L1 by auto
        then have "nnat. ?N`nU" using func1_3_L2 by auto
        then have "nnat. 0,nLe ?N`nU" by auto
        then have "rnat. nnat. r,nLe ?N`nU" by auto
      }
      then have "?N,Le N x" unfolding NetConverges_def[OF Net] using x dom by auto moreover
      {
        fix U assume "UPow(T)" "yint(U)"
        then have "xint(U)" using r Top_2_L2 by auto
        then have "xU" using Top_2_L1 by auto
        then have "nnat. ?N`nU" using func1_3_L2 by auto
        then have "nnat. 0,nLe ?N`nU" by auto
        then have "rnat. nnat. r,nLe ?N`nU" by auto
      }
      then have "?N,Le N y" unfolding NetConverges_def[OF Net] using y(2) dom
        Top_3_L11(1)[OF {x}T] by auto
      ultimately have "x=y" using assms unfolding IsUS_def using fun by auto
      with y(1) have "False" by auto
    }
    then have "cl({x}){x}" by auto
    then have "cl({x})={x}" using cl_contains_set[OF {x}T] by auto
    then have "{x}{is closed in}T" using Top_3_L8 x by auto
  }
  then show ?thesis using T1_iff_singleton_closed by auto
qed

subsection‹Counter-examples›

text‹We need to find counter-examples that prove that this properties
are new ones.›

text‹We know that $T_2\Rightarrow loc.T_2\Rightarrow$ anti-hyperconnected $\Rightarrow T_1$
and $T_2\Rightarrow KC\Rightarrow US\Rightarrow T_1$. The question is: What is the relation
between $KC$ or $US$ and, $loc.T_2$ or anti-hyperconnected?›

text‹In the file @{file "Topology_ZF_properties_2.thy"} we built a topological space
which is locally-$T_2$ but no $T_2$. It happends actually that this space is not even US
given the appropiate topology T›.›

lemma (in topology0) locT2_not_US_1:
  assumes "{m}T" "{m}{is closed in}T" "NnatT. (N,LeN m)  mN``nat" 
  shows "Nnat(T{(U-{m}){T}W. U,W{VT. mV}×T}). (N,LeN T {in} (T{(U-{m}){T}W. U,W{VT. mV}×T}))
     (N,LeN m {in} (T{(U-{m}){T}W. U,W{VT. mV}×T}))"
proof-
  from assms(3) obtain N where N:"N:natT" "N,LeN m" "mN``nat" by auto
  have "T(T{(U-{m}){T}W. U,W{VT. mV}×T})" using assms(2) union_doublepoint_top
    by auto
  with N(1) have fun:"N:nat(T{(U-{m}){T}W. U,W{VT. mV}×T})" using func1_1_L1B by auto
  then have dom:"domain(N)=nat" using func1_1_L1 by auto
  with fun have Net:"N,Le{is a net on}(T{(U-{m}){T}W. U,W{VT. mV}×T})" unfolding
    IsNet_def using Le_directs_nat by auto
  from N(1) dom have Net2:"N,Le{is a net on}T" unfolding IsNet_def using Le_directs_nat by auto
  from N(2) have R:"UPow(T). mint(U) (rnat. snat. r,sLe  N`sU)"
    unfolding NetConverges_def[OF Net2] using dom by auto
  {
    fix U assume U:"UPow((T{(U-{m}){T}W. U,W{VT. mV}×T}))"  "mInterior(U,T{(U-{m}){T}W. U,W{VT. mV}×T})"
    let ?I="Interior(U,T{(U-{m}){T}W. U,W{VT. mV}×T})"
    have "?IT{(U-{m}){T}W. U,W{VT. mV}×T}" using topology0.Top_2_L2 assms(2) doble_point_top unfolding topology0_def by blast
    then have "(T)?I(T{(U-{m}){T}W. U,W{VT. mV}×T}){restricted to}T" unfolding RestrictedTo_def by blast
    then have "(T)?IT" using open_subspace_double_point(1) assms(2) by auto moreover
    then have "int((T)?I)=(T)?I" using Top_2_L3 by auto
    with U(2) assms(2) have "mint((T)?I)" unfolding IsClosed_def by auto
    moreover note R ultimately have "rnat. snat. r,sLe  N`s(T)?I" by blast
    then have "rnat. snat. r,sLe  N`s?I" by blast
    then have "rnat. snat. r,sLe  N`sU" using topology0.Top_2_L1[of "T{(U-{m}){T}W. U,W{VT. mV}×T}""U"] doble_point_top assms(2)
      unfolding topology0_def by auto
  }
  then have "UPow((T{(U-{m}){T}W. U,W{VT. mV}×T})). mInterior(U,T{(U-{m}){T}W. U,W{VT. mV}×T}) (rnat. snat. r,sLe  N`sU)" by auto
  moreover have tt:"topology0(T{(U-{m}){T}W. U,W{VT. mV}×T})" using doble_point_top[OF assms(2)] unfolding topology0_def. 
  have "m(T{(U-{m}){T}W. U,W{VT. mV}×T})" using assms(2) union_doublepoint_top unfolding IsClosed_def by auto ultimately
  have con1:"(N,LeN m {in} (T{(U-{m}){T}W. U,W{VT. mV}×T}))" unfolding topology0.NetConverges_def[OF tt Net]
    using dom by auto
  {
    fix U assume U:"UPow((T{(U-{m}){T}W. U,W{VT. mV}×T}))"  "TInterior(U,T{(U-{m}){T}W. U,W{VT. mV}×T})"
    let ?I="Interior(U,T{(U-{m}){T}W. U,W{VT. mV}×T})"
    have "?IT{(U-{m}){T}W. U,W{VT. mV}×T}" using topology0.Top_2_L2 assms(2) doble_point_top unfolding topology0_def by blast
    with U(2) mem_not_refl have "?I{(U-{m}){T}W. U,W{VT. mV}×T}" by auto
    then obtain V W where VW:"?I=(V-{m}){T}W" "WT" "VT" "mV" by auto
    from VW(3,4) have "mint(V)" using Top_2_L3 by auto moreover
    have "VPow(T)" using VW(3) by auto moreover
    note R ultimately
    have "rnat. snat. r,sLe  N`sV" by blast moreover
    from N(3) have "snat. N`sm" using func_imagedef[OF N(1)] by auto ultimately
    have "rnat. snat. r,sLe  N`sV-{m}" by blast
    then have "rnat. snat. r,sLe  N`s?I" using VW(1) by auto
    then have "rnat. snat. r,sLe  N`sU" using topology0.Top_2_L1 assms(2) doble_point_top unfolding topology0_def by blast
  }
  then have "UPow((T{(U-{m}){T}W. U,W{VT. mV}×T})). TInterior(U,T{(U-{m}){T}W. U,W{VT. mV}×T})  (rnat. snat. r,sLe  N`sU)" by auto
  moreover have "T(T{(U-{m}){T}W. U,W{VT. mV}×T})" using assms(2) union_doublepoint_top by auto ultimately
  have "(N,LeN T {in} (T{(U-{m}){T}W. U,W{VT. mV}×T}))" unfolding topology0.NetConverges_def[OF tt Net]
    using dom by auto
  with con1 fun show ?thesis by auto
qed

corollary (in topology0) locT2_not_US_2:
  assumes "{m}T" "{m}{is closed in}T" "NnatT. (N,LeN m)  mN``nat"
  shows "¬((T{(U-{m}){T}W. U,W{VT. mV}×T}){is US})"
proof-
  have "mT" using assms(2) mem_not_refl unfolding IsClosed_def by auto 
  then show ?thesis using locT2_not_US_1 assms unfolding IsUS_def by blast
qed

text‹In particular, we also know that a locally-$T_2$ space doesn't need to be KC;
since KC$\Rightarrow$US. Also we know that anti-hyperconnected spaces don't need to be
KC or US, since locally-$T_2\Rightarrow$anti-hyperconnected.›

text‹Let's find a KC space that is not $T_2$, an US space which is not KC
and a $T_1$ space which is not US.›

text‹First, let's prove some lemmas about what relation
is there between this properties under the influence of other ones. This will
help us to find counter-examples.›

text‹Anti-compactness ereases the differences between several properties.›

lemma (in topology0) anticompact_KC_equiv_T1:
  assumes "T{is anti-compact}"
  shows "T{is KC}T{is T1}"
proof
  assume "T{is KC}"
  then show "T{is T1}" using KC_imp_T1 by auto
next
  assume AS:"T{is T1}"
  {
    fix A assume A:"A{is compact in}T" "APow(T)"
    then have "A{is compact in}(T{restricted to}A)" "APow(T)" using compact_imp_compact_subspace
      Compact_is_card_nat by auto
    moreover then have "(T{restricted to}A)=A" unfolding RestrictedTo_def by auto
    ultimately have "((T{restricted to}A)){is compact in}(T{restricted to}A)" "APow(T)" by auto
    with assms have "Finite(A)" unfolding IsAntiComp_def antiProperty_def using compact_spectrum by auto
    then obtain n where "nnat" "An" unfolding Finite_def by auto
    then have "Anat" using eq_lesspoll_trans n_lesspoll_nat by auto moreover
    have "T-(T-A)=A" using A(2) by auto
    ultimately have "T-(T-A)nat" by auto
    then have "T-ACoFinite T" unfolding Cofinite_def CoCardinal_def by auto
    then have "T-AT" using AS T1_cocardinal_coarser by auto
    with A(2) have "A{is closed in}T" unfolding IsClosed_def by auto
  }
  then show "T{is KC}" unfolding IsKC_def by auto
qed

text‹Then if we find an anti-compact and $T_1$ but no $T_2$ space,
there is a counter-example for $KC\Rightarrow T_2$. A counter-example for US doesn't
need to be KC mustn't be anti-compact.›

text‹The cocountable topology on csucc(nat)› is such a topology.›
text‹The cocountable topology on $\mathbb{N}^+$ is hyperconnected.›

lemma cocountable_in_csucc_nat_HConn:
  shows "(CoCountable csucc(nat)){is hyperconnected}"
proof-
  {
    fix U V assume as:"U(CoCountable csucc(nat))""V(CoCountable csucc(nat))""UV=0"
    then have "csucc(nat)-Ucsucc(nat)U=0""csucc(nat)-Vcsucc(nat)V=0"
      unfolding Cocountable_def CoCardinal_def by auto
    then have "(csucc(nat)-U)(csucc(nat)-V)csucc(nat)U=0V=0" using less_less_imp_un_less[
      OF _ _ InfCard_csucc[OF InfCard_nat]] by auto moreover
    {
      assume "(csucc(nat)-U)(csucc(nat)-V)csucc(nat)" moreover
      have "(csucc(nat)-U)(csucc(nat)-V)=csucc(nat)-UV" by auto
      with as(3) have "(csucc(nat)-U)(csucc(nat)-V)=csucc(nat)" by auto
      ultimately have "csucc(nat)csucc(nat)" by auto
      then have "False" by auto
    }
    ultimately have "U=0V=0" by auto
  }
  then show "(CoCountable csucc(nat)){is hyperconnected}" unfolding IsHConnected_def by auto
qed

text‹The cocountable topology on $\mathbb{N}^+$ is not anti-hyperconnected.›

corollary cocountable_in_csucc_nat_notAntiHConn:
  shows "¬((CoCountable csucc(nat)){is anti-}IsHConnected)"
proof
  assume as:"(CoCountable csucc(nat)){is anti-}IsHConnected"
  have "(CoCountable csucc(nat)){is hyperconnected}" using cocountable_in_csucc_nat_HConn by auto moreover
  have "csucc(nat)0" using Ord_0_lt_csucc[OF Ord_nat] by auto
  then have uni:"(CoCountable csucc(nat))=csucc(nat)" using union_cocardinal unfolding Cocountable_def by auto
  have "A(CoCountable csucc(nat)). A(CoCountable csucc(nat))" by fast
  with uni have "A(CoCountable csucc(nat)). Acsucc(nat)" by auto
  then have "A(CoCountable csucc(nat)). csucc(nat)A=A" by auto
  ultimately have "((CoCountable csucc(nat)){restricted to}csucc(nat)){is hyperconnected}"
    unfolding RestrictedTo_def by auto
  with as have "(csucc(nat)){is in the spectrum of}IsHConnected" unfolding antiProperty_def
    using uni by auto
  then have "csucc(nat)1" using HConn_spectrum by auto
  then have "csucc(nat)nat" using n_lesspoll_nat lesspoll_trans1 by auto
  then show "False" using lt_csucc[OF Ord_nat] lt_Card_imp_lesspoll[OF Card_csucc[OF Ord_nat]]
    lesspoll_trans by auto
qed

text‹The cocountable topology on $\mathbb{N}^+$ is not $T_2$.›

theorem cocountable_in_csucc_nat_noT2:
  shows "¬(CoCountable csucc(nat)){is T2}"
proof
  assume "(CoCountable csucc(nat)){is T2}" 
  then have antiHC:"(CoCountable csucc(nat))