新博客文章:我写的一些傻乎乎的Z3脚本

Hillel Wayne — Computer Things 工具

摘要

Hillel Wayne分享了他编写的Z3脚本,讨论了逻辑性质方面的挑战以及他即将出版的书籍Logic for Programmers中的“糟粕”概念。

<p>现在我不再把所有时间花在Logic for Programmers上了,所以有时间再次更新我的网站!这是五个月来的第一篇博客文章:<a href="https://www.hillelwayne.com/post/z3-examples/" target="_blank">我写的一些傻乎乎的Z3脚本</a>。</p> <p>通常我还会放上Patreon笔记的链接,但我决定不喜欢发布有门槛的内容,所以打算逐渐停止整个东西。下面是这篇帖子的一些快速说明:</p> <ul> <li>部分目的诚然是为了炒作LfP的最终发布。我想开始营销这本书,但又不想让营销材料缺乏趣味性,所以那些与书籍相关但独立的博客文章是一个不错的起点。</li> <li>这篇文章讨论了“糟粕”的概念,即大量未收录进书中的材料(包括代码示例和散文)。这本书大约有5万字……但比糟粕的总量要少得多!我不<em>认为</em>大部分糟粕能变成有用的公开帖子,但我也不完全反对这个想法。也许有些旧章节可以改造成什么东西?</li> <li>想出一个需要证明的条件数学性质很费劲。我有两个候选:<code>a == b * c =&gt; a / b == c</code>,这需要大篇幅讨论在Z3中除法必须是全函数;以及<code>a != 0 =&gt; some b: b * a == 1</code>,这需要引入量词(SMT在处理量词时真的很奇怪)。除零已经让我够头疼了,所以我选择了后者。这确实意味着在讨论数组时,我必须重新引入“运算必须是全函数”的概念。</li> <li>我不知道为什么数组示例在最大利润上返回<code>2</code>而不是<code>99999999</code>。我猜当问题定义不良时,优化器中存在某种短路逻辑?</li> <li>有一个例子我没能跑通,非常遗憾,那就是通过将哥德巴赫猜想编码为SMT问题来展示SMT求解器是不可判定的。任何涉及多重嵌套量词的问题都很麻烦。</li> </ul>
查看原文
查看缓存全文

缓存时间: 2026/05/16 03:39

# 新博客文章:我写的一些蠢萌 Z3 脚本 来源:https://buttondown.com/hillelwayne/archive/new-blog-post-some-silly-z3-scripts-i-wrote 既然现在我不再把所有时间花在《Logic for Programmers》上,就有时间更新我的网站了!所以,这是五个月来的第一篇博客文章:[一些我写的蠢萌 Z3 脚本](https://www.hillelwayne.com/post/z3-examples/)。 通常我还会放一个 Patreon 笔记的链接,但我决定不再喜欢发布付费内容,并且打算逐步关闭那整个功能。所以,关于这篇文章的一些简短说明: * 部分目的诚然是为《LfP》的最终发布造势。我想开始宣传这本书,但又不希望宣传材料毫无趣味,所以一些与之相关但独立的博客文章是一个很好的起点。 * 这篇文章讨论了“冗余内容”(chaff)这个概念,即大量未能收录进书中的素材(包括代码示例和散文)。这本书大约有 5 万字……而且比总量庞大的“冗余内容”短得多!我 *不认为* 大部分内容可以转化为有用的公开文章,但我也不完全反对这个想法。也许有些老章节可以改造成点什么? * 构思一个需要证明的条件数学性质相当困难。我有两个候选:`a == b * c => a / b == c`,这需要大篇幅讨论为什么 Z3 中的除法必须是总量的;以及 `a != 0 => some b: b * a == 1`,这需要引入一个量词(SMT 在处理量词方面真的很奇怪)。除以零的问题已经给我带来了足够多的麻烦,所以我选择了后者。这意味着在讨论数组时,我必须重新引入“操作必须是总量的”这一概念。 * 我完全不知道为什么数组示例返回的利润最大值是 `2` 而不是 `99999999`。我猜是当问题定义不明确时,优化器存在某种短路逻辑? * 有一个例子我没能让它工作,这很可惜:将哥德巴赫猜想编码为 SMT 问题,以此展示 SMT 求解器是不可判定的。任何包含多层嵌套量词的问题都很棘手。 *如果你是在网页上读到这篇文章,可以[在此订阅](https://buttondown.com/hillelwayne)。每周更新一次。我的主站是[这里](https://www.hillelwayne.com/)。* *我的新书《Logic for Programmers》现已进入早期访问阶段![在此获取](https://leanpub.com/logic/)。*

相似文章

《Logic for Programmers》食物募捐活动只剩一周

Hillel Wayne — Computer Things

Hillel Wayne为其书籍《Logic for Programmers》提供折扣,以此推广为Greater Chicago Food Depository举办的募捐活动,并分享了关于结构化并发和goto语句历史的技术笔记。

我对Prolog的不满

Hillel Wayne — Computer Things

Hillel Wayne的一篇博文,详细讲述了他对Prolog编程语言的不满,包括字符串问题、缺乏函数、数据类型有限以及cut操作等。

256行或更少:测试用例最小化

Lobsters Hottest

一篇技术博客文章,描述了作者用约256行Zig代码实现的极简属性测试库,该库具有用于可复现测试用例生成和算法验证的有限随机数生成器。