SMT算法基础
Basics of SMT algorithm
我不是计算机科学专业的学生,对算法或命题逻辑不是很了解。但是,我确实在一个项目中使用了 SMT 求解器,并且想对算法的工作原理有一个基本的了解?
我基本上有一个功能
f(x)=(p_0)x+(p_1)x^2+(p_2)x^3+...(p_n)^x^n
和一组等式,例如
f(x)>0
f(x)<1
f(x)+f'(x)f(x)<0.5
SMT 求解器 z3 通过检查给定约束对一组数据样本的可满足性来计算系数 p_0,p_1...,p_n
。
你能用非常简单的术语帮助我理解这到底是怎么发生的吗?它会搜索 p 的整个样本 space 吗?
您可以将 SMT 视为一种出色的搜索算法,但这会极具误导性:它比这更智能、更复杂。特别是,它确实 而不是 搜索整个样本 space,正如您所说的那样。 (想象一下:SMT 求解器可以处理无界整数和实数:不可能穷尽地搜索这些。)
不幸的是,这个问题太宽泛,无法在堆栈溢出的上下文中回答,但幸运的是,有许多优秀的参考资料非常值得您花时间通读。这是我最喜欢的两个:
"Decision procedures" 一书 http://www.decision-procedures.org/ 是一本很好的读物,其中有许多参考文献可以帮助您进入文献。这本书告诉您所有关于 SMT 求解器中用于不同逻辑的算法,如果您有兴趣构建一个算法,它甚至会指导您。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.367.9961&rep=rep1&type=pdf 是 Leonardo 和 Nikolaj(z3 的主要开发人员)撰写的一篇优秀文章。它提供了一个很好的概述,如果您只对应用程序感兴趣,它会更容易阅读。
我建议从后者开始,并使用其中的参考资料根据您的兴趣进一步研究该领域。如果您遇到困难,有许多优秀的文章、教程和友好的堆栈溢出社区可以提供帮助!
我不是计算机科学专业的学生,对算法或命题逻辑不是很了解。但是,我确实在一个项目中使用了 SMT 求解器,并且想对算法的工作原理有一个基本的了解?
我基本上有一个功能
f(x)=(p_0)x+(p_1)x^2+(p_2)x^3+...(p_n)^x^n
和一组等式,例如
f(x)>0
f(x)<1
f(x)+f'(x)f(x)<0.5
SMT 求解器 z3 通过检查给定约束对一组数据样本的可满足性来计算系数 p_0,p_1...,p_n
。
你能用非常简单的术语帮助我理解这到底是怎么发生的吗?它会搜索 p 的整个样本 space 吗?
您可以将 SMT 视为一种出色的搜索算法,但这会极具误导性:它比这更智能、更复杂。特别是,它确实 而不是 搜索整个样本 space,正如您所说的那样。 (想象一下:SMT 求解器可以处理无界整数和实数:不可能穷尽地搜索这些。)
不幸的是,这个问题太宽泛,无法在堆栈溢出的上下文中回答,但幸运的是,有许多优秀的参考资料非常值得您花时间通读。这是我最喜欢的两个:
"Decision procedures" 一书 http://www.decision-procedures.org/ 是一本很好的读物,其中有许多参考文献可以帮助您进入文献。这本书告诉您所有关于 SMT 求解器中用于不同逻辑的算法,如果您有兴趣构建一个算法,它甚至会指导您。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.367.9961&rep=rep1&type=pdf 是 Leonardo 和 Nikolaj(z3 的主要开发人员)撰写的一篇优秀文章。它提供了一个很好的概述,如果您只对应用程序感兴趣,它会更容易阅读。
我建议从后者开始,并使用其中的参考资料根据您的兴趣进一步研究该领域。如果您遇到困难,有许多优秀的文章、教程和友好的堆栈溢出社区可以提供帮助!