func dnfComplexity(expr expression.Expression, max int) int { comp := 0 switch expr := expr.(type) { case *expression.Or: comp = len(expr.Operands()) } if comp < max { children := expr.Children() for _, child := range children { childComp := dnfComplexity(child, max-comp) comp += childComp if comp >= max { break } } } return comp }