Add sygus examples to documentation (#7303)
authorGereon Kremer <nafur42@gmail.com>
Mon, 4 Oct 2021 23:46:49 +0000 (16:46 -0700)
committerGitHub <noreply@github.com>
Mon, 4 Oct 2021 23:46:49 +0000 (16:46 -0700)
For some reason, we didn't have any SMT-LIB (or rather SyGuS) example files for the SyGuS examples yet.
This PR adds these missing examples.

docs/examples/sygus-fun.rst
docs/examples/sygus-grammar.rst
docs/examples/sygus-inv.rst
docs/ext/examples.py
examples/api/smtlib/sygus-fun.sy [new file with mode: 0644]
examples/api/smtlib/sygus-grammar.sy [new file with mode: 0644]
examples/api/smtlib/sygus-inv.sy [new file with mode: 0644]
src/api/cpp/cvc5.h

index 5b22ae83382a121daabb068ede5a24aeb7d344f1..02ec5657766364ea4b4945e6a02cb475a5650c8f 100644 (file)
@@ -6,3 +6,4 @@ SyGuS: Functions
     ../../examples/api/cpp/sygus-fun.cpp
     ../../examples/api/java/SygusFun.java
     ../../examples/api/python/sygus-fun.py
+    ../../examples/api/smtlib/sygus-fun.sy
index 6c627e22f2189baa1a658650cbf147c26ea3c51b..ad22bdc85e0d41bab289f6011ed354dd842f590f 100644 (file)
@@ -6,3 +6,4 @@ SyGuS: Grammars
     ../../examples/api/cpp/sygus-grammar.cpp
     ../../examples/api/java/SygusGrammar.java
     ../../examples/api/python/sygus-grammar.py
+    ../../examples/api/smtlib/sygus-grammar.sy
index 2fac909ef647ce8928e97bfacf4408ead28d60ff..54afe7727ade4e743ebea38dbc0169547152ea2d 100644 (file)
@@ -6,3 +6,4 @@ SyGuS: Invariants
     ../../examples/api/cpp/sygus-inv.cpp
     ../../examples/api/java/SygusInv.java
     ../../examples/api/python/sygus-inv.py
+    ../../examples/api/smtlib/sygus-inv.sy
index 7b62cee1b06694e196d7f2b3cc161781976f60e1..42bcab3f81acdfff2312a5ba4c2d6149b4a66935 100644 (file)
@@ -24,6 +24,7 @@ class APIExamples(SphinxDirective):
         '.java': {'title': 'Java', 'lang': 'java'},
         '.py': {'title': 'Python', 'lang': 'python'},
         '.smt2': {'title': 'SMT-LIBv2', 'lang': 'smtlib'},
+        '.sy': {'title': 'SyGuS', 'lang': 'smtlib'},
     }
 
     # The "arguments" are actually the content of the directive
@@ -36,7 +37,7 @@ class APIExamples(SphinxDirective):
         # collect everything in a list of strings
         content = ['.. tabs::', '']
 
-        remaining = set(self.exts.keys())
+        remaining = set([self.exts[e]['lang'] for e in self.exts])
         location = '{}:{}'.format(*self.get_source_info())
 
         for file in self.content:
@@ -45,7 +46,7 @@ class APIExamples(SphinxDirective):
             if ext in self.exts:
                 title = self.exts[ext]['title']
                 lang = self.exts[ext]['lang']
-                remaining.remove(ext)
+                remaining.remove(lang)
             else:
                 self.logger.warning(f'{location} is using unknown file extension "{ext}"')
                 title = ext
diff --git a/examples/api/smtlib/sygus-fun.sy b/examples/api/smtlib/sygus-fun.sy
new file mode 100644 (file)
index 0000000..171b3fe
--- /dev/null
@@ -0,0 +1,24 @@
+; The printed output for this example should be equivalent to:
+; (
+;   (define-fun max ((x Int) (y Int)) Int (ite (<= x y) y x))
+;   (define-fun min ((x Int) (y Int)) Int (ite (<= x y) x y))
+; )
+
+(set-logic LIA)
+(synth-fun max ((x Int) (y Int)) Int
+  ((Start Int) (StartBool Bool))
+  ((Start Int (0 1 x y
+               (+ Start Start)
+               (- Start Start)
+               (ite StartBool Start Start)))
+   (StartBool Bool ((and StartBool StartBool)
+                    (not StartBool)
+                    (<= Start Start)))))
+(synth-fun min ((x Int) (y Int)) Int)
+(declare-var x Int)
+(declare-var y Int)
+(constraint (>= (max x y) x))
+(constraint (>= (max x y) y))
+(constraint (or (= x (max x y)) (= y (max x y))))
+(constraint (= (+ (max x y) (min x y)) (+ x y)))
+(check-synth)
diff --git a/examples/api/smtlib/sygus-grammar.sy b/examples/api/smtlib/sygus-grammar.sy
new file mode 100644 (file)
index 0000000..e8c5cd5
--- /dev/null
@@ -0,0 +1,16 @@
+; The printed output for this example should look like:
+; (
+;   (define-fun id1 ((x Int)) Int (+ x (+ x (- x))))
+;   (define-fun id2 ((x Int)) Int x)
+;   (define-fun id3 ((x Int)) Int (+ x 0))
+;   (define-fun id4 ((x Int)) Int (+ x (+ x (- x))))
+; )
+
+(set-logic LIA)
+(synth-fun id1 ((x Int)) Int ((Start Int)) ((Start Int ((- x) (+ x Start)))))
+(synth-fun id2 ((x Int)) Int ((Start Int)) ((Start Int ((Variable Int) (- x) (+ x Start)))))
+(synth-fun id3 ((x Int)) Int ((Start Int)) ((Start Int (0 (- x) (+ x Start)))))
+(synth-fun id4 ((x Int)) Int ((Start Int)) ((Start Int ((- x) (+ x Start)))))
+(declare-var x Int)
+(constraint (= (id1 x) (id2 x) (id3 x) (id4 x) x))
+(check-synth)
diff --git a/examples/api/smtlib/sygus-inv.sy b/examples/api/smtlib/sygus-inv.sy
new file mode 100644 (file)
index 0000000..6d284df
--- /dev/null
@@ -0,0 +1,12 @@
+; The printed output for this example should be equivalent to:
+; (
+;   (define-fun inv-f ((x Int)) Bool (not (>= x 11)))
+; )
+
+(set-logic LIA)
+(synth-inv inv-f ((x Int)))
+(define-fun pre-f ((x Int)) Bool (= x 0))
+(define-fun trans-f ((x Int) (xp Int)) Bool (ite (< x 10) (= xp (+ x 1)) (= xp x)))
+(define-fun post-f ((x Int)) Bool (<= x 10))
+(inv-constraint inv-f pre-f trans-f post-f)
+(check-synth)
index 8302ce7501ee34c720949f95c2d03d4923174008..1c47927b7d9d806dece54ae768610f6f4e9134fe 100644 (file)
@@ -935,9 +935,9 @@ class CVC5_EXPORT Op
   size_t getNumIndicesHelper() const;
 
   /**
-   * Helper for operator[](size_t i).
-   * @param i position of the index. Should be less than getNumIndicesHelper().
-   * @return the index at position i
+   * Helper for operator[](size_t index).
+   * @param index position of the index. Should be less than getNumIndicesHelper().
+   * @return the index at position index
    */
   Term getIndexHelper(size_t index) const;