Может ли кто-нибудь помочь? Когда я попытался запустить этот код, я получил эту ошибку:Ошибка при запуске Z3 в C#
" Could not load file or assembly 'Microsoft.Z3, Version=4.0.0.0, Culture=neutral, PublicKeyToken=9c8d792caae602a2' or one of its dependencies. An attempt was made to load a program with an incorrect format "
Вот код:
class Program
{
static void Main(string[] args)
{
using (Context ctx = new Context())
{
RealExpr c = ctx.MkRealConst("c");
BoolExpr Eqzero = ctx.MkGt(c, ctx.MkReal(0));
BoolExpr Gezero = ctx.MkGe(c, ctx.MkReal(0));
BoolExpr Lttwo = ctx.MkLt(c, ctx.MkReal(2));
BoolExpr Gtthree = ctx.MkGt(c, ctx.MkReal(3));
BoolExpr b1 = ctx.MkBoolConst("b1");
BoolExpr b2 = ctx.MkBoolConst("b2");
BoolExpr b3 = ctx.MkBoolConst("b3");
BoolExpr b0 = ctx.MkBoolConst("b0");
RealExpr[] lamb = new RealExpr[1];
lamb[0] = ctx.MkRealConst("lamb");
BoolExpr temp = ctx.MkAnd(ctx.MkGt(lamb[0], ctx.MkReal(0)), ctx.MkEq(b0, ctx.MkTrue()), ctx.MkEq(b1, ctx.MkTrue()), ctx.MkGe(ctx.MkAdd(c, lamb[0]), ctx.MkReal(0)), ctx.MkLe(ctx.MkAdd(c, lamb[0]), ctx.MkReal(3)), ctx.MkGe(c, ctx.MkReal(0)), ctx.MkLe(c, ctx.MkReal(3)));
BoolExpr exist = ctx.MkExists(lamb, temp, 1, null, null, ctx.MkSymbol("Q2"), ctx.MkSymbol("skid2"));
Console.WriteLine(exist.ToString());
Solver s1 = ctx.MkSolver();
s1.Assert(exist);
if (s1.Check() == Status.SATISFIABLE)
{
Console.WriteLine("get pre");
Console.Write(s1);
}
else
{
Console.WriteLine("Not reach");
}
Console.ReadKey();
}
}
}
}
Я думаю, что вы ссылаетесь на 32-разрядную «Microsoft.Z3.dll» на 64-битной машине или наоборот. Убедитесь, что вы ссылаетесь на правую версию Z3 и проверяете процедуру компиляции в комментариях к этой теме: http://stackoverflow.com/questions/10663994/evaluation-of-a-logical-formula-at-many-values-in-z3 – pad
спасибо, но я переписывал 64-разрядную версию Microsoft.Z3.dll в 64-разрядной машине – user1327010