diff options
Diffstat (limited to 'test/regress/regress1/sygus/rec-fun-swap.sy')
-rw-r--r-- | test/regress/regress1/sygus/rec-fun-swap.sy | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/test/regress/regress1/sygus/rec-fun-swap.sy b/test/regress/regress1/sygus/rec-fun-swap.sy new file mode 100644 index 000000000..056d6a8fc --- /dev/null +++ b/test/regress/regress1/sygus/rec-fun-swap.sy @@ -0,0 +1,76 @@ +; EXPECT: unsat +; COMMAND-LINE: --sygus-out=status --lang=sygus2 + +(set-logic ALL) + +; The environment datatypes +(declare-datatype NVars ((x) (y))) + +(declare-datatype Pair ((pair (first NVars) (second Int)))) + +(declare-datatype Env ((cons (head Pair) (tail Env)) (nil))) + +(define-fun-rec envStore ((var NVars) (value Int) (env Env)) Env + (ite (is-nil env) + (cons (pair var value) env) + (ite (= var (first (head env))) + (cons (pair var value) (tail env)) + (cons (head env) (envStore var value (tail env))) + ) + ) + ) + +(define-fun-rec envSelect ((var NVars) (env Env)) Int + (ite (is-nil env) + (- 1) + (ite (= var (first (head env))) + (second (head env)) + (envSelect var (tail env)) + ) + ) + ) + +; Syntax for arithmetic expressions +(declare-datatype Aexp + ( + (Val (val Int)) + ) + ) + +; Function to evaluate arithmetic expressions +(define-fun-rec evalA ((env Env) (a Aexp)) Int + (val a) + ) + +; Syntax for commands +(declare-datatype Com + ( + (Skip) + (Assign (lhs NVars) (rhs Aexp)) + (CSeq (cBef Com) (aAft Com)) + ) + ) + +; Function to evaluate statements +(define-fun-rec evalC ((env Env) (c Com)) Env + (ite (is-Skip c) + env + (ite (is-Assign c) + (envStore (lhs c) (evalA env (rhs c)) env) + (evalC (evalC env (cBef c)) (aAft c))) + ) + ) + +(synth-fun prog () Com + ((C Com) (V NVars) (A Aexp) (I Int)) + ( + (C Com (Skip (Assign V A) (CSeq C C))) + (V NVars (x y)) + (A Aexp ((Val I))) + (I Int (0 1)) + ) +) + +(constraint (= (evalC (cons (pair y 0) (cons (pair x 1) nil)) prog) (cons (pair y 1) (cons (pair x 0) nil)))) + +(check-synth) |