summaryrefslogtreecommitdiff
path: root/test/regress/regress1/sygus/rec-fun-swap.sy
blob: 056d6a8fc7f2e18567f6906e70796c544d80ad56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback