A pergunta a seguir surgiu várias vezes ao testar a segurança de um sistema ou modelo.
Motivação: As falhas de segurança do software geralmente não provêm de bugs devido a entradas válidas, mas de bugs resultantes de entradas inválidas suficientemente próximas das entradas válidas para passar por muitas das verificações diretas de validade. É claro que o exemplo clássico é estouros de buffer, onde a entrada é razoável, exceto que é muito grande. Compiladores e outras ferramentas podem ajudar a solucionar esses problemas, modificando o layout da pilha e da pilha e por outras técnicas de ofuscação. Uma alternativa é remover os problemas do próprio código-fonte. Uma técnica chamada fuzzing bombardeia o programa com entradas aproximadas das entradas esperadas, mas em alguns lugares não é razoável (valores grandes para campos inteiros ou de seqüência de caracteres). Eu gostaria de entender a difusão (como um exemplo) de uma perspectiva mais formal.
Suponha que o espaço de entradas válidas seja descrito por restrições . Seja o conjunto de soluções de tais restrições, a saber , onde é o espaço de possíveis entradas.
Estou procurando trabalho descrevendo as seguintes noções:
Maneiras de relaxar as restrições a tal maneira que primeiramente e são, em certo sentido, a penumbra sintática de .
"Penumbra" é uma palavra que eu selecionei para descrever o conceito. Pode muito bem ser chamado de outra coisa.
Encontrei inspiração na morfologia matemática , daí a minha metáfora visual, mas os dois mundos estão separados. Existe algum trabalho útil lá? Ou talvez no mundo dos sets ásperos ?
Alguém pode lançar luz?
Respostas:
Grande parte da atenção dada às variantes de otimização do problema de satisfação de restrições (CSP) concentrou-se em satisfazer algum número de restrições (MAX-CSP) ou no caso booleano em escolher a solução que atribui o maior número possível de variáveis ao valor 1 ( MAX-ONES, também há MIN-ONES).
Em vez disso, você está perguntando sobre uma variante que poderia ser chamada CSP PARCIAL MÁXIMO. Isso foi estudado pelo menos no final da década de 1960, mas não sei se ele tem um nome estabelecido. É um problema natural, e seria bom ver mais trabalhos investigando-o. Obrigado por fornecer outro aplicativo em potencial para esse problema!
Um conjunto de atribuições de valor variável é chamado de atribuição parcial . Pode-se escrever uma atribuição de valor variável como uma tupla (variável, valor). Atribuições parciais são então simplesmente funções de variáveis a valores. Adereços são atribuições parciais que não violam nenhuma restrição. Equivalentemente, um suporte não contém atribuição parcial proibida por alguma restrição (como um subconjunto).
Uma maneira de expressar o problema de otimização é a seguinte.
Em um caso com variáveis, claramente um suporte de cardinalidade será uma solução. Pode haver adereços grandes, com cardinalidade até , que não estão contidos em nenhuma solução.n n n−1
Na terminologia que você propõe, o conjunto de adereços com cardinalidade máxima forma a penumbra, talvez até com alguma margem adicional (portanto cardinalidade pelo menos ).k d k−d
A segunda parte da sua pergunta também parece muito interessante, mas não conheço nenhum trabalho relacionado a ela.
Nota de rodapé: O termo prop é da minha tese; destina-se a transmitir a ideia de que tais atribuições parciais são adequadas e também de que elas apóiam o conjunto de soluções. Isso contrasta com nogood , que é o termo aceito para descrever uma atribuição parcial que não pode ser estendida a uma solução. A palavra "nogood" foi introduzida por Richard Stallman e Gerald Sussman em 1976, quando o RMS ainda era um pesquisador de IA em vez de ativista da liberdade de software.
fonte