protected CAF(IPredicate predicate, ITT arguments) { Debug.Assert(predicate.argumentTypes.Count() == arguments.Count()); Debug.Assert(predicate.argumentTypes.Zip(arguments, (at, a) => at.isEquivalent(a.type)).All(x => x)); Debug.Assert(arguments.All(t => (!(t is GT) || (t as GT).rep != null))); this.predicate = predicate; this.itt = arguments; }