¿Se puede desactivar la salida de modelos intermedios?

A formula with quantifiers contains declaration of trans function. Z3 successfully finds the model and prints it. But it also prints models for functions like trans!1!4464, trans!7!4463 .. which are not used anywhere in the model. What is it? How can I disable this output?

Aquí está la consulta: http://dl.dropbox.com/u/444947/asyn_arbiter_bound_16.smt2 and here is Z3's output - http://dl.dropbox.com/u/444947/asyn_arbiter_bound_16_result.txt

preguntado el 09 de marzo de 12 a las 13:03

Could you add a link to the script that produces these functions? -

@LeonardodeMoura yep, sure - added to the post -

1 Respuestas

Recall that the models returned by Z3 can be viewed as simple functional programs. Your formula is in the UFBV fragment. Z3 uses several modules to decide this fragment. Each module converts a formula F into a "simpler" formula F', and produces a procedure that converts a model for F' into a model for F. We call these procedures: "model converters". Model converters will, for example, eliminate interpretations for auxiliary functions and constants introduced in the F a F' conversion. Some auxiliary definitions can't be removed seems they are used to give interpretation of other definitions. We should view them as "auxiliary functions". They also create an interpretation for symbols that have been eliminated..

In your example, the following happens: the last module produces a model that contains the trans!... y k!... symbols. This model is for a formula that does not even contain trans. La función trans has been eliminated. As we apply the model converters, the interpretation for trans is constructed based on the interpretation of all trans!.... En este punto, trans!... y k!... symbols are still being used since the interpretation of trans has a reference to all trans!... symbols and the interpretation of the trans!... functions have references to the k!... function symbols. At this step, there are no unnecessary symbols in the model. However, in a later step, the interpretation of trans is simplified by unfolding the definitions of trans!... y k!.... So, after this simplification step, trans!... y k!... are essentially "dead code".

That being said, the model returned by Z3 is correct, that is, it is a model for your formula. I acknowledge that these extra symbols are annoying and unnecessary. To eliminate them, we have apply the equivalent of a "dead code" elimination step. We are really close to the next release. So, this feature will not be available in the next release, but I will add it for the release following the next one.

respondido 12 mar '12, 06:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.