是否有z3支持的所有理论/逻辑的完整列表?我已经查阅了SMTLIB Tutorial这提供了许多逻辑,但我不认为该列表是详尽无遗的。 z3文档本身似乎没有指定支持哪些逻辑。
我问,因为我有一个smt文件无法在SMTLIB Tutorial中的任何逻辑中解决(当用' set-logic'指定时),但是当没有逻辑时可以解决已指定。
答案 0 :(得分:5)
对于Z3,我在文档中没有看到这样的列表,但是如果你真的想知道的话,你可以在源代码中找到它。该列表从check_logic.cpp的第65行开始。我使用一个可怕的awk单行解析了你的清单,并在2016年5月20日(Z3 4.4.1和4.4.2之间)发现了这个:
"AUFLIA", "AUFLIRA", "AUFNIRA", "LRA", "QF_ABV", "QF_AUFBV", "QF_UFBV", "QF_AUFLIA", "QF_AX", "QF_BV", "QF_IDL", "QF_RDL", "QF_LIA", "QF_LRA", "QF_NIA", "QF_NRA", "QF_UF", "QF_UFIDL", "QF_UFLIA", "QF_UFLRA", "QF_UFNRA", "UFLRA", "UFNIA", "UFBV", "QF_S"
您可以将其与SMT-LIB 2 logics的官方列表进行比较。
对你来说可能更重要的是"最好的逻辑"适合您的申请。听起来你有一大堆不同的问题,你希望Z3能够应用任何策略。在这种情况下,现在,最好不要指定逻辑。问题是在SMT-LIB v2.0中没有包罗万象的逻辑 - 某些标准的最大逻辑是AUFNIRA,但这不包括例如位向量。因此,CVC4引入了非标准的ALL_SUPPORTED逻辑,当没有指定逻辑时,Z3对某些类问题表现最佳。 SMT-LIB 2.0标准的这一缺点在SMT-LIB 2.5中得到解决,其新的逻辑称为“#34; ALL"”。但是,Z3或CVC4尚不支持此功能。
答案 1 :(得分:3)
您可以在Z3中指定逻辑,以确保Z3使用通常对此逻辑中表达的公式类有用的特定策略和引擎。 如果未指定逻辑,则Z3将回退到默认模式。没有相应的逻辑 这种默认模式:它集成了多个引擎。