public List <Fluent[]> CalculatePossibleFluents() { var result = new List <Fluent[]>(); string[] fluentNames = this.GetFluentNames(); int numberOfFluents = fluentNames.Length; foreach (var code in Gray.GetGreyCodesWithLengthN(numberOfFluents)) { var possibleFluents = new Fluent[numberOfFluents]; for (int i = 0; i < numberOfFluents; i++) { possibleFluents[i] = new Fluent { Name = fluentNames[i], Value = code[i] }; } if (this.Evaluate(possibleFluents.Select(t => new Tuple <string, bool>(t.Name, t.Value)))) { result.Add(possibleFluents); } } return(result); }