public RuleTreeBranch (IRuleTreeNode[] children, AnalysisRuleAddinNode rule)
		{
			this.rule = rule;
			this.children = children;
			Debug.Assert (rule != null);
			Debug.Assert (children != null && children.Length > 0);
			Debug.Assert (children.All (c =>
				   (c is RuleTreeLeaf && ((RuleTreeLeaf)c).Rule.Input == rule.Output)
				|| (c is RuleTreeBranch && ((RuleTreeBranch)c).Rule.Input == rule.Output)
			));
		}
		public RuleTreeLeaf (AnalysisRuleAddinNode rule)
		{
			this.rule = rule;
			Debug.Assert (rule != null);
			Debug.Assert (rule.Output == TYPE);
		}