Exemple #1
0
        /// <summary>
        /// (有限)位相空間かどうか。集合族が開集合族の定義を満たすかどうか。
        ///
        /// </summary>
        /// <param name="subsets">集合族</param>
        /// <param name="universe">全体集合・台集合</param>
        /// <returns>(有限)位相空間</returns>
        public static bool isTopological <TEnum>(this FamilyOfSubsets <TEnum> subsets, FiniteSet <TEnum> universe)
            where TEnum : Enum
        {
            //集合がなければ偽
            if (subsets == null || subsets.Count == 0)
            {
                return(false);
            }
            //空集合がなければ偽
            else if (!subsets.isContainsEmpty())
            {
                return(false);
            }
            //台集合がなければ偽
            else if (!subsets.Contains(universe))
            {
                return(false);
            }
            //和集合について閉じてなければ偽
            else if (!subsets.isSumComplete())
            {
                return(false);
            }
            //交叉について閉じてなければ偽
            else if (!subsets.isProductComplete())
            {
                return(false);
            }

            //条件を満たしているので真
            return(true);
        }
Exemple #2
0
 /// <summary>
 /// 集合族に空集合があるかどうかを判定(集合族自体が空なら偽)
 /// </summary>
 /// <param name="subsets">集合族</param>
 /// <returns>空集合があるかどうか</returns>
 public static bool isContainsEmpty <TEnum>(this FamilyOfSubsets <TEnum> subsets)
     where TEnum : Enum
 {
     //集合がなければ偽
     if (subsets == null || subsets.Count == 0)
     {
         return(false);
     }
     return(subsets.Contains(new FiniteSet <TEnum>()));
 }
Exemple #3
0
        /// <summary>
        ///  ∩-完備,σ乗法性があるかどうか(共通部分∩について閉じているかどうか)
        /// </summary>
        /// <param name="subsets">集合族</param>
        /// <returns>∩-完備</returns>
        public static bool isProductComplete <TEnum>(this FamilyOfSubsets <TEnum> subsets)
            where TEnum : Enum
        {
            foreach (FiniteSet <TEnum> subset1 in subsets)
            {
                foreach (FiniteSet <TEnum> subset2 in subsets)
                {
                    FiniteSet <TEnum> andSet = subset1.And(subset2);
                    if (!subsets.Contains(andSet))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemple #4
0
        /// <summary>
        ///  △-完備かどうか(対称差△について閉じているかどうか)
        /// </summary>
        /// <param name="subsets">集合族</param>
        /// <returns>△-完備</returns>
        public static bool isSymDiffComplete <TEnum>(this FamilyOfSubsets <TEnum> subsets)
            where TEnum : Enum
        {
            foreach (FiniteSet <TEnum> subset1 in subsets)
            {
                foreach (FiniteSet <TEnum> subset2 in subsets)
                {
                    FiniteSet <TEnum> xorSet = subset1.Xor(subset2);
                    if (!subsets.Contains(xorSet))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Exemple #5
0
        /// <summary>
        ///  補-完備かどうか(補集合cについて閉じているかどうか)
        /// </summary>
        /// <param name="subsets">集合族</param>
        /// <param name="universe">全体集合</param>
        /// <returns>補-完備</returns>
        public static bool isComplementComplete <TEnum>(this FamilyOfSubsets <TEnum> subsets, FiniteSet <TEnum> universe)
            where TEnum : Enum
        {
            if (!subsets.isUniverseOK(universe))
            {
                throw new ArgumentException("全体集合が、部分集合族の要素である、集合の要素を網羅していません");
            }

            foreach (FiniteSet <TEnum> subset in subsets)
            {
                FiniteSet <TEnum> diffSet = universe.Diff(subset);
                if (!subsets.Contains(diffSet))
                {
                    return(false);
                }
            }
            return(true);
        }
Exemple #6
0
        /// <summary>
        ///  \-完備かどうか(差集合\について閉じているかどうか)
        /// </summary>
        /// <param name="subsets">集合族</param>
        /// <returns>\-完備</returns>
        public static bool isDiffComplete <TEnum>(this FamilyOfSubsets <TEnum> subsets)
            where TEnum : Enum
        {
            foreach (FiniteSet <TEnum> subset1 in subsets)
            {
                foreach (FiniteSet <TEnum> subset2 in subsets)
                {
                    FiniteSet <TEnum> diffSet = subset1.Diff(subset2);
                    IEqualityComparer <FiniteSet <TEnum> > comparer = new FiniteSetComparer <TEnum>();
                    if (!subsets.Contains(diffSet, comparer))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }