public Database <T> Project(IFact <T> fact) { var newGivenFacts = new List <IFact <T> >(givenFacts); newGivenFacts.Add(fact); return(new Database <T>(newGivenFacts, Transactions.Where(x => fact.IsTrue(x)).ToList())); }