我有一個程序在非線性實數算術中產生一組約束。考慮以下兩個約束:z3處理非線性實數算法的侷限性
(<( - ( - ( - (+(*( - v0_x v3_x) ( - v1_y v3_y) (+(*( - v2_x v3_x)( - v2_x v3_x)) (*( - v2_y v3_y)( - v2_y v3_y)))) (*( - v0_y v3_y) ( - v2_x v3_x) (+(*( - v1_x v3_x)( - v1_x v3_x)) (*( - v1_y v3_y)( - v1_y v3_y)))) (*( - v1_x v3_x) ( - v2_y v3_y) (+(*( - v0_x v3_x)( - v0_x v3_x)) (*( - v0_y v3_y)( - (v1_y v3_y) ( - v2_x v3_x) (+(*( - v0_x v3_x)( - v0_x v3_x)) (*( - v0_y v3_y)( - v0_y v3_y))))) (*( - v0_y v3_y) ( - v1_x v3_x) (+ (*( - v2_x v3_x)( - v2_x v3_x)(*( - v2_x v3_x))(*( - v2_y v3_y)( - v2_y v3_y)))) (*( - v2_x v3_x) ( - v2_y v3_y) v1_x v3_x)( - v1_x v3_x))(*( - v1_y v3_y)( - v1_y v3_y))))) 0)
(>( - ( - ( - (+(*( - v0_x v2_x) (*( - v_y v2_y) (*( - v0_y v2_y)(*( - v3_x v2_y)( - v3_y v2_y)( - v3_x v2_x) (+(*( - v1_x v2_x)( - v1_x v2_x)) (*( - v1_y v2_y)( - v1_y v2_y)))) (*( - v1_x v2_x) ( - v3_y v2_y) (+(*( - v0_x v2_x)( - v0_x v2_x)) (*( - v0_y v2_y)( - v0_y v2_y))))) (*( - v1_y v2_y) ( - v3_x v2_x) (+(*( - v0_x v2_x)( - v0_x v2_x)) (*( - v0_y v2_y)( - v0_y v2_y))))) (*( - v0_y v2_y) ( - v1_x v2_x) (+( *( - v3_x v2_x)( - v3_x v2_x)(*( - v3_x v2_x))(*( - v3_y v2_y)( - v3_y v2_y))))) (*( - v0_x v2_x) ( - v3_y v2_y) (*( - v1_x v2_x)( - v1_x v2_x))(*( - v1_y v2_y)( - v1_y v2_y))))) 0)
當我斷言他們Z3,它說,它是滿足的,但只要我將第二個約束更改爲(< ... 0)而不是(> ... 0),這應該現在不可滿足,z3將永遠運行。我想知道z3處理非線性實數算法的侷限性。 Z3是否有可能處理上述限制(比如通過改變其制定方式或其他方式)?
感謝您的回覆。我怎樣才能通過C API來做到這一點? – user1857364
使用C++ API比C API更容易。 Z3代碼庫中的文件夾'examples/C++'有許多創建策略和設置參數的例子(例如'tactic_example4')。 C++運算符'&'用於順序應用策略。函數「with」用於設置策略的參數。我們也可以直接在C API中執行這些示例,但不太方便。 –