本文整理汇总了C#中Z3Provider.MkBvSub方法的典型用法代码示例。如果您正苦于以下问题:C# Z3Provider.MkBvSub方法的具体用法?C# Z3Provider.MkBvSub怎么用?C# Z3Provider.MkBvSub使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Z3Provider
的用法示例。
在下文中一共展示了Z3Provider.MkBvSub方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TestSTbSimplify
//.........这里部分代码省略.........
var reg1 = solver.MkProj(1, regVar);
var reg0 = solver.MkProj(0, regVar);
STb<FuncDecl, Expr, Sort> parse = new STbModel(solver, "Parse", solver.CharacterSort, outSort, outSort, initReg, 0);
var letter = solver.MkOr(//solver.MkAnd(solver.MkCharLe(solver.MkCharExpr('\xC0'), solver.CharVar),
// solver.MkCharLe(solver.CharVar, solver.MkCharExpr('\xFF'))),
solver.MkAnd(solver.MkCharLe(solver.MkCharExpr('a'), solver.CharVar),
solver.MkCharLe(solver.CharVar, solver.MkCharExpr('z'))),
solver.MkAnd(solver.MkCharLe(solver.MkCharExpr('A'), solver.CharVar),
solver.MkCharLe(solver.CharVar, solver.MkCharExpr('Z'))));
//var not_letter = solver.MkNot(letter);
var digit = solver.MkAnd(solver.MkCharLe(solver.MkCharExpr('0'), solver.CharVar),
solver.MkCharLe(solver.CharVar, solver.MkCharExpr('9')));
var nl = solver.MkEq(solver.CharVar, solver.MkCharExpr('\n'));
var space = solver.MkEq(solver.CharVar, solver.MkCharExpr(' '));
//var not_nl = solver.MkNot(nl);
var _0 = solver.MkNumeral((int)'0', bv32);
//var z = solver.Z3.MkFreshConst("z", solver.CharacterSort);
//var constr = solver.MkNot(solver.Z3.MkExists(new Expr[] { z }, nl.Substitute(solver.CharVar, z)));
////var constr = nl.Substitute(solver.CharVar, z);
//solver.Z3S.Push();
//solver.Z3S.Assert((BoolExpr)solver.MkNot(constr));
//var status = solver.Check();
//var m = solver.Z3S.Model;
//var zval = m.Evaluate(z, true);
//solver.Z3S.Pop();
var loop_0 = new BaseRule<Expr>(Sequence<Expr>.Empty, regVar, 0);
var brule0_1 = new BaseRule<Expr>(Sequence<Expr>.Empty, solver.MkTuple(solver.MkListCons(solver.CharVar, reg0), reg1), 1);
var rule0 = new IteRule<Expr>(letter, brule0_1, new IteRule<Expr>(space, loop_0, UndefRule<Expr>.Default));
parse.AssignRule(0, rule0);
var brule1_2 = new BaseRule<Expr>(Sequence<Expr>.Empty, solver.MkTuple(solver.MkListCons(solver.CharVar, reg0), reg1), 2);
var brule_4 = new BaseRule<Expr>(Sequence<Expr>.Empty, regVar, 4);
var rule1 = new IteRule<Expr>(letter, brule1_2, new IteRule<Expr>(space, brule_4, UndefRule<Expr>.Default));
parse.AssignRule(1, rule1);
var brule2_3 = new BaseRule<Expr>(Sequence<Expr>.Empty, solver.MkTuple(solver.MkListCons(solver.CharVar, reg0), reg1), 4);
var rule2 = new IteRule<Expr>(letter, brule2_3, new IteRule<Expr>(space, brule_4, UndefRule<Expr>.Default));
parse.AssignRule(2, rule2);
var bv32var = solver.Z3.MkZeroExt(16, (BitVecExpr)solver.CharVar);
var brule4_5 = new BaseRule<Expr>(Sequence<Expr>.Empty, solver.MkTuple(reg0, solver.MkBvAdd(
solver.MkBvMul(solver.MkNumeral(10,bv32),reg1),
solver.MkBvSub(bv32var,_0))),5);
var rule4 = new IteRule<Expr>(digit, brule4_5, new IteRule<Expr>(space, brule_4, UndefRule<Expr>.Default));
parse.AssignRule(4, rule4);
var brule_0 = new BaseRule<Expr>(Sequence<Expr>.Empty.Append(regVar), initReg, 0);
var brule_7 = new BaseRule<Expr>(Sequence<Expr>.Empty, regVar, 7);
var brule5_6 = new BaseRule<Expr>(Sequence<Expr>.Empty, solver.MkTuple(reg0, solver.MkBvAdd(
solver.MkBvMul(solver.MkNumeral(10, bv32), reg1),
solver.MkBvSub(bv32var, _0))), 6);
var rule5 = new IteRule<Expr>(digit, brule5_6, new IteRule<Expr>(nl, brule_0, new IteRule<Expr>(space, brule_7, UndefRule<Expr>.Default)));
parse.AssignRule(5, rule5);
var brule6_7 = new BaseRule<Expr>(Sequence<Expr>.Empty, solver.MkTuple(reg0, solver.MkBvAdd(
solver.MkBvMul(solver.MkNumeral(10, bv32), reg1),
solver.MkBvSub(bv32var, _0))), 7);
var rule6 = new IteRule<Expr>(digit, brule6_7, new IteRule<Expr>(nl, brule_0, new IteRule<Expr>(space, brule_7, UndefRule<Expr>.Default)));
parse.AssignRule(6, rule6);
var rule7 = new IteRule<Expr>(nl, brule_0, new IteRule<Expr>(space, brule_7, UndefRule<Expr>.Default));
parse.AssignRule(7, rule7);
parse.AssignFinalRule(0, new BaseRule<Expr>(Sequence<Expr>.Empty, initReg, 0));
var comp = utf8decode.Compose(parse);
//utf8decode.ToST().ShowGraph();
//parse.ToST().ShowGraph();
//comp.ToST().ShowGraph();
//var comp1 = new STbSimulator<FuncDecl,Expr,Sort>(comp);
//comp1.Explore();
//Console.WriteLine(comp1.exploredSteps);
//var rules = Array.ConvertAll(comp1.UncoveredMoves.ToArray(), r => new Tuple<int, int>(r.Item3.SourceState, r.Item3.TargetState));
var simpl = comp.Simplify();
Assert.AreEqual<int>(35, comp.StateCount);
Assert.AreEqual<int>(7, simpl.StateCount);
//simpl.ShowGraph();
}