z3 解数

2023-11-23

如何使用 z3 来计算解的数量?例如,我想证明对于任何n,方程组有 2 个解{x^2 == 1, y_1 == 1, ..., y_n == 1}。以下代码显示了给定的可满足性n,这不完全是我想要的(我想要任意的解决方案数量n).

#!/usr/bin/env python

from z3 import *

# Add the equations { x_1^2 == 1, x_2 == 1, ... x_n == 1 } to s and return it.
def add_constraints(s, n):
    assert n > 1
    X = IntVector('x', n)
    s.add(X[0]*X[0] == 1)
    for i in xrange(1, n):
        s.add(X[i] == 1)
    return s

s = Solver()
add_constraints(s, 3)
s.check()
s.model()

如果解的数量有限,您可以使用不等于指定模型值的常量(您的 x_i)的析取来枚举所有解。如果存在无限解(如果你想证明所有自然数 n 就是这种情况),你可以使用相同的技术,但当然不能枚举它们,但可以使用它来生成许多解,最多可达有些绑定你选择。如果您想对所有 n > 1 证明这一点,则需要使用量词。我在下面添加了对此的讨论。

虽然您没有完全问这个问题,但您也应该看到这个问题/答案:Z3:找到所有满意的模型

这是执行此操作的示例(此处为 z3py 链接:http://rise4fun.com/Z3Py/643M ):

    # Add the equations { x_1^2 == 1, x_2 == 1, ... x_n == 1 } to s and return it.
def add_constraints(s, n, model):
    assert n > 1
    X = IntVector('x', n)
    s.add(X[0]*X[0] == 1)
    for i in xrange(1, n):
        s.add(X[i] == 1)

    notAgain = []
    i = 0
    for val in model:
      notAgain.append(X[i] != model[val])
      i = i + 1
    if len(notAgain) > 0:
      s.add(Or(notAgain))
      print Or(notAgain)
    return s

for n in range(2,5):
  s = Solver()
  i = 0
  add_constraints(s, n, [])
  while s.check() == sat:
    print s.model()
    i = i + 1
    add_constraints(s, n, s.model())
  print i # solutions

如果您想证明对于任何 n 选择都没有其他解决方案,则需要使用量词,因为以前的方法仅适用于有限的 n(并且它很快就会变得非常昂贵)。这是显示此证明的编码。您可以对此进行概括,将前一部分中的模型生成功能纳入其中,从而得出更通用公式的 +/- 1 解决方案。如果方程有多个与 n 无关的解(如您的示例中所示),这将允许您证明方程具有有限数量的解。如果解决方案的数量是 n 的函数,您就必须找出该函数。 z3py链接:http://rise4fun.com/Z3Py/W9En

x = Function('x', IntSort(), IntSort())
s = Solver()
n = Int('n')
# theorem says that x(1)^2 == 1 and that x(1) != +/- 1, and forall n >= 2, x(n) == 1
# try removing the x(1) != +/- constraints
theorem = ForAll([n], And(Implies(n == 1, And(x(n) * x(n) == 1, x(n) != 1, x(n) != -1) ), Implies(n > 1, x(n) == 1)))
#s.add(Not(theorem))
s.add(theorem)
print s.check()
#print s.model() # unsat, no model available, no other solutions
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

z3 解数 的相关文章

  • 如何避免使用 python 处理空的标准输入?

    The sys stdin readline 返回之前等待 EOF 或新行 所以如果我有控制台输入 readline 等待用户输入 相反 我想打印帮助并在没有需要处理的情况下退出并显示错误 而不是等待用户输入 原因 我正在寻找一个Pytho
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 多处理中的动态池大小?

    有没有办法动态调整multiprocessing Pool尺寸 我正在编写一个简单的服务器进程 它会产生工作人员来处理新任务 使用multiprocessing Process对于这种情况可能更适合 因为工作人员的数量不应该是固定的 但我需
  • 如何通过 python 多处理利用所有核心

    我一直在摆弄Python的multiprocessing现在已经使用了一个多小时的功能 尝试使用并行化相当复杂的图形遍历函数multiprocessing Process and multiprocessing Manager import
  • 使用 Paramiko 进行 DSA 密钥转发?

    我正在使用 Paramiko 在远程服务器上执行 bash 脚本 在其中一些脚本中 存在与其他服务器的 ssh 连接 如果我只使用 bash 不使用 Python 我的 DSA 密钥将被第一个远程服务器上的 bash 脚本转发并使用 以连接
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • Arcpy 模数在 Pycharm 中不显示

    如何将 Arcpy 集成到 Pycharm 中 我尝试通过导入模块但它没有显示 我确实知道该模块仅适用于 2 x python arcpy 在 PyPi Python 包索引 上不可用 因此无法通过 pip 安装 要使用 arcpy 您需要
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • 如何使用scrapy检查网站是否支持http、htts和www前缀

    我正在使用 scrapy 来检查某些网站是否工作正常 当我使用http example com https example com or http www example com 当我创建 scrapy 请求时 它工作正常 例如 在我的pa
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • pandas 相当于 np.where

    np where具有向量化 if else 的语义 类似于 Apache Spark 的when otherwise数据帧方法 我知道我可以使用np where on pandas Series but pandas通常定义自己的 API
  • 如何查找或安装适用于 Python 的主题 tkinter ttk

    过去 3 个月我一直在制作一个机器人 仅用代码就可以完美运行 现在我的下一个目标是为它制作一个 GUI 但是我发现了一些障碍 主要的一个是能够看起来不像一个 30 年前的程序 我使用的是 Windows 7 我仅使用 Python 3 3
  • 是否需要关闭没有引用它们的文件?

    作为一个完全的编程初学者 我试图理解打开和关闭文件的基本概念 我正在做的一项练习是创建一个脚本 允许我将内容从一个文件复制到另一个文件 in file open from file indata in file read out file
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • 无法通过 Python 子进程进行 SSH

    我需要通过堡垒 ssh 进入机器 因此 该命令相当长 ssh i
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型

随机推荐

  • 执行大查询时内存不足?

    我在尝试进行大查询时收到此错误 java lang OutOfMemoryError Java heap space 我搜索过并发现申请设置自动提交 假 and 设置获取大小我准备好的语句的方法可能有助于处理大查询 然而 当我使用它时 我收
  • 将长sql vba语句分成多行

    我对 VBA 环境完全陌生 我试图将这一行分成多行 但失败了 有人可以帮我把这段代码分成多行吗 DoCmd RunSQL UPDATE INDIVIDUAL SET INDIVIDUAL INDI FIRSTNAME prospect co
  • Ruby 在 Windows 上崩溃

    我面临着这里描述的同样的问题 为什么 ruby exe 遇到了问题并且需要关闭 rails 失败 那是 ruby 崩溃并出现以下错误 ruby exe has encountered a problem and needs to close
  • 不是有效 python 标识符的属性

    通常的属性访问方法要求属性名称是有效的 python 标识符 但属性不必是有效的 python 标识符 gt gt gt class Thing def init self setattr self 0potato 123 gt gt gt
  • 更改表并添加 UNIQUE 键会导致错误

    我有一张桌子叫Animal AnimalId是主键 我想设置该列AnimalType id作为独特的 我有一个AnimalType表并需要在此处设置外键 ALTER TABLE Animal ADD UNIQUE Animal Animal
  • 在 WebAPI 方法中返回 HTTP 403

    我如何返回HTTP 403 from a WebAPI方法 我试过扔一个HttpResponseException with HttpStatusCode Forbidden 我已经尝试过 return request CreateErro
  • 使用奥格登引理与常规泵引理进行上下文无关语法

    我正在学习问题中引理之间的区别 我能找到的每个参考文献都使用以下示例 a i b j c k d l i 0 or j k l 以显示两者之间的差异 我可以找到一个使用常规引理来 反驳 它的例子 选择 w uvxyz s t 维 gt 0
  • ECMAScript 3 在主要浏览器中的实现仍然存在差异吗?

    有人可以指出 ECMAScript 第三版在当今浏览器中的实现差异吗 Chrome Safari IE8 FF 使用 ECMAScript 3 标准 而不是 FF 和 IE 对 JScript 和 JavaScript 的扩展 时我们安全吗
  • C 生成不重复的随机数[重复]

    这个问题在这里已经有答案了 我想生成 1 到 13 之间的随机数而不重复 我用了这个方法 但是并不能保证没有信誉 for i 0 i lt 13 i array i 1 rand 13 请帮我 C语言 正如评论所说 Fill an arra
  • Android 单选按钮取消选中

    该应用程序是一个步进音序器应用程序 具有 16 个无线电组 每组有 8 个按钮 它工作得很好 除非一个组选择了一个按钮 否则我无法将其关闭 除非我使用我创建的清除按钮来清除所有无线电组 我想添加的是一些代码 它表示当再次选择选定的单选按钮时
  • 如何为 iOS 构建 OpenCV 2.4.9?

    我正在关注这些指示属于 openCV 文档 但它们确实已经过时了 提到了 iOS4 或 iOS5 XCode 4 2 安装在 Developer 中 等等 它没有构建 并且我有各种错误 所有初始测试均失败 Performing Test H
  • Angular JS 生成 PDF - 有创建者 - 制作者模块吗?

    正如标题所说 Angular 有 PDF 创建器 生成器吗 我见过https github com MrRio jsPDF 但找不到 Angular 的任何内容 我想将 html 页面制作为 pdf 文件以供下载 您可以将您提到的 Java
  • 无法在我的 C# 应用程序中添加静态端口映射

    我正在尝试在我的 C 应用程序中添加新的静态端口映射 因为我的应用程序作为服务器运行 并且我希望它侦听端口 8000 NATUPNPLib UPnPNATClass upnpnat new NATUPNPLib UPnPNATClass N
  • git:提交多个文件但添加消息

    我的存储库中有大量文件 有时我处理 20 个文件 并且想提交所有文件 但是 我想为每个添加一条消息 如何添加所有已更新的文件并为每个文件添加一条消息 而无需手动为每个文件运行命令 是否可以进行批量运行并提示我为每个运行添加一条消息 注意 您
  • 为什么人们捍卫正则表达式语法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 有一个类似的问题 但它只是得到了人们总是给出的关于正则表达式语法的相同旧答案 但这不是这里的重点 所以请尽量不要下意识地提出关于正则表达式语法的相同旧答案 这次尝试更加原创和个性化 正则表
  • 将 RGB 颜色转换为英文颜色名称,例如使用 Python 的“green”

    我想将颜色元组转换为颜色名称 例如 黄色 或 蓝色 gt gt gt im Image open test jpg gt gt gt n color max im getcolors im size 0 im size 1 gt gt gt
  • 如何以编程方式设置 Admob appID (19.1.0)?

    Before 版本19 1 0 appID 可以通过编程方式设置 如下所示 MobileAds initialize Context context String appID 新方法是 initialize Context OnInitia
  • 从 VS 2015 和 EF7 的模型生成 SQLite 数据库

    我正在尝试利用 Entity Framework 7 和 SQLite 数据库文件制作 Windows Presenter Foundation 应用程序 我已经制作了 edmx 模型 但是当尝试生成模型时我无法建立 SQLite 连接 尝
  • 如何在百里香中转义双引号 " ?

    我想在 Thymeleaf 的字符串中添加双引号 我有以下形式的内容 td td 我想要的结果是 td Value of apple is 1 5 td 但我得到以下异常 EL1065E unexpected escape characte
  • z3 解数

    如何使用 z3 来计算解的数量 例如 我想证明对于任何n 方程组有 2 个解 x 2 1 y 1 1 y n 1 以下代码显示了给定的可满足性n 这不完全是我想要的 我想要任意的解决方案数量n usr bin env python from