private IEnumerable<Production> UnitReplacementProductions(Production unitProduction, Dictionary<Nonterminal, ICollection<Production>> productionsByNonterminal) {
var retval = new List<Production>();
var productions = productionsByNonterminal.LookupEnumerable((Nonterminal)unitProduction.Rhs[0]);
var weightSum = productions.Sum((p) => p.Weight);
foreach (var production in productions) {
var productionProb = production.Weight / weightSum;
var newWeight = unitProduction.Weight * productionProb;
var newProduction = new Production(unitProduction.Lhs, production.Rhs, newWeight);
if (newProduction.IsSelfLoop) {
continue;
}
retval.Add(newProduction);
}
return retval;
}