public static HashSet <VCExprVar> CollectBindings(QuantifierInstantiationEngine qiEngine, VCExpr vcExpr)
        {
            var bindingCollector = new BindingCollector(qiEngine);

            bindingCollector.Traverse(vcExpr, true);
            return(bindingCollector.bindings);
        }
        private VCExpr LetConvert(VCExpr vcExpr)
        {
            var bindings = BindingCollector.CollectBindings(this, vcExpr).ToList();

            if (bindings.Count == 0)
            {
                return(vcExpr);
            }
            var rhss = new List <VCExprLetBinding>();

            foreach (var binding in bindings)
            {
                rhss.Add(new VCExprLetBinding(binding, LetConvert(this.AugmentWithInstances(quantifierBinding[binding]))));
            }
            return(vcExprGen.Let(rhss, vcExpr));
        }