No passado, implementei modelos de coordenação usando SAT e satisfação regular de restrições como o cavalo de batalha principal em seus motores. Continuando nesta linha de trabalho, gostaria de tornar os modelos mais interativos, e a melhor maneira de fazer isso é abrir o solucionador de restrições para que ele não seja mais uma caixa preta.
Portanto, estou interessado em aprender mais sobre a satisfação de restrições, onde as restrições têm o que chamarei de variáveis , predicados e funções externas , ou seja, a linguagem da restrição pode ter predicados como que só podem ser satisfeitos consultando alguns agente externo ao solucionador e somente quando x estiver aterrado. Um cenário em que isso é útil é sempre que P corresponde a algum processo de decisão externo que não pode ser incorporado ao solucionador de restrições. Esses solucionadores de restrições podem ser chamados de abertos (como as restrições não são totalmente conhecidas) ou interativos (como a interação é necessária para prosseguir com a satisfação da restrição).
Eu gostaria de conhecer os dois:
- pesquisa teórica realizada nessa direção
- ferramentas ou bibliotecas que implementam solucionadores de restrições que permitem a interação com o mundo externo durante o processo de resolução de restrições.
Lendo sua pergunta, também concordo em dizer que as Teorias do Módulo de Satisfação estão intimamente relacionadas às suas necessidades. Sugiro que leia o livro Procedimentos de Decisão - Um Ponto de Vista Algorítmico .
fonte
fonte
Estou um pouco confuso sobre o termo interativo. Vou conversar com os outros e acrescentar que um solucionador de SMT pode ser útil. Para adicionar ao comentário de Walter Bishop, lâminas para os procedimentos de decisão (Kroening e Strichman) livro estão disponíveis. O tratamento completo de John Harrison no Manual de lógica prática e raciocínio automatizado também pode lhe interessar. Código de exemplo está disponível online.
A princesa de Philipp Ruemmer suporta aritmética com predicados não interpretados, que podem se encaixar no que você entende por aberto. Está escrito em Scala, usa correspondência E no manuseio de quantificação e fornece interpolantes.
fonte
E quanto às ferramentas, se você escolher o Prolog como linguagem de escolha, posso sugerir algumas abordagens de implementação:
Prolog é uma linguagem de programação adequada para a execução de muitos tipos de solucionadores (e a maioria deles possui solucionadores de domínio finito).
fonte