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);
        }