internal override BranchingRule <TERM> Concretize1(TERM path, IContextCore <TERM> solver, Func <TERM, TERM> fBP, Func <TERM, TERM> fNBP, Func <int, TERM, int> stateMap, TERM newReg, TERM inputVar) { TERM path_and_cond = solver.MkAnd(path, condition); TERM path_and_not_cond = solver.MkAnd(path, solver.MkNot(condition)); var t = trueCase.Concretize1(path_and_cond, solver, fBP, fNBP, stateMap, newReg, inputVar); var f = falseCase.Concretize1(path_and_not_cond, solver, fBP, fNBP, stateMap, newReg, inputVar); return(new IteRule <TERM>(condition, t, f)); }
internal override BranchingRule <TERM> Concretize1(TERM path, IContextCore <TERM> solver, Func <TERM, TERM> fBP, Func <TERM, TERM> fNBP, Func <int, TERM, int> stateMap, TERM newReg, TERM inputVar) { TERM defaultcond = solver.True; var cases1 = new KeyValuePair <TERM, BranchingRule <TERM> > [cases.Length]; for (int i = 0; i < cases.Length; i++) { var cond = solver.MkEq(input, cases[i].Key); defaultcond = And(solver, defaultcond, solver.MkNot(cond)); cases1[i] = new KeyValuePair <TERM, BranchingRule <TERM> >(cases[i].Key, cases[i].Value.Concretize1(And(solver, path, cond), solver, fBP, fNBP, stateMap, newReg, inputVar)); } var defaultcase1 = defaultcase.Concretize1(And(solver, path, defaultcond), solver, fBP, fNBP, stateMap, newReg, inputVar); var rule = new SwitchRule <TERM>(input, defaultcase1, cases1); return(rule); }