/// <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); }
/// <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>())); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }