如何将 Z3Py 代码转换为 C# 代码(Z3、SAT)

How to convert Z3Py code to C# code (Z3, SAT)

过去我写了一些 Z3Py 代码,现在我想将其转换为 C# .NetCore。我检查了很多例子,但我有一些问题:-)

我定义了名为 MyFun 的函数,它接受参数和基于值的 return 变量。简单例子:

H0 = BitVec('H0', 8)
H1 = BitVec('H1', 8)
H2 = BitVec('H2', 8)
H3 = BitVec('H3', 8)
I1 = BitVec('I1', 8)
T1 = BitVec('T1', 8)

def MyFun(N):
  return z3.If(N == 0x00, H0,
         z3.If(N == 0x01, H1,
         z3.If(N == 0x02, H2, H3)))

s.add(T1 == z3.If(MyFun(I1) == 0x33, 0x11, 0x12) )

我对“函数定义”有疑问,对“z3.If”也有疑问。我认为 MkFuncDecl 是为了别的东西。也许解决方案是使用经典 C# If 创建普通 C# Function 然后直接调用它?我认为它必须在 Z3 中以某种方式定义...(由于速度,Z3 <-> C#)或者它在 Z3Py 中也以相同的方式工作(Python 函数 with, Python If wrapper)?

这将是一个常规的 C# 函数,但调用 Z3 的 If,而不是 C# 的 If。本质上,您是在为表达式构建抽象语法树,它恰好在 C# 中,而不是 Python。其他都一样