Beispiel #1
0
        BranchingRule <TERM> Comp(TERM pathCond, BranchingRule <TERM> ruleA, int qB, Func <int, int, int> stateComposer, bool isFinal)
        {
            if (ruleA is SwitchRule <TERM> )
            {
                throw new NotImplementedException(ruleA.ToString());
            }

            var ite = ruleA as IteRule <TERM>;

            if (ite != null)
            {
                var iteCondLifted = solver.ApplySubstitution(ite.Condition, A.RegVar, regVar_1);
                var pathCond_T    = (pathCond.Equals(solver.True) ? iteCondLifted : solver.MkAnd(pathCond, iteCondLifted));
                var pathCond_F    = (pathCond.Equals(solver.True) ? solver.MkNot(iteCondLifted) : solver.MkAnd(pathCond, solver.MkNot(iteCondLifted)));
                var res_T         = Comp(pathCond_T, ite.TrueCase, qB, stateComposer, isFinal);
                var res_F         = Comp(pathCond_F, ite.FalseCase, qB, stateComposer, isFinal);
                if (res_T is UndefRule <TERM> && res_F is UndefRule <TERM> )
                {
                    return(UndefRule <TERM> .Default);
                }
                var res = new IteRule <TERM>(iteCondLifted, res_T, res_F);
                return(res);
            }
            else
            {
                var br = ruleA as BaseRule <TERM>;
                if (br != null)
                {
                    var yieldsFromALifted = br.Yields.ConvertAll(t => solver.ApplySubstitution(t, A.RegVar, regVar_1));
                    var inputsToB         = ConsList <TERM> .Create(yieldsFromALifted);

                    var regALifted = solver.ApplySubstitution(br.Register, A.RegVar, regVar_1);
                    var res        = this.EvalB(inputsToB, br.State, regALifted, pathCond, qB, regVar_2, stateComposer, Sequence <TERM> .Empty, isFinal);
                    return(res);
                }
                else
                {
                    return(UndefRule <TERM> .Default);
                }
            }
        }
Beispiel #2
0
        public OrderedSet(params T[] ordered_list)
        {
            this.elements = ConsList <T> .Create(ordered_list);

            this.count = (elements == null ? 0 : elements.Count());
        }
Beispiel #3
0
        OrderedSet(IEnumerable <T> ordered_list, int count)
        {
            this.elements = ConsList <T> .Create(ordered_list);

            this.count = count;
        }
Beispiel #4
0
        public OrderedSet(IEnumerable <T> ordered_list)
        {
            this.elements = ConsList <T> .Create(ordered_list);

            this.count = (elements == null ? 0 : elements.Count());
        }