summaryrefslogtreecommitdiff
path: root/test/regress/regress1/sygus/rec-fun-while-infinite.sy
blob: b43b3d5e277f40f321c8def056eb6b17438199e9 (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
; EXPECT: unknown
; COMMAND-LINE: --sygus-out=status --lang=sygus2 --no-check-synth-sol

(set-logic ALL)

; The environment datatypes
(declare-datatype NVars ((x) (y)))

(declare-datatype Pair ((build (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 (build var value) env)
    (ite (= var (first (head env)))
      (cons (build 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)
    0
    (ite (= var (first (head env)))
      (second (head env))
      (envSelect var (tail env))
      )
    )
  )

; Syntax for arithmetic expressions
(declare-datatype Aexp
  (
    (Val (val Int))
    (Var (name NVars))
    (Add (addL Aexp) (addR Aexp))
    )
  )

; Function to evaluate arithmetic expressions
(define-fun-rec evalA ((env Env) (a Aexp)) Int
  (ite (is-Val a)
    (val a)
    (ite (is-Var a)
      (envSelect (name a) env)
      ; (is-Add a)
      (+ (evalA env (addL a)) (evalA env (addR a)))
      )))

; Syntax for boolean expressions
(declare-datatype Bexp
  (
    (TRUE)
    ))

; Function to evaluate boolean expressions
(define-fun-rec evalB ((env Env) (b Bexp)) Bool
  (is-TRUE b)
)

; Syntax for commands
(declare-datatype Com
  (
    (Assign (lhs NVars) (rhs Aexp))
    (While (wCond Bexp) (wCom Com))
    )
  )

; Function to evaluate statements
(define-fun-rec evalC ((env Env) (c Com)) Env
  (ite (is-Assign c)
    (envStore (lhs c) (evalA env (rhs c)) env)
        ; (is-While c)
          (ite (evalB env (wCond c)) (evalC (evalC env (wCom c)) c) env)
        )
      )


(synth-fun prog () Com
  ((C1 Com) (C2 Com) (V NVars) (A1 Aexp) (A2 Aexp) (A3 Aexp) (B Bexp) (I Int))
  (
    (C1 Com ((While B C2)))
    (C2 Com ((Assign V A1)))
    (V NVars (x))
    (A1 Aexp ((Var V)))
    (A2 Aexp ((Val I)))
    (A3 Aexp ((Add A1 A2)))
    (B Bexp (TRUE))
    (I Int (1))
    )
)

(constraint (= (evalC (cons (build x 1) nil) prog) (cons (build x 1) nil)))

(check-synth)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback