private IEnumerable<BeliefPair> AskDynamicProperties(Name property, Name perspective, IEnumerable<SubstitutionSet> constraints)
{
if (m_dynamicProperties.Count == 0)
yield break;
Name tmpPropertyName = property.ReplaceUnboundVariables(TMP_MARKER);
var d = m_dynamicProperties.Unify(tmpPropertyName).ToList();
if (d.Count == 0)
yield break;
var results = d.SelectMany(p => p.Item1.Evaluate(this, perspective, p.Item2, constraints).ToList());
foreach (var g in results.GroupBy(p => p.Value, p => p.Constraints))
{
yield return Tuples.Create(g.Key, g.Distinct());
}
}