Exemplo n.º 1
0
        /// <summary>
        /// 部分集合族の包含関係 ⊆ から 自己関係 R を生成するメソッド
        /// </summary>
        /// <typeparam name="TEnum"></typeparam>
        /// <param name="subsets">部分集合族</param>
        /// <param name="universe">全体集合</param>
        /// <returns></returns>
        public static EndoRelation <FiniteSet <TEnum> > CreateSubsetRelation <TEnum>(this FamilyOfSubsets <TEnum> subsets, FiniteSet <TEnum> universe)
            where TEnum : Enum
        {
            if (!subsets.isUniverseOK(universe))
            {
                throw new ArgumentException("全体集合が、部分集合族の要素である、集合の要素を網羅していません");
            }

            var retRel = new EndoRelation <FiniteSet <TEnum> >();

            //自己関係の全体集合は冪集合(もとの台集合の部分集合族なので)
            retRel.SetUniverse(universe.PowerSet());

            //要素となる集合を格納
            foreach (FiniteSet <TEnum> subsetX in subsets)
            {
                foreach (FiniteSet <TEnum> subsetY in subsets)
                {
                    //X⊆Y ⇔ X R Y という定義で自己関係Rを定義
                    if (subsetX.IsSubsetOf(subsetY))
                    {
                        retRel.Add((subsetX, subsetY));
                    }
                }
            }

            return(retRel);
        }
Exemplo n.º 2
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);
        }