本文整理汇总了C#中Z3Provider.MkProj方法的典型用法代码示例。如果您正苦于以下问题:C# Z3Provider.MkProj方法的具体用法?C# Z3Provider.MkProj怎么用?C# Z3Provider.MkProj使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Z3Provider
的用法示例。
在下文中一共展示了Z3Provider.MkProj方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: getAutomata
internal override Automaton<Expr> getAutomata(Z3Provider z3p, List<string> variables, Expr universe, Expr var, Sort sort)
{
//var bit1 = z3p.Z3.MkInt2Bv(1,
// z3p.MkInt(1));
var bit1 = z3p.Z3.MkInt2BV(BVConst.BVSIZE, (IntExpr)z3p.MkInt(1));
//Sort for pairs (input theory, BV)
var bv = z3p.Z3.MkBitVecSort(BVConst.BVSIZE);
var pairSort = z3p.MkTupleSort(sort, bv);
//Add the representation of the existential variable to the list of variables
var newVariables = variables.ToArray().ToList();
newVariables.Insert(0, variable);
//Compute the DFA for the formula phi
var phiDfa = phi.getAutomata(z3p, newVariables, universe, var, sort);
//Compute the new moves by dropping the last bit of every element in the phiMoves
var newMoves = Automaton<Expr>.Empty.GetMoves().ToList();
foreach (var oldMove in phiDfa.GetMoves())
{
var oldCond = oldMove.Label;
var t = z3p.MkProj(1,var);
//Compute the new conditions
var newCond0 = z3p.ApplySubstitution(oldCond, t,
z3p.Z3.MkBVSHL((BitVecExpr)t, (BitVecExpr)bit1));
var newCond1 = z3p.ApplySubstitution(oldCond, t,
z3p.MkBvAdd(
z3p.Z3.MkBVSHL((BitVecExpr)t, (BitVecExpr)bit1),
bit1));
//Update the new set of moves
newMoves.Add(new Move<Expr>(oldMove.SourceState, oldMove.TargetState, z3p.MkOr(z3p.Simplify(newCond0),z3p.Simplify(newCond1))));
}
//Build the new dfa with the new moves
return Automaton<Expr>.Create(phiDfa.InitialState, phiDfa.GetFinalStates(), newMoves);
//.Determinize(z3p).MinimizeClassical(z3p, int.MaxValue,false);
}
示例2: TestFastGeneration
public void TestFastGeneration()
{
Z3Provider Z = new Z3Provider();
Sort color = Z.MkEnumSort("Color", "blue", "green", "red");
string enum_sort_name = color.Name.ToString();
Assert.AreEqual<string>("Color", enum_sort_name);
Assert.AreEqual<string>("green", Z.GetEnumElement("Color", "green").FuncDecl.Name.ToString());
FuncDecl[] fields = new FuncDecl[5];
FuncDecl mkTuple;
Sort attrSort = Z.MkTupleSort("$", new string[] { "i", "b", "e", "s", "r" }, new Sort[] { Z.IntSort, Z.BoolSort, color, Z.StringSort, Z.RealSort }, out mkTuple, out fields);
string tuple_sort_name = attrSort.Name.ToString();
string tuple_contructor_name = mkTuple.Name.ToString();
Assert.AreEqual<string>("$", tuple_sort_name);
Assert.AreEqual<string>("$", tuple_contructor_name);
Assert.AreEqual<string>("i", fields[0].Name.ToString());
Assert.AreEqual<string>("b", fields[1].Name.ToString());
Assert.AreEqual<string>("e", fields[2].Name.ToString());
Assert.AreEqual<string>("Int", Z.GetRange(fields[0]).Name.ToString());
Assert.AreEqual<string>("Bool", Z.GetRange(fields[1]).Name.ToString());
Assert.AreEqual<string>("Color", Z.GetRange(fields[2]).Name.ToString());
var A = (Z.TT.MkRankedAlphabet("A", attrSort, new string[] { "zero", "one", "two" }, new int[] { 0, 1, 2 }));
Expr _i_plus_1 = Z.MkApp(mkTuple, Z.MkAdd(Z.MkProj(0, A.AttrVar), Z.MkInt(1)), Z.True,
Z.MkIte(Z.MkGe(Z.MkProj(0, A.AttrVar), Z.MkInt(4)), Z.GetEnumElement("Color", "green"), Z.GetEnumElement("Color", "blue")), Z.MkProj(3, A.AttrVar), Z.MkAdd(Z.MkProj(4, A.AttrVar), Z.MkNumeral("9/3", Z.RealSort)));
Expr _i_plus_1_foo = Z.MkApp(mkTuple, Z.MkAdd(Z.MkProj(0, A.AttrVar), Z.MkInt(1)), Z.True,
Z.MkIte(Z.MkGe(Z.MkProj(0, A.AttrVar), Z.MkInt(4)), Z.GetEnumElement("Color", "green"), Z.GetEnumElement("Color", "blue")), Z.MkListFromString("foo", Z.CharacterSort), Z.MkNumeral("5.06", Z.RealSort));
var proj = Z.GetTupleField(attrSort, 0);
var proj_term = Z.MkApp(proj, _i_plus_1);
var proj_term2 = Z.MkProj(0, _i_plus_1);
var r1 = Z.TT.MkTreeRule(A, A, 0, "two", Z.MkGe(Z.MkProj(0, A.AttrVar), Z.MkInt(2)),
A.MkTree("two", _i_plus_1, A.MkTree("one", _i_plus_1, A.MkTrans(A, 0, 1)),
A.MkTree("two", _i_plus_1, A.MkTrans(A, 0, 2), A.MkTrans(A, 1, 2))));
var r2 = Z.TT.MkTreeRule(A, A, 1, "two", Z.MkLe(Z.MkProj(0, A.AttrVar), Z.MkInt(5)),
A.MkTree("two", _i_plus_1, A.MkTree("one", _i_plus_1, A.MkTrans(A, 0, 1)),
A.MkTree("two", _i_plus_1, A.MkTrans(A, 0, 1), A.MkTrans(A, 1, 2))));
var r3 = Z.TT.MkTreeRule(A, A, 1, "one", Z.True, A.MkTree("zero", _i_plus_1));
var r4 = Z.TT.MkTreeRule(A, A, 0, "one", Z.True, A.MkTree("zero", _i_plus_1_foo));
var r5 = Z.TT.MkTreeRule(A, A, 0, "zero", Z.True, A.MkTree("zero", _i_plus_1_foo));
var T = Z.TT.MkTreeAutomaton(0, A, A, new TreeRule[] { r1, r2, r3, r4, r5 });
var D = T.ComputeDomainAcceptor();
var sb = new StringBuilder();
var fastgen = new FastGen(Z);
fastgen.ToFast(enum_sort_name, sb);
fastgen.ToFast(A, sb);
fastgen.ToFast("A", T, sb, false);
fastgen.GetStateName = (x => "p_" + x);
fastgen.ToFast("A", D, sb, true);
Console.WriteLine(sb.ToString());
}
示例3: TestSTbSimplify
public void TestSTbSimplify()
{
string utf8decode_bek = @"
function fuse(r,c) = ((r << 6) | (c & 0x3F));
function one(c) = ((0 <= c) && (c <= 0x7F));
function C2_DF(c) = ((0xC2 <= c) && (c <= 0xDF));
function E1_EF(c) = ((0xE1 <= c) && (c <= 0xEF));
function A0_BF(c) = ((0xA0 <= c) && (c <= 0xBF));
function x80_BF(c) = ((0x80 <= c) && (c <= 0xBF));
function x80_9F(c) = ((0x80 <= c) && (c <= 0x9F));
program utf8decode(input){
return iter(c in input)[q := 0; r := 0;]
{
case (q == 0):
if (one(c)) {yield (c);}
else if (C2_DF(c)) {q := 2; r := (c & 0x1F);} // ------ 2 bytes --------
else if (c == 0xE0) {q := 4; r := (c & 0x0F);} // ------ 3 bytes --------
else if (c == 0xED) {q := 5; r := (c & 0x0F);} // ------ 3 bytes --------
else if (E1_EF(c)) {q := 3; r := (c & 0x0F);} // ------ 3 bytes --------
else {raise InvalidInput;}
case (q == 2):
if (x80_BF(c)) {q := 0; yield(fuse(r,c)); r := 0;}
else {raise InvalidInput;}
case (q == 3):
if (x80_BF(c)) {q := 2; r := fuse(r,c);}
else {raise InvalidInput;}
case (q == 4):
if (A0_BF(c)) {q := 2; r := fuse(r,c);}
else {raise InvalidInput;}
case (q == 5):
if (x80_9F(c)) {q := 2; r := fuse(r,c);}
else {raise InvalidInput;}
end case (!(q == 0)):
raise InvalidInput;
};
}
";
Z3Provider solver = new Z3Provider(BitWidth.BV16);
var dec = BekConverter.BekToSTb(solver, utf8decode_bek);
var utf8decode = dec.ExploreBools();
Sort bv32 = solver.MkBitVecSort(32);
Sort outSort = solver.MkTupleSort(solver.StringSort, bv32);
var initReg = solver.MkTuple(solver.GetNil(solver.StringSort), solver.MkNumeral(0,bv32));
var regVar = solver.MkVar(1,outSort);
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);
//.........这里部分代码省略.........