public bool ChangeHeadOfRule(Grammar grammar)
        {
            for (var i = 0; i < NumberOfRetries; i++)
            {
                var rule = grammar.GetRandomRule();
                if (!rule.IsInitialRule()) continue; //do not change complements of schematic rules. (push/pop)

                if (rule.Production.Length > 1)
                {
                    var newRule = new Rule(rule);
                    newRule.HeadPosition = (rule.HeadPosition + 1)%rule.Production.Length;

                    if (grammar.AreHeadRelationsConsistent(newRule))
                    {
                        grammar.DeleteRule(rule);
                        grammar.AddRule(newRule);
                        return true;
                    }
                }
            }
            return false;
        }
 public bool DeleteRule(Grammar grammar)
 {
     var rule = grammar.GetRandomRule();
     grammar.DeleteRule(rule);
     return true;
 }