Testemunhas de software matemático

11

Eu, como muitas pessoas, sou um usuário perspicaz de software matemático como Mathematica e Maple. No entanto, fico cada vez mais frustrado com os muitos casos em que esse software simplesmente fornece a resposta errada sem aviso prévio. Isso pode ocorrer ao executar todos os tipos de operações, de somas simples a otimização, entre muitos outros exemplos.

Fiquei me perguntando o que poderia ser feito sobre esse grave problema. O que é necessário é uma maneira de permitir ao usuário verificar a exatidão de uma resposta que é dada, para que eles tenham alguma confiança no que estão sendo informados. Se você quiser obter uma solução de um colega de matemática, ele / ela pode simplesmente sentar e mostrar o trabalho deles. No entanto, isso não é viável para um computador na maioria dos casos. O computador poderia lhe dar uma testemunha simples e facilmente verificável da exatidão de sua resposta? A verificação pode ter que ser feita por computador, mas espero que a verificação do algoritmo de verificação seja muito mais fácil do que a verificação do algoritmo para produzir a testemunha em primeiro lugar. Quando isso seria possível e como exatamente isso poderia ser formalizado

Então, em resumo, minha pergunta é a seguinte.

Poderia ser possível, pelo menos em teoria, que o software matemático forneça uma pequena prova verificável junto com a resposta que você pediu?

Um caso trivial em que podemos fazer isso imediatamente é a fatoração de números inteiros, é claro, ou muitos dos problemas clássicos de NP-completos (por exemplo, circuito Hamiltoniano etc.).

Comunidade
fonte
Você pode dar um exemplo em que a resposta produzida está errada? É claro que é possível gerar uma prova verificável da correção dos cálculos, mas essa prova não precisa ser fácil de verificar manualmente, simplesmente porque o software normalmente usa algoritmos não triviais que são mais eficientes do que os mais intuitivos.
MCH
Dei dois exemplos na pergunta, mas as cores dos links podem não ser fáceis de ver. Clique em "somas" ou "otimização".
1
Mais ou menos o que Manuel Blum e Sampath Kannan fizeram em dl.acm.org/citation.cfm?id=200880 ?
21313 Andrej Bauer
Você pode dar uma olhada em Algoritmos de certificação .
Pratik Deoghare
Sim, muitos sistemas de software simbólicos são tratados como "caixas negras" e essa também é uma estratégia corporativa para proteger segredos comerciais. (1) tente alternativas de código aberto (2) considere a "melhor prática" de engenharia de software de "teste de unidade". Em resumo, a idéia seria criar "verificações de sanidade" dos resultados, por exemplo, substituindo valores conhecidos, outras manipulações, inversões etc. por testes bem construídos, é improvável que a fórmula e o teste falhem de uma maneira que daria um "falso positivo".
vzn

Respostas:

5
  1. O conceito de "testemunhas" ou "provas verificáveis" não é totalmente novo: como mencionado nos comentários, procure o conceito de "certificado". Três exemplos vieram à mente, há mais (nos comentários e em outros lugares):

    • Kurt Mehlhorn descreveu em 1999 um problema semelhante nos algoritmos de geometria computacional (por exemplo, pequenos erros nas coordenadas podem gerar grandes erros nos resultados de algum algoritmo), resolvidos de maneira semelhante na biblioteca Leda , insistindo que cada algoritmo produz um "certificado" da sua resposta, além da própria resposta.

    • Demaine, Lopez-Ortiz e Munro em 2000 usaram os conceitos de certificados (eles os chamam de "provas") para mostrar limites inferiores adaptativos no cálculo da união e interseção (e diferença, mas essa é trivial) dos conjuntos classificados. Não exclua seu trabalho porque eles não usaram certificados para se proteger contra erros de computação: eles mostraram que, embora o certificado possa ser linear no tamanho da instância, na pior das hipóteses, geralmente é mais curto e, portanto, pode ser "verificado" "em tempo sublinear (acesso aleatório à entrada como uma matriz classificada ou uma Árvore B) e, em particular, em tempo menor que o necessário para calcular esse certificado.

    • Eu tenho usado o conceito de certificados em vários outros problemas desde que Ian Munro apresentou sua implementação no Alenex 2001 , e em particular para permutações (desculpas pelo plugue descarado, outro está chegando), onde o certificado é mais curto, na melhor das hipóteses. do que no pior caso ou na média, que gera uma estrutura de dados compactada para permutações. Aqui, novamente, verificar o certificado (ou seja, o pedido) leva no tempo mais linear, menos do que calculá-lo (ou seja, classificar).

  2. O conceito nem sempre é útil para a verificação de erros: há problemas em que a verificação do certificado leva tanto tempo quanto produzi-lo (ou simplesmente produzir o resultado). Dois exemplos vêm à mente, um trivial e outro complicado, Blum e Kannan (mencionados nos comentários) dão a outros.

    • nn
    • O certificado para o casco convexo em duas e três dimensões, se os pontos são fornecidos em ordem aleatória, leva tantos bits para codificar quanto comparações para calcular [FOCS 2009] (outro plugue sem vergonha).

A biblioteca Leda é o esforço mais geral (que eu conheço) para tornar os algoritmos deterministas de produção de certificados a norma na prática. O artigo de Blum e Kannan é o melhor esforço que vi para torná-lo a norma em teoria, mas eles mostram os limites dessa abordagem.

Espero que ajude...

Jeremy
fonte
Obrigado que é muito interessante. Com relação ao seu ponto 2. Acho que estou falando de algo um pouco diferente. O problema não são erros no código, mas algoritmos que sabemos que podem dar a resposta errada. Além disso, em um nível mundano, eu nem sei como seria um certificado útil para muitas funções matemáticas. Por exemplo, para uma soma infinita ou, por exemplo, a minimização de uma função.
Para ser um pouco mais claro. Parece muito difícil conceber algoritmos comprovadamente corretos para muitos problemas de matemática. No entanto, convivemos com algoritmos que podem cometer erros sem nos avisar (e de fato são comprovadamente incorretos) por razões práticas. A esperança de que não seja (as) difícil conceber verificadores de correção comprovadamente corretos para o mesmo conjunto de problemas.
Estou me afastando dos meus conhecimentos, mas achei que os erros de computação eram geralmente causados ​​por erros de arredondamento com resultados intermediários (foi claramente o caso nos exemplos que motivaram o Leda) em operações básicas (multiplicações, divisões etc.) em vez de erros nos algoritmos. Eu teria pensado que os sistemas algébricos, como maple e Matlab evitados aqueles :(
Jeremy
É uma pergunta interessante e talvez alguém aqui tenha certeza ... no entanto, muitas das respostas incorretas de que estou falando não são para cálculos numéricos, o que implica, pelo menos prima facie, que os problemas são mais do que você descreve. Não conheço a complexidade dos limites de computação / somas infinitas, etc., mas presumo que, em geral, eles são intratáveis ​​no pior dos casos e, portanto, são necessárias / úteis heurísticas que às vezes dão a resposta errada. mathematica.stackexchange.com/questions/tagged/bugs não é informativo para entender as coisas que dão errado.
CS teórico tem o conceito de autoteste, que se aplica a muitos problemas na álgebra linear. Uma das idéias básicas é que, para muitos problemas, a solução pode ser verificada (talvez com um pouco de informação extra) mais facilmente do que pode ser calculada. Veja, por exemplo, https://doi.org/10.1016/0022-0000(93)90044-W .
Neal Young