...
 
Commits (5)
using DotNetTransformer.Math.Set;
namespace DotNetTransformer.Math.Group {
public abstract class FiniteGroup<T> : FiniteSet<T>, IFiniteGroup<T, FiniteGroup<T>> // FiniteSet<T>, IGroup<T>
public abstract class FiniteGroup<T> : FiniteSet<T>, IFiniteGroup<T>
where T : IFiniteGroupElement<T>, new()
{
public virtual T IdentityElement { get { return new T(); } }
......
using System;
using System.Collections.Generic;
using DotNetTransformer.Extensions;
using DotNetTransformer.Math.Set;
namespace DotNetTransformer.Math.Group {
......@@ -10,9 +9,9 @@ private sealed class InternalGroup<T> : FiniteGroup<T>
where T : IFiniteGroupElement<T>, new()
{
private readonly T _identity;
private readonly FiniteSet<T> _collection;
private readonly IFiniteSet<T> _collection;
internal InternalGroup(FiniteSet<T> collection) {
internal InternalGroup(IFiniteSet<T> collection) {
_identity = new T();
_collection = collection;
}
......@@ -25,8 +24,8 @@ private sealed class InternalGroup<T> : FiniteGroup<T>
public override sealed IEnumerator<T> GetEnumerator() {
return _collection.GetEnumerator();
}
public override sealed bool Equals(FiniteSet<T> other) {
return IsMatch<FiniteSet<T>>(other, base.Equals);
public override sealed bool Equals(IFiniteSet<T> other) {
return IsMatch<IFiniteSet<T>>(other, base.Equals);
}
public override sealed int GetHashCode() {
return _collection.GetHashCode();
......@@ -34,14 +33,14 @@ private sealed class InternalGroup<T> : FiniteGroup<T>
public override sealed bool IsSubsetOf(ISet<T> other) {
return IsMatch<ISet<T>>(other, base.IsSubsetOf);
}
public override sealed bool IsSubsetOf(FiniteSet<T> other) {
return IsMatch<FiniteSet<T>>(other, base.IsSubsetOf);
public override sealed bool IsSubsetOf(IFiniteSet<T> other) {
return IsMatch<IFiniteSet<T>>(other, base.IsSubsetOf);
}
public override sealed bool IsSupersetOf(FiniteSet<T> other) {
return IsMatch<FiniteSet<T>>(other, base.IsSupersetOf);
public override sealed bool IsSupersetOf(IFiniteSet<T> other) {
return IsMatch<IFiniteSet<T>>(other, base.IsSupersetOf);
}
private bool IsMatch<TSet>(TSet other, Predicate<TSet> match)
where TSet : ISet<T>
private bool IsMatch<S>(S other, Predicate<S> match)
where S : ISet<T>
{
InternalGroup<T> o = other as InternalGroup<T>;
return ReferenceEquals(_collection, other)
......@@ -50,18 +49,18 @@ private bool IsMatch<TSet>(TSet other, Predicate<TSet> match)
}
}
internal static FiniteGroup<T> ToFiniteGroup<T>(this FiniteSet<T> collection)
internal static IFiniteGroup<T> ToFiniteGroup<T>(this IFiniteSet<T> collection)
where T : IFiniteGroupElement<T>, new()
{
return ReferenceEquals(collection, null) ?
null : new InternalGroup<T>(collection);
}
internal static FiniteGroup<T> ToFiniteGroup<T>(this ICollection<T> collection)
internal static IFiniteGroup<T> ToFiniteGroup<T>(this ICollection<T> collection)
where T : IFiniteGroupElement<T>, new()
{
return ToFiniteGroup<T>(collection.ToFiniteSet<T>());
}
internal static FiniteGroup<T> ToFiniteGroup<T>(this IEnumerable<T> collection,
internal static IFiniteGroup<T> ToFiniteGroup<T>(this IEnumerable<T> collection,
long count, Predicate<T> contains
)
where T : IFiniteGroupElement<T>, new()
......@@ -69,7 +68,7 @@ internal static FiniteGroup<T> ToFiniteGroup<T>(this ICollection<T> collection)
return ToFiniteGroup<T>(collection.ToFiniteSet<T>(count, contains));
}
public static FiniteGroup<T> CreateGroup<T>(this IEnumerable<T> collection)
public static IFiniteGroup<T> CreateGroup<T>(this IEnumerable<T> collection)
where T : IFiniteGroupElement<T>, new()
{
List<T> list = new List<T>();
......@@ -89,11 +88,11 @@ public static FiniteGroup<T> CreateGroup<T>(this IEnumerable<T> collection)
}
} while(count < list.Count);
}
FiniteGroup<T> group = ToFiniteGroup<T>(list);
IFiniteGroup<T> group = ToFiniteGroup<T>(list);
list[0] = group.IdentityElement;
return group;
}
public static bool IsGeneratingSetOf<T>(this IEnumerable<T> collection, FiniteGroup<T> group)
public static bool IsGeneratingSetOf<T>(this IEnumerable<T> collection, IFiniteGroup<T> group)
where T : IFiniteGroupElement<T>, new()
{
return !ReferenceEquals(collection, null)
......@@ -101,16 +100,16 @@ public static bool IsGeneratingSetOf<T>(this IEnumerable<T> collection, FiniteGr
&& group.IsSubsetOf(CreateGroup<T>(collection));
}
public static int GetLengthTo<T>(this T t, T o)
public static int? GetLengthTo<T>(this T t, T o)
where T : IFiniteGroupElement<T>, new()
{
int cLen = 1;
T sum = t;
while(!sum.Equals(o)) {
T sum = t, n = new T();
while(!n.Equals(sum) && !o.Equals(sum)) {
sum = sum.Add(t);
++cLen;
}
return cLen;
return o.Equals(sum) ? (int?)cLen : null;
}
public static T Times<T>(this T t, int count)
where T : IFiniteGroupElement<T>, new()
......
......@@ -14,11 +14,6 @@ public static T Subtract<T>(this T _this, T other)
{
return _this.Add(other.InverseElement);
}
public static T InverseAdd<T>(this T t, T o)
where T : IGroupElement<T>, new()
{
return o.InverseElement.Add(t);
}
public static T Conjugate<T>(this T t, T o)
where T : IGroupElement<T>, new()
{
......
using DotNetTransformer.Math.Set;
namespace DotNetTransformer.Math.Group {
public interface IFiniteGroup<T, G> : IFiniteSet<T, G>, IGroup<T>
public interface IFiniteGroup<T> : IFiniteSet<T>, IGroup<T>
where T : IFiniteGroupElement<T>, new()
where G : IFiniteGroup<T, G>
{ }
}
......@@ -14,7 +14,7 @@ public interface IPermutation<T> : IFiniteGroupElement<T>
T GetNextPermutation(int maxLength);
T GetPreviousPermutation(int maxLength);
FiniteSet<T> GetCycles(Predicate<T> match);
IFiniteSet<T> GetCycles(Predicate<T> match);
int GetCyclesCount(Predicate<int> match);
int[] ToArray();
......
......@@ -149,7 +149,7 @@ public struct PermutationByte : IPermutation<P>
cycleAction(cLen);
}
}
public FiniteSet<P> GetCycles(Predicate<P> match) {
public IFiniteSet<P> GetCycles(Predicate<P> match) {
List<P> list = new List<P>(_count);
byte value = 0, t = this._value;
ForAllCyclesDo(
......
......@@ -5,12 +5,12 @@
namespace DotNetTransformer.Math.Permutation {
public static class PermutationExtension
{
public static FiniteSet<T> GetCyclesAll<T>(this T _this)
public static IFiniteSet<T> GetCyclesAll<T>(this T _this)
where T : IPermutation<T>, new()
{
return _this.GetCycles(p => true);
}
public static FiniteSet<T> GetCyclesNonTrivial<T>(this T _this)
public static IFiniteSet<T> GetCyclesNonTrivial<T>(this T _this)
where T : IPermutation<T>, new()
{
return _this.GetCycles(p => p.CycleLength > 1);
......
......@@ -152,7 +152,7 @@ public struct PermutationInt32 : IPermutation<P>
cycleAction(cLen);
}
}
public FiniteSet<P> GetCycles(Predicate<P> match) {
public IFiniteSet<P> GetCycles(Predicate<P> match) {
List<P> list = new List<P>(_count);
int value = 0, t = this._value;
ForAllCyclesDo(
......
......@@ -157,7 +157,7 @@ public struct PermutationInt64 : IPermutation<P>
cycleAction(cLen);
}
}
public FiniteSet<P> GetCycles(Predicate<P> match) {
public IFiniteSet<P> GetCycles(Predicate<P> match) {
List<P> list = new List<P>(_count);
long value = 0, t = this._value;
ForAllCyclesDo(
......
using System;
namespace DotNetTransformer.Math.Set {
public abstract class EditableFiniteSet<T> : FiniteSet<T>, IEditableSet<T, FiniteSet<T>>
public abstract class EditableFiniteSet<T> : FiniteSet<T>, IEditableSet<T, IFiniteSet<T>>
where T : IEquatable<T>
{
public abstract bool Add(T item);
public abstract bool Remove(T item);
public abstract void UnionWith(FiniteSet<T> other);
public abstract void IntersectWith(FiniteSet<T> other);
public abstract void ExceptWith(FiniteSet<T> other);
public abstract void SymmetricExceptWith(FiniteSet<T> other);
public abstract void UnionWith(IFiniteSet<T> other);
public abstract void IntersectWith(IFiniteSet<T> other);
public abstract void ExceptWith(IFiniteSet<T> other);
public abstract void SymmetricExceptWith(IFiniteSet<T> other);
public abstract void Clear();
}
}
......@@ -13,13 +13,13 @@ private sealed class EmptySet : FiniteSet<T>
public override long Count { get { return 0L; } }
public override bool Contains(T item) { return false; }
public override IEnumerator<T> GetEnumerator() { yield break; }
public override bool Equals(FiniteSet<T> other) {
public override bool Equals(IFiniteSet<T> other) {
return !ReferenceEquals(other, null) && other.Count == 0L;
}
public override int GetHashCode() { return 0; }
public override bool IsSubsetOf(ISet<T> other) { return !ReferenceEquals(other, null); }
public override bool IsSubsetOf(FiniteSet<T> other) { return !ReferenceEquals(other, null); }
public override bool IsSupersetOf(FiniteSet<T> other) { return Equals(other); }
public override bool IsSubsetOf(IFiniteSet<T> other) { return !ReferenceEquals(other, null); }
public override bool IsSupersetOf(IFiniteSet<T> other) { return Equals(other); }
}
}
}
......@@ -4,7 +4,7 @@
using DotNetTransformer.Extensions;
namespace DotNetTransformer.Math.Set {
public abstract partial class FiniteSet<T> : IFiniteSet<T, FiniteSet<T>>
public abstract partial class FiniteSet<T> : IFiniteSet<T>
, ISubSet<T, ISet<T>>
where T : IEquatable<T>
{
......@@ -16,7 +16,7 @@ public abstract partial class FiniteSet<T> : IFiniteSet<T, FiniteSet<T>>
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
public virtual bool Equals(FiniteSet<T> other) {
public virtual bool Equals(IFiniteSet<T> other) {
return ReferenceEquals(this, other) || (
!ReferenceEquals(other, null)
&& Count == other.Count
......@@ -39,14 +39,14 @@ public abstract partial class FiniteSet<T> : IFiniteSet<T, FiniteSet<T>>
&& !this.Exist<T>(e => !other.Contains(e))
);
}
public virtual bool IsSubsetOf(FiniteSet<T> other) {
public virtual bool IsSubsetOf(IFiniteSet<T> other) {
return ReferenceEquals(this, other) || (
!ReferenceEquals(other, null)
&& Count <= other.Count
&& !this.Exist<T>(e => !other.Contains(e))
);
}
public virtual bool IsSupersetOf(FiniteSet<T> other) {
public virtual bool IsSupersetOf(IFiniteSet<T> other) {
return ReferenceEquals(this, other) || (
!ReferenceEquals(other, null)
&& Count >= other.Count
......@@ -54,13 +54,13 @@ public abstract partial class FiniteSet<T> : IFiniteSet<T, FiniteSet<T>>
);
}
public static bool operator ==(FiniteSet<T> l, FiniteSet<T> r) {
public static bool operator ==(FiniteSet<T> l, IFiniteSet<T> r) {
return ReferenceEquals(l, r) || (
!ReferenceEquals(l, null) &&
l.Equals(r)
);
}
public static bool operator !=(FiniteSet<T> l, FiniteSet<T> r) {
public static bool operator !=(FiniteSet<T> l, IFiniteSet<T> r) {
return !(l == r);
}
}
......
......@@ -5,13 +5,13 @@
namespace DotNetTransformer.Math.Set {
public static class FiniteSetExtension
{
private abstract class InternalBase<T, TEnum> : FiniteSet<T>
where T : IEquatable<T>
where TEnum : IEnumerable<T>
private abstract class InternalBase<T, E> : FiniteSet<T>
where T : IEquatable<T>
where E : IEnumerable<T>
{
protected readonly TEnum _collection;
protected readonly E _collection;
protected internal InternalBase(TEnum collection) {
protected internal InternalBase(E collection) {
_collection = collection;
}
......@@ -19,8 +19,8 @@ private abstract class InternalBase<T, TEnum> : FiniteSet<T>
public override sealed IEnumerator<T> GetEnumerator() {
return _collection.GetEnumerator();
}
public override sealed bool Equals(FiniteSet<T> other) {
return IsMatch<FiniteSet<T>>(other, base.Equals);
public override sealed bool Equals(IFiniteSet<T> other) {
return IsMatch<IFiniteSet<T>>(other, base.Equals);
}
public override sealed int GetHashCode() {
return _collection.GetHashCode();
......@@ -28,25 +28,25 @@ private abstract class InternalBase<T, TEnum> : FiniteSet<T>
public override sealed bool IsSubsetOf(ISet<T> other) {
return IsMatch<ISet<T>>(other, base.IsSubsetOf);
}
public override sealed bool IsSubsetOf(FiniteSet<T> other) {
return IsMatch<FiniteSet<T>>(other, base.IsSubsetOf);
public override sealed bool IsSubsetOf(IFiniteSet<T> other) {
return IsMatch<IFiniteSet<T>>(other, base.IsSubsetOf);
}
public override sealed bool IsSupersetOf(FiniteSet<T> other) {
return IsMatch<FiniteSet<T>>(other, base.IsSupersetOf);
public override sealed bool IsSupersetOf(IFiniteSet<T> other) {
return IsMatch<IFiniteSet<T>>(other, base.IsSupersetOf);
}
private bool IsMatch<TSet>(TSet other, Predicate<TSet> match)
where TSet : ISet<T>
private bool IsMatch<S>(S other, Predicate<S> match)
where S : ISet<T>
{
InternalBase<T, TEnum> o = other as InternalBase<T, TEnum>;
InternalBase<T, E> o = other as InternalBase<T, E>;
return ReferenceEquals(_collection, other)
|| !ReferenceEquals(o, null) && ReferenceEquals(_collection, o._collection)
|| match(other);
}
}
private sealed class InternalGroup<T> : InternalBase<T, FiniteGroup<T>>
private sealed class InternalGroup<T> : InternalBase<T, IFiniteGroup<T>>
where T : IFiniteGroupElement<T>, new()
{
internal InternalGroup(FiniteGroup<T> collection) : base(collection) { }
internal InternalGroup(IFiniteGroup<T> collection) : base(collection) { }
public override sealed long Count { get { return _collection.Count; } }
public override sealed bool Contains(T item) {
......@@ -82,19 +82,19 @@ private sealed class InternalEnumerable<T> : InternalBase<T, IEnumerable<T>>
}
}
internal static FiniteSet<T> ToFiniteSet<T>(this FiniteGroup<T> collection)
internal static IFiniteSet<T> ToFiniteSet<T>(this IFiniteGroup<T> collection)
where T : IFiniteGroupElement<T>, new()
{
return ReferenceEquals(collection, null) ?
null : new InternalGroup<T>(collection);
}
internal static FiniteSet<T> ToFiniteSet<T>(this ICollection<T> collection)
internal static IFiniteSet<T> ToFiniteSet<T>(this ICollection<T> collection)
where T : IEquatable<T>
{
return ReferenceEquals(collection, null) ?
null : new InternalCollection<T>(collection);
}
internal static FiniteSet<T> ToFiniteSet<T>(this IEnumerable<T> collection,
internal static IFiniteSet<T> ToFiniteSet<T>(this IEnumerable<T> collection,
long count, Predicate<T> contains
)
where T : IEquatable<T>
......
using System;
namespace DotNetTransformer.Math.Set {
public interface IEditableSet<in T, in TSet> : ISet<T>
where T : IEquatable<T>
where TSet : ISet<T>
public interface IEditableSet<in T, in S> : ISet<T>
where T : IEquatable<T>
where S : ISet<T>
{
void UnionWith(TSet other);
void IntersectWith(TSet other);
void ExceptWith(TSet other);
void SymmetricExceptWith(TSet other);
void UnionWith(S other);
void IntersectWith(S other);
void ExceptWith(S other);
void SymmetricExceptWith(S other);
void Clear();
}
}
......@@ -2,14 +2,13 @@
using System.Collections.Generic;
namespace DotNetTransformer.Math.Set {
public interface IFiniteSet<T, S> : ISet<T>, IEnumerable<T>
, IEquatable<S>
, ISubSet<T, S>
, ISuperSet<T, S>
public interface IFiniteSet<T> : ISet<T>, IEnumerable<T>
, IEquatable<IFiniteSet<T>>
, ISubSet<T, ISet<T>>
, ISubSet<T, IFiniteSet<T>>
, ISuperSet<T, IFiniteSet<T>>
where T : IEquatable<T>
where S : IFiniteSet<T, S>
{
long Count { get; }
bool IsSubsetOf(ISet<T> other);
}
}
using System;
namespace DotNetTransformer.Math.Set {
public interface ISubSet<in T, in TSet> : ISet<T>
where T : IEquatable<T>
where TSet : ISet<T>
public interface ISubSet<in T, in S> : ISet<T>
where T : IEquatable<T>
where S : ISet<T>
{
bool IsSubsetOf(TSet other);
bool IsSubsetOf(S other);
}
}
using System;
namespace DotNetTransformer.Math.Set {
public interface ISuperSet<in T, in TSet> : ISet<T>
where T : IEquatable<T>
where TSet : ISet<T>
public interface ISuperSet<in T, in S> : ISet<T>
where T : IEquatable<T>
where S : ISet<T>
{
bool IsSupersetOf(TSet other);
bool IsSupersetOf(S other);
}
}
......@@ -37,44 +37,44 @@ public static ISet<T> SymmetricExcept<T>(this ISet<T> _this, ISet<T> other)
new InternalSet<T>(e => _this.Contains(e) ^ other.Contains(e));
}
public static bool IsSubsetOf<T, TSet>(this TSet _this, ISuperSet<T, TSet> other)
where T : IEquatable<T>
where TSet : ISet<T>
public static bool IsSubsetOf<T, S>(this S _this, ISuperSet<T, S> other)
where T : IEquatable<T>
where S : ISet<T>
{
return !ReferenceEquals(other, null) && other.IsSupersetOf(_this);
}
public static bool IsSupersetOf<T, TSet>(this TSet _this, ISubSet<T, TSet> other)
where T : IEquatable<T>
where TSet : ISet<T>
public static bool IsSupersetOf<T, S>(this S _this, ISubSet<T, S> other)
where T : IEquatable<T>
where S : ISet<T>
{
return !ReferenceEquals(other, null) && other.IsSubsetOf(_this);
}
public static bool EqualsSubsets<T, TSet>(this TSet _this, TSet other)
where T : IEquatable<T>
where TSet : ISubSet<T, TSet>
public static bool EqualsSubsets<T, S>(this S _this, S other)
where T : IEquatable<T>
where S : ISubSet<T, S>
{
return ReferenceEquals(_this, other) || (
other.IsSupersetOf<T, TSet>(_this)
&& _this.IsSupersetOf<T, TSet>(other)
other.IsSupersetOf<T, S>(_this)
&& _this.IsSupersetOf<T, S>(other)
);
}
public static bool EqualsSupersets<T, TSet>(this TSet _this, TSet other)
where T : IEquatable<T>
where TSet : ISuperSet<T, TSet>
public static bool EqualsSupersets<T, S>(this S _this, S other)
where T : IEquatable<T>
where S : ISuperSet<T, S>
{
return ReferenceEquals(_this, other) || (
other.IsSubsetOf<T, TSet>(_this)
&& _this.IsSubsetOf<T, TSet>(other)
other.IsSubsetOf<T, S>(_this)
&& _this.IsSubsetOf<T, S>(other)
);
}
public static bool Equals<T, TSS, TSet>(this TSS _this, TSet other)
where T : IEquatable<T>
where TSS : ISubSet<T, TSet>, ISuperSet<T, TSet>
where TSet : ISet<T>
public static bool Equals<T, U, S>(this U _this, S other)
where T : IEquatable<T>
where U : ISubSet<T, S>, ISuperSet<T, S>
where S : ISet<T>
{
return ReferenceEquals(_this, other) || (
other.IsSupersetOf<T, TSet>(_this)
other.IsSupersetOf<T, S>(_this)
&& _this.IsSupersetOf(other)
);
}
......
......@@ -88,6 +88,7 @@
<li><a href="DotNetTransformer/Math/Group/FiniteGroup.cs"><code>FiniteGroup.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/FiniteGroupExtension.cs"><code>FiniteGroupExtension.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/GroupExtension.cs"><code>GroupExtension.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IFiniteGroup.cs"><code>IFiniteGroup.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IFiniteGroupElement.cs"><code>IFiniteGroupElement.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IGroup.cs"><code>IGroup.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IGroupElement.cs"><code>IGroupElement.cs</code></a></li>
......@@ -115,6 +116,7 @@
<li><a href="DotNetTransformer/Math/Set/FiniteSet.cs"><code>FiniteSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/FiniteSetExtension.cs"><code>FiniteSetExtension.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/IEditableSet.cs"><code>IEditableSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/IFiniteSet.cs"><code>IFiniteSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/ISet.cs"><code>ISet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/ISubSet.cs"><code>ISubSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/ISuperSet.cs"><code>ISuperSet.cs</code></a></li>
......
......@@ -88,6 +88,7 @@ to achieve the most efficient solutions.
<li><a href="DotNetTransformer/Math/Group/FiniteGroup.cs"><code>FiniteGroup.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/FiniteGroupExtension.cs"><code>FiniteGroupExtension.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/GroupExtension.cs"><code>GroupExtension.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IFiniteGroup.cs"><code>IFiniteGroup.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IFiniteGroupElement.cs"><code>IFiniteGroupElement.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IGroup.cs"><code>IGroup.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Group/IGroupElement.cs"><code>IGroupElement.cs</code></a></li>
......@@ -115,6 +116,7 @@ to achieve the most efficient solutions.
<li><a href="DotNetTransformer/Math/Set/FiniteSet.cs"><code>FiniteSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/FiniteSetExtension.cs"><code>FiniteSetExtension.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/IEditableSet.cs"><code>IEditableSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/IFiniteSet.cs"><code>IFiniteSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/ISet.cs"><code>ISet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/ISubSet.cs"><code>ISubSet.cs</code></a></li>
<li><a href="DotNetTransformer/Math/Set/ISuperSet.cs"><code>ISuperSet.cs</code></a></li>
......