Pergunta

O meu entendimento é de que a execução simbólica lida apenas com caminhos específicos e maus padrões, enquanto solucionadores SAT, ou satisfiability módulo teorias em geral, se dão muito mais robusta análise do programa.

Alguém poderia validar a declaração acima e (brevemente) explicar as diferenças entre estes dois verificação formal metodologias?

Foi útil?

Solução

TL;DR: Eles diferem em seus básico de entrada e de saída.SENTOU-se e SMT solucionadores de não saber quais são os programas;eles são ferramentas que responder sim ou não a perguntas sobre fórmulas matemáticas.Execução simbólica, por outro lado, é um método de análise de programas.Execução simbólica depende, normalmente, SENTOU-se e SMT solucionadores de problemas, mas não a outra maneira ao redor.


SENTOU-se e solucionadores de SMT diretamente não tem nada a ver com os programas.Em vez disso, SENTOU-se ou SMT solver toma como entrada uma matematicamente descrito "fórmula", e as respostas, a grosso modo, se é verdadeira ou falsa.(Muitas vezes, uma terceira opção é permitido, desconhecido, para os casos em que o solver é incapaz de descobrir uma resposta.)

Por exemplo, uma possível entrada do SAT solver é (a and not b) or (not a and c).Que é, é uma fórmula matemática, onde a, b, e c aqui estão Booleano (0 ou 1) constantes.O SAT, o solver é suposto para decidir se é possível que a fórmula seja verdadeira, escolhendo valores de a, b, e c.SMT solucionadores de problemas são semelhantes, mas a, b, e c poderia ser substituído por fórmulas mais complexas com números inteiros, strings, funções, etc., por exemplo x + 3 = y^2.


Execução simbólica é uma maneira elegante de execução de um programa, mas não como o programa foi concebido para ser executado.Em vez disso, o programa é executado usando o chamado "simbólico" valores", que são como marcadores de posição.Para um exemplo do que isso significa, suponha que eu tenha uma função como f(x) = if x > 0 then 1 else 0.Agora, normalmente, eu iria executar o programa pela inserção de, digamos, 3, e chegar f(3) = 1, já que 3 é maior do que 0.Com execução simbólica, o que eu executar o programa pela inserção de uma variável de espaço reservado, input, e eu avaliar o programa para se dois casos:ou input > 0 and answer = 1 ou input <= 0 and answer = 0.Isso pode parecer inútil, mas acaba por ser uma forma poderosa de análise de programas.


A conexão entre os dois é que a execução simbólica, muitas vezes, depende de SMT solucionadores de problemas durante a execução, para descobrir se um determinado caminho, na verdade, é possível, ou se deve ser descartado.Por exemplo, um SMT solver pode ser usado para determinar se input <= 0 and answer = 0 é possível (a resposta é sim, por exemplo se input = 0).Desta forma, SMT é um tipo de "força motriz" para trás o que faz simbólico de execução viável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top