public IConstraintManager GetSubSet(ISet <Constraint> subset)
        {
            // Don't make a new ConstraintManager if the constraints are the same.
            if (InternalConstraints.SetEquals(subset))
            {
                return(this);
            }

            if (subset.Count >= InternalConstraints.Count)
            {
                throw new ArgumentException("Subset has count >= to count of this constraint manager's constraints");
            }

            // Is this the most efficient way to do this?
            ConstraintManager other = (ConstraintManager)this.MemberwiseClone();

            Debug.Assert(subset.IsSubsetOf(InternalConstraints), "argument ``subset`` is not a valid subset");

            var asIm = ImmutableHashSet <Constraint> .Empty.Union(subset);

            other.InternalConstraints = asIm.ToBuilder();

            // Fully recompute the hashcode on the new constraint manager
            other.FullyRecomputeHashCode();
            return(other);
        }
        public IConstraintManager Clone()
        {
            ConstraintManager other = (ConstraintManager)this.MemberwiseClone();
            var asImmutable         = this.InternalConstraints.ToImmutable();

            other.InternalConstraints = asImmutable.ToBuilder();

            return(other);
        }