es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mejorando la salida del modelo Z3 para funciones de String -> String

Considere el siguiente código que especifica una función simple de cadenas a cadenas:
Python
from z3 import *
map = Function(‘map’, StringSort(), StringSort())
c1 = map(StringVal(‘key1’)) == StringVal(‘value1’)
c2 = map(StringVal(‘key2’)) == StringVal(‘value2’)
c3 = map(StringVal(‘key3’)) == StringVal(‘value3’)
c4 = map(StringVal(‘key4’)) == StringVal(‘value4’)
s = Solver()
s.add(And(c1, c2, c3, c4))
print(s.check())
print(s.model())

La salida del modelo es la siguiente:

[map = [Concat(Unit(Char),
Concat(Unit(Char),
Concat(Unit(Char), Unit(Char)))) ->
“value1”,
Concat(Unit(Char),
Concat(Unit(Char),
Concat(Unit(Char), Unit(Char)))) ->
“value2”,
Concat(Unit(Char),
Concat(Unit(Char),
Concat(Unit(Char), Unit(Char)))) ->
“value3”,
Concat(Unit(Char),
Concat(Unit(Char),
Concat(Unit(Char), Unit(Char)))) ->
“value4”,
else -> “value1”]]

¿Cómo puedo hacer que salgan las claves reales en lugar de Concat(Unit(Char), Concat(Unit(Char), …))?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede usar la función model_eval para evaluar el modelo y obtener las claves reales en lugar de Concat(Unit(Char), Concat(Unit(Char), ...)). Por ejemplo, puede usar el siguiente código:

    for d in s.model():
        print(d, s.model_eval(d))
    

    Esto mostrará las claves y valores reales en el modelo, por ejemplo: map 'key1' -> 'value1'.

Comments are closed.