2012-06-28 2 views
2

Используя Z3 с текстовым форматом, я могу использовать define-fun для определения функций для повторного использования позже. Например:Как определить-удовольствие с помощью C# API

(define-fun test((a Int) (b Int)) Int 
     (ite (and (> a 2) (<= b 3)) 
      1 
      (ite (and (<= a 2)(> b 10)) 
        2 
        a 
      ) 
     ) 
    ) 

так интересно, как определить удовольствие, используя C# API, так как Context.MkFuncDecl используется для генерации только интерпретируемые функции.

+0

Я спросил точно тот же вопрос до: http://stackoverflow.com/questions/7740556/equivalent-of-define-fun-in-z3-api – pad

+0

кажется, что есть новый C# api, мне интересно, есть ли какой-либо прямой метод для определения забавы а не квантификаторами? –

ответ

2

define-fun - это всего лишь механизм определения макросов в SMT 2.0. Он не добавляет мощности для решателей SMT. Мы поддерживаем его в API, так как пользователь может создать функцию, которая реализует макрос на своем любимом языке. То есть мы можем создать функцию C#, называемую test, которая дана a и b, чтобы вернуть выражение ite в ваш вопрос. Вот пример того, как сделать это в Python:

http://rise4fun.com/Z3Py/to1

Вот еще один пример того, что определяют min функцию, которая принимает произвольное число аргументов:

http://rise4fun.com/Z3Py/Vvp

+0

Спасибо, я решил проблему. Однако есть еще одна проблема: вы можете узнать о квантере и фиксированной точке, http://stackoverflow.com/questions/11264914/an-error-appears-when-running-exist-quantifier-and-fixedpoint-z3-in-c -Шарп, ты поможешь мне? –

Смежные вопросы