用于Z3安装的C#API

本文关键字:C#API 安装 Z3 用于 | 更新日期: 2023-09-27 18:29:02

有人能帮我在Z3中使用C#Api吗。我不知道该怎么办:-(

我在Visual C#2010学习版中编写了以下程序:


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text; 
    using Microsoft.Z3;
    namespace ConsoleApplication1
    {
    class Program
    {
        static void Main(string[] args)
        {
            using (Config cfg = new Config()) {
                using (Context ctx = new Context(cfg)) {
                    Term x = ctx.MkConst("x", ctx.MkIntSort());
                    Term y = ctx.MkConst("y", ctx.MkIntSort());
                    Term zero = ctx.MkConst(0, ctx.MkIntSort());
                    Term one = ctx.MkConst(1, ctx.MkIntSort());
                    Term three = ctx.MkConst(3, ctx.MkIntSort());
                    Term fml = x > zero & ctx.MkEq(y, x + one) & y < three;
                    ctx.AssertCnstr(fml);
                    Model m = null;
                    LBool is_sat = ctx.CheckAndModel(out m);
                    System.Console.WriteLine(is_sat);
                    if (m != null)
                    {
                     m.Display(Console.Out);
                     m.Dispose();
                    }
                }
            }
        }
    }
 }

出现以下错误:


命名空间"Microsoft"中不存在类型或命名空间名称"Z3"(是否缺少程序集引用?)

感谢

用于Z3安装的C#API

要在C#项目中使用Microsoft Z3库,请执行以下步骤:

  1. 转到http://research.microsoft.com/en-us/downloads/0a7db466-c2d7-4c51-8246-07e25900c7e7/下载并安装Z3软件包。

  2. 切换到Visual Studio。在"解决方案资源管理器"窗口中右键单击"引用"树节点,然后选择"添加引用"
    在"添加新引用"对话框中,导航到Microsoft.Z3.dll上c:'Program Files (x86)'Microsoft Research'Z3-3.2'bin下的Microsoft.Z3.dllWindows x64位计算机或c:'Program Files'Microsoft Research'Z3-3.2'bin以下在Windows x86计算机上。要使用Parallel Z3库,请从c:'Program Files (x86)'Microsoft Research'Z3-3.2'bin_mtc:'Program Files'Microsoft Research'Z3-3.2'bin_mt目录。

关于您的代码的一些注意事项:

Context类上没有名为CheckAndModel()的方法。只有一种方法叫做CheckAndGetModel()。此外,形式的MkConst()没有过载

ctx.MkConst(1, ctx.MkIntSort());

相反,使用以下过载:

ctx.MkConst("1", ctx.MkIntSort());

注意:

ctx.MkConst("1", ctx.MkIntSort());

不是数字1,而是一个未解释的常量,其名称为"1"。

如果你想要一个数字,那么使用:

ctx.MkNumeral(1, ctx.MkIntSort());