[SMT-LIB] comments on v 2.0

Cesare Tinelli tinelli at cs.uiowa.edu
Thu Aug 19 12:13:52 EDT 2010


Hi David,

Thanks for your feedback on Version 2 and its reference document. We have incorporated it as explained below in a new release of the document, which includes additional minor fixes and should be posted on the SMT-LIB website in the next few days.

On 23 Jul 2010, at 08:59, cok at frontiernet.net wrote:

> I had a long plane ride yesterday, providing time to read through the v2.0 document.
> Here are some corrections and questions.
> 
> - David
> 
> Comments on SMTLIB v2.0
> 
> 1. Section 3.1: Regarding “Characters between the semi-colon character ; and a line breaking character are comments and so are to be ignored by a lexical analyzer.”
> 
> The semi-colon character is part of the comment.  The line-breaking character may or may not be. I suggest that it not be, since then a comment serves as white space delineating tokens and two line-breaking characters together (e.g. \r\n) act the same as one.  I suggest rewriting the above as
> 
> A character sequence beginning with a semi-colon character (not contained within a "-delimited string), up to but not including the first subsequent line-breaking character, is a comment and is to be ignored by a lexical analyzer.
> 
> 
> 2. Also, “There is no distinction between line breaks, tabs, and spaces--all are treated as whitespace.” Should perhaps read
> 
> “There is no distinction between line breaks, tabs, and spaces (except in ending comments)--all are treated as whitespace.”
> 
> 3. Figure 3.1:  (par (A) (ite Bool A A)) should be (par (A) (ite Bool A A A))  - as it is in the file it purports to replicate.  Corresponding changes are needed in the text of the :definition (in the Core Theory file also).  Similarly twice in the text below Fig 3.1.
> 
> 4. Definition 7: Typo – “Let be A and B’ should be ‘Let A and B be’
> 
> 5. Section 4.4: Typo in the sentence after superscript 6: the should be they
> 
> 6. Section 4.4.1: the enumeration in the definition breaks at a confusing spot, given the presence of the Figure
> 
All the points above have been addressed, either as you suggested or in a similar way.

> Chapter 5
> 7. The text allows for (push 0) which I presume simply does nothing, as (pop 0).
> 
Yes, clarified.


> 12. Section 5.4.2 – reason-unknown is allowed to return ‘timeout’ according to Appendix B,

That was not intended. Removed.



Thanks for the observations and suggestions below on the command language. Yours are all good points and we will bring up in the SMT-API work group, together with other points on extending or improving the command language.

Best,


Cesare (also for Aaron and Clark)


> 8. Section 5.1.3 and 5.1.4 should state that calling define-fun define-sort declare-fun declare-sort or assert if the assertion-set stack is empty (all assertion-sets, including the initial one, have been popped) results in an error response.
> 
> 9. Section 5.1.5. It should be clarified whether produce-proofs need to be set to true only just before get-proof is called, just before check-sat is called, or before any assertions are asserted?
> 
> 10. Section 5.1.5/5.3: It would be more user-convenient if get-proof returned unsupported if produce-proofs is false, or was defined to return an error response, rather than not being allowed to be called (with presumably arbitrary behavior).  Same for get-unsat-core.  Same for produce-models and produce-assignments and their corresponding commands.
> 
> 11. error-behavior option – the problem with definition of this option is that a solver may mostly continue after an error, but in some hard cases may want to exit – which behavior is this?  Must a solver be all one or the other?
> 
> 12. Section 5.4.2 – reason-unknown is allowed to return ‘timeout’ according to Appendix B, but that is not allowed here, nor in Appendix C (I suggest it should allow timeout as a response).  The problem with using fixed reserved words here, rather than terms that might contain a string, is that it makes it harder for solvers to extend this with solver-specific information.  I suppose that could be accomplished with other, non-standard, options.

> Nice to haves
> 
> 13. It may be that changing logics is rare, but I would have preferred that it be allowed to issue a subsequent set-logic command, with the effect of completely resetting the state of the prover, without having to restart the process.  If this were the case, however, the current semantics allowing push and pop operations before a set-logic would change.
> 
> 14. It would be convenient and easy to implement to have a way of popping everything on the assertion-set stack, probably also pushing the initial empty assertion-set on the stack (e.g. a reset command, or the set-logic command as described above).  At present the caller has to keep track of the current depth, or exit and completely restart the process.
> 
> _______________________________________________
> SMT-LIB mailing list
> SMT-LIB at cs.nyu.edu
> http://www.cs.nyu.edu/mailman/listinfo/smt-lib




More information about the SMT-LIB mailing list