本文整理汇总了C#中Z3Provider.MkAdd方法的典型用法代码示例。如果您正苦于以下问题:C# Z3Provider.MkAdd方法的具体用法?C# Z3Provider.MkAdd怎么用?C# Z3Provider.MkAdd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Z3Provider
的用法示例。
在下文中一共展示了Z3Provider.MkAdd方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TestComposition1
public void TestComposition1()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "zeroA", "oneA", "twoA" }, new int[] { 0, 1, 2 }));
var B = (Z.TT.MkRankedAlphabet("B", Z.IntSort, new string[] { "zeroB", "oneB", "twoB" }, new int[] { 0, 1, 2 }));
var C = (Z.TT.MkRankedAlphabet("C", Z.IntSort, new string[] { "zeroC", "oneC", "twoC" }, new int[] { 0, 1, 2 }));
//(two (plus 1 x0) (one (plus 1 x0) (q x1)) (one (plus 2 x0) (q x2)))
var b = Z.MkApp(B["twoB"],
Z.MkAdd(Z.MkInt(1), A.AttrVar),
B.MkTree("oneB", Z.MkAdd(Z.MkInt(1), A.AttrVar), A.MkTrans(B, 0, 1)),
B.MkTree("oneB", Z.MkAdd(Z.MkInt(2), A.AttrVar), A.MkTrans(B, 0, 2)));
//(two (plus 1 x0) (zero x0) (one (plus 100 x0) (q x2)))
var b2 = Z.MkApp(B["twoB"],
Z.MkAdd(Z.MkInt(1), A.AttrVar),
B.MkTree("zeroB", A.AttrVar),
B.MkTree("oneB", Z.MkAdd(Z.MkInt(9), A.AttrVar), A.MkTrans(B, 0, 2)));
var rule0 = Z.TT.MkTreeRule(A, B, 0, "zeroA", Z.True, B.MkTree("zeroB", A.AttrVar));
var rule1 = Z.TT.MkTreeRule(A, B, 0, "twoA", Z.MkGt(A.AttrVar, Z.MkInt(0)), b);
var rule2 = Z.TT.MkTreeRule(A, B, 0, "twoA", Z.MkGt(A.AttrVar, Z.MkInt(0)), b2);
var rule3 = Z.TT.MkTreeRule(A, B, 0, "oneA", Z.MkGt(A.AttrVar, Z.MkInt(0)), B.MkTree("oneB", A.AttrVar, A.MkTrans(B, 0, 1)));
var trans1 = Z.TT.MkTreeAutomaton(0, A, B, new TreeRule[] { rule0, rule1, rule2, rule3 });
//(two x0 (one (plus 1 x0) (p x1)) (one (plus 2 x0) (p x2)))
var a = A.MkTree("twoA", C.AttrVar,
A.MkTree("oneA", Z.MkAdd(Z.MkInt(1), C.AttrVar), C.MkTrans(A, 1, 1)),
A.MkTree("oneA", Z.MkAdd(Z.MkInt(2), C.AttrVar), C.MkTrans(A, 1, 2)));
var a2 = A.MkTree("zeroA", C.AttrVar);
var rule4 = Z.TT.MkTreeRule(C, A, 1, "twoC", Z.MkGt(C.AttrVar, Z.MkInt(-2)), a);
var rule5 = Z.TT.MkTreeRule(C, A, 1, "zeroC", Z.MkGt(C.AttrVar, Z.MkInt(-3)), a2);
var trans2 = Z.TT.MkTreeAutomaton(1, C, A, new TreeRule[] { rule4, rule5 });
var trans12 = trans2.Compose(trans1);
var rulesOut = trans12.GetRules(trans12.Root, C["twoC"]);
Assert.AreEqual<int>(2, rulesOut.Count);
var rulesOut2 = trans12.GetRules(trans12.Root, C["zeroC"]);
Assert.AreEqual<int>(1, rulesOut2.Count);
var tin = C.MkTree("twoC", Z.MkInt(55), C.MkTree("zeroC", Z.MkInt(66)), C.MkTree("zeroC", Z.MkInt(77)));
var res = trans12[tin];
Assert.AreEqual<int>(2, res.Length);
Assert.AreEqual<int>(3, trans12.RuleCount);
}
示例2: TestRegularLookaheadComposition2
public void TestRegularLookaheadComposition2()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "zeroA", "oneA", "twoA" }, new int[] { 0, 1, 2 }));
var B = (Z.TT.MkRankedAlphabet("B", Z.IntSort, new string[] { "zeroB", "oneB", "twoB" }, new int[] { 0, 1, 2 }));
var C = (Z.TT.MkRankedAlphabet("C", Z.IntSort, new string[] { "zeroC", "oneC", "twoC" }, new int[] { 0, 1, 2 }));
var _0 = Z.MkInt(0);
var _1 = Z.MkInt(1);
var _2 = Z.MkInt(2);
var AB_r0 = Z.TT.MkTreeRule(A, B, 0, "oneA", Z.MkEq(_0, A.AttrVar), B.MkTree("oneB", Z.MkAdd(_1, A.AttrVar), A.MkTrans(B, 1, 1)), new int[][] { new int[] { 1 } });
var AB_r1 = Z.TT.MkTreeRule(A, B, 1, "oneA", Z.MkEq(_1, A.AttrVar), B.MkTree("oneB", Z.MkAdd(_1, A.AttrVar), A.MkTrans(B, 0, 1)), new int[][] { new int[] { 0 } });
var AB_r2 = Z.TT.MkTreeRule(A, B, 1, "oneA", Z.MkEq(_2, A.AttrVar), B.MkTree("zeroB", Z.MkAdd(_1, A.AttrVar)));
//just accept the input if the attribute is 1 and delete the child subtree
var BC_r0 = Z.TT.MkTreeRule(B, C, 0, "oneB", Z.MkEq(_1, B.AttrVar), C.MkTree("zeroC", B.AttrVar));
var AB = Z.TT.MkTreeAutomaton(0, A, B, new TreeRule[] { AB_r0, AB_r1, AB_r2});
var BC = Z.TT.MkTreeAutomaton(0, B, C, new TreeRule[] { BC_r0 });
var AC = TreeTransducer.ComposeR(AB, BC);
Assert.AreEqual<int>(4, AC.RuleCount);
}
示例3: TestRegularLookaheadComposition3
public void TestRegularLookaheadComposition3()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "z", "u", "b" }, new int[] { 0, 1, 2 }));
var B = (Z.TT.MkRankedAlphabet("B", Z.IntSort, new string[] { "z", "u", "b" }, new int[] { 0, 1, 2 }));
var C = (Z.TT.MkRankedAlphabet("C", Z.IntSort, new string[] { "z", "u", "b" }, new int[] { 0, 1, 2 }));
var _0 = Z.MkInt(0);
var _1 = Z.MkInt(1);
var _2 = Z.MkInt(2);
var _7 = Z.MkInt(7);
var AB_r0 = Z.TT.MkTreeRule(A, B, 0, "u", Z.MkLe(_0, A.AttrVar), B.MkTree("u", Z.MkAdd(_1, A.AttrVar), A.MkTrans(B, 1, 1)), new int[][] { new int[] { 3, 1 } });
var AB_r1 = Z.TT.MkTreeRule(A, B, 1, "u", Z.MkLe(_1, A.AttrVar), B.MkTree("u", Z.MkAdd(_1, A.AttrVar), A.MkTrans(B, 0, 1)), new int[][] { new int[] { 2, 0 } });
var AB_r2 = Z.TT.MkTreeRule(A, B, 1, "u", Z.MkEq(_2, A.AttrVar), B.MkTree("z", Z.MkAdd(_1, A.AttrVar)));
var AB_q2 = Z.TT.MkTreeRule(A, B, 2, "u", Z.MkGe(_0, A.AttrVar), null, new int[][] { new int[] { 3 } });
var AB_q3a = Z.TT.MkTreeRule(A, B, 3, "u", Z.MkGe(_1, A.AttrVar), null, new int[][] { new int[] { 2 } });
var AB_q3b = Z.TT.MkTreeRule(A, B, 3, "u", Z.MkEq(_2, A.AttrVar), null);
//just accept the input if the attribute is 1, delete the child subtree and return zeroC(1)
var BC_r0 = Z.TT.MkTreeRule(B, C, 0, "u", Z.MkEq(_1, B.AttrVar), C.MkTree("z", Z.MkAdd(_7, B.AttrVar)));
var AB = Z.TT.MkTreeAutomaton(0, A, B, new TreeRule[] { AB_r0, AB_r1, AB_r2, AB_q2, AB_q3a, AB_q3b });
var BC = Z.TT.MkTreeAutomaton(0, B, C, new TreeRule[] { BC_r0 });
var AC = TreeTransducer.ComposeR(AB, BC);
Assert.AreEqual<int>(5, AC.RuleCount);
}
示例4: TestInvalidAcceptorStateInStart
public void TestInvalidAcceptorStateInStart()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "zero", "one", "two" }, new int[] { 0, 1, 2 }));
Func<int, int, Expr> q = (state, var) => { return A.MkTrans(A, state, var); };
//two(1+x0,one(x1),one(x2))
var b = A.MkTree("two",
Z.MkAdd(Z.MkInt(1), A.AttrVar),
A.MkTree("one", Z.MkAdd(Z.MkInt(1), A.AttrVar), q(0, 1)),
A.MkTree("one", Z.MkAdd(Z.MkInt(2), A.AttrVar), q(0, 2)));
var rule0 = Z.TT.MkTreeRule(A, A, 0, "zero", Z.True, A.MkTree("zero", A.AttrVar));
var rule1 = Z.TT.MkTreeRule(A, A, 0, "one", Z.True, A.MkTree("one", A.AttrVar, q(0, 1)));
var rule2 = Z.TT.MkTreeRule(A, A, 0, "two", Z.True, A.MkTree("two", A.AttrVar, q(0, 2), q(0, 1)));
var rule3 = Z.TT.MkTreeRule(A, A, 1, "two", Z.True, null, new int[] { 1 }, new int[] { 1 });
var rule4 = Z.TT.MkTreeRule(A, A, 1, "zero", Z.True, A.MkTree("zero", A.AttrVar));
try
{
var F = Z.TT.MkTreeAutomaton(0, A, A, new TreeRule[] { rule0, rule1, rule2, rule3, rule4 });
}
catch (AutomataException e)
{
Assert.AreEqual(AutomataExceptionKind.TreeTransducer_InvalidUseOfAcceptorState, e.kind);
}
}
示例5: TestErrorCases
public void TestErrorCases()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "zero", "one", "two" }, new int[] { 0, 1, 2 }));
//two(1+x0,one(x1),one(x2))
var b = A.MkTree("two",
Z.MkAdd(Z.MkInt(1), A.AttrVar),
A.MkTree("one", Z.MkAdd(Z.MkInt(1), A.AttrVar), A.ChildVar(1)),
A.MkTree("one", Z.MkAdd(Z.MkInt(2), A.AttrVar), A.ChildVar(2)));
//add 100 to the attribute of a zero-node
var rule0 = Z.TT.MkTreeRule(A, A, 0, "zero", Z.True, A.MkTree("zero", Z.MkAdd(Z.MkInt(100), A.AttrVar)));
//keep one-nodes unchanged
var rule1 = Z.TT.MkTreeRule(A, A, 0, "one", Z.True, A.MkTree("one", A.AttrVar, A.ChildVar(1)));
//apply transformation to the second child and swap it with the first child
var rule2 = Z.TT.MkTreeRule(A, A, 0, "two", Z.True, A.MkTree("two", A.AttrVar, A.MkTrans(A, 1, 2), A.ChildVar(1)));
try
{
var F = Z.TT.MkTreeAutomaton(0, A, A, new TreeRule[] { rule0, rule1, rule2 });
Assert.IsTrue(false, "must not reach this line");
}
catch (AutomataException e)
{
Assert.AreEqual(AutomataExceptionKind.TreeTransducer_InvalidStateId, e.kind);
}
try
{
var rule2b = Z.TT.MkTreeRule(A, A, 0, "two", Z.True, A.MkTree("two", A.AttrVar, A.MkTrans(A, 0, 3), A.ChildVar(1)));
var F = Z.TT.MkTreeAutomaton(0, A, A, new TreeRule[] { rule0, rule1, rule2b });
Assert.IsTrue(false, "must not reach this line");
}
catch (AutomataException e)
{
Assert.AreEqual(AutomataExceptionKind.RankedAlphabet_ChildAccessorIsOutOufBounds, e.kind);
}
}
示例6: TestCompositionCornerCase2
public void TestCompositionCornerCase2()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "zero", "one", "two" }, new int[] { 0, 1, 2 }));
var q0 = Z.MkInt(0);
Func<int, int, Expr> q = (state, var) =>
{
return A.MkTrans(A, state, var);
};
//two(1+x0,one(x1),one(x2))
var b = A.MkTree("two",
Z.MkAdd(Z.MkInt(1), A.AttrVar),
A.MkTree("one", Z.MkAdd(Z.MkInt(1), A.AttrVar), q(0,1)),
A.MkTree("one", Z.MkAdd(Z.MkInt(2), A.AttrVar), q(0,1)));
//add 100 to the attribute of a zero-node
var rule00 = Z.TT.MkTreeRule(A, A, 0, "zero", Z.True, A.MkTree("zero", Z.MkAdd(Z.MkInt(100),A.AttrVar)));
//keep one-nodes unchanged
var rule01 = Z.TT.MkTreeRule(A, A, 0, "one", Z.True, A.MkTree("one", A.AttrVar, q(1,1)));
//apply transformation to the second child and swap it with the first child
var rule02 = Z.TT.MkTreeRule(A, A, 0, "two", Z.True, A.MkTree("two", A.AttrVar, A.MkTrans(A, 0, 2), q(1,1)));
//identity mapping
var rule10 = Z.TT.MkTreeRule(A, A, 1, "zero", Z.True, A.MkTree("zero", A.AttrVar));
var rule11 = Z.TT.MkTreeRule(A, A, 0, "one", Z.True, A.MkTree("one", A.AttrVar, q(1, 1)));
var rule12 = Z.TT.MkTreeRule(A, A, 0, "two", Z.True, A.MkTree("two", A.AttrVar, q(1, 1), q(1, 2)));
var F = Z.TT.MkTreeAutomaton(0, A, A, new TreeRule[] { rule00, rule01, rule02, rule10, rule11, rule12 });
var FF = F.Compose(F);
var t1 = A.MkTree("two", Z.MkInt(22), A.MkTree("zero", Z.MkInt(5)), A.MkTree("zero", Z.MkInt(6)));
var t2 = A.MkTree("two", Z.MkInt(22), A.MkTree("zero", Z.MkInt(106)), A.MkTree("zero", Z.MkInt(5)));
var t3 = A.MkTree("two", Z.MkInt(22), A.MkTree("zero", Z.MkInt(105)), A.MkTree("zero", Z.MkInt(106)));
var t4 = A.MkTree("two", Z.MkInt(22), A.MkTree("zero", Z.MkInt(206)), A.MkTree("zero", Z.MkInt(105)));
var FFF = FF.Compose(F);
//Assert.AreEqual(3, FFF.Rules.Count);
var s2 = F[t1][0];
var s3 = FF[t1][0];
var s4 = FFF[t1][0];
Assert.AreEqual<Expr>(t2, s2);
Assert.AreEqual<Expr>(t3, s3);
Assert.AreEqual<Expr>(t4, s4);
}
示例7: TestCompositionCornerCase1
public void TestCompositionCornerCase1()
{
Z3Provider Z = new Z3Provider();
var A = (Z.TT.MkRankedAlphabet("A", Z.IntSort, new string[] { "zero", "one", "two" }, new int[] { 0, 1, 2 }));
var q0 = Z.MkInt(0);
Func<int, int, Expr> q = (state,var) =>
{
return A.MkTrans(A, state, var);
};
//two(1+x0,one(x1),one(x2))
var b = A.MkTree("two",
Z.MkAdd(Z.MkInt(1), A.AttrVar),
A.MkTree("one", Z.MkAdd(Z.MkInt(1), A.AttrVar), q(0,1)),
A.MkTree("one", Z.MkAdd(Z.MkInt(2), A.AttrVar), q(0,2)));
var rule0 = Z.TT.MkTreeRule(A, A, 0, "zero", Z.True, A.MkTree("zero", A.AttrVar));
var rule1 = Z.TT.MkTreeRule(A, A, 0, "one", Z.True, A.MkTree("one", A.AttrVar, q(0,1)));
var rule2 = Z.TT.MkTreeRule(A, A, 0, "two", Z.True, A.MkTree("two", A.AttrVar, q(0,2), q(0,1)));
var F = Z.TT.MkTreeAutomaton(0, A, A, new TreeRule[] { rule0, rule1, rule2 });
var FF = F.Compose(F);
var t1 = A.MkTree("two", Z.MkInt(22), A.MkTree("zero", Z.MkInt(5)), A.MkTree("zero", Z.MkInt(6)));
var t2 = A.MkTree("two", Z.MkInt(22), A.MkTree("zero", Z.MkInt(6)), A.MkTree("zero", Z.MkInt(5)));
var FFF = FF.Compose(F);
Assert.AreEqual(3, FFF.RuleCount);
var s1 = F[t1][0];
var s2 = FF[t1][0];
var s3 = FFF[t1][0];
Assert.AreEqual<Expr>(t2, s1);
Assert.AreEqual<Expr>(t1, s2);
Assert.AreEqual<Expr>(t2, s3);
}
示例8: 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());
}