Testimoni per software matematico


11

Come molte persone, sono un appassionato utente di software matematico come Mathematica e Maple. Tuttavia, sono sempre più frustrato dai molti casi in cui tale software ti dà semplicemente la risposta sbagliata senza preavviso. Ciò può verificarsi durante l'esecuzione di tutti i tipi di operazioni da semplici somme di ottimizzazione tra molti altri esempi.

Mi chiedevo cosa si potesse fare per questo grave problema. Ciò che è necessario è un modo per consentire all'utente di verificare la correttezza di una risposta che viene data in modo che abbiano una certa fiducia in ciò che gli viene detto. Se dovessi ottenere una soluzione da un collega di matematica, potrebbe semplicemente sedersi e mostrarti il ​​loro lavoro. Tuttavia, ciò non è fattibile per un computer nella maggior parte dei casi. Il computer potrebbe invece darti una testimonianza semplice e facilmente verificabile della correttezza della loro risposta? Il controllo potrebbe essere necessario da parte del computer, ma speriamo che controllare l'algoritmo di controllo sia molto più semplice che controllare l'algoritmo per produrre il testimone in primo luogo. Quando sarebbe possibile e come esattamente questo potrebbe essere formalizzato

Quindi, in sintesi, la mia domanda è la seguente.

Potrebbe essere possibile almeno in teoria per il software matematico fornire una breve prova verificabile insieme alla risposta che hai chiesto?

Un caso banale in cui possiamo farlo immediatamente è per la fattorizzazione di numeri interi o di molti dei classici problemi NP completi (ad esempio circuito Hamiltoniano, ecc.).


Puoi fare un esempio in cui la risposta prodotta è sbagliata? È ovviamente possibile generare una prova verificabile della correttezza dei calcoli, ma una tale prova non deve essere facile da controllare a mano, semplicemente perché il software utilizza tipicamente algoritmi non banali che sono più efficienti di quelli più intuitivi.
Mahdi Cheraghchi,

Ho fornito due esempi nella domanda, ma i colori dei collegamenti potrebbero non essere facili da vedere. Fai clic su "somme" o "ottimizzazione".

1
Una specie di cosa hanno fatto Manuel Blum e Sampath Kannan in dl.acm.org/citation.cfm?id=200880 ?
Andrej Bauer,

Potresti dare un'occhiata agli algoritmi di certificazione .
Pratik Deoghare

sì, troppi sistemi software simbolici sono trattati come "scatole nere" e questa è anche una strategia aziendale per proteggere i segreti commerciali. (1) provare alternative open source (2) considerare l'ingegneria del software "best practice" di "unit testing". brevemente l'idea sarebbe quella di creare "controlli di integrità" dei risultati, ad esempio sostituendo valori noti, altre manipolazioni, inversioni, ecc. per test ben costruiti, è improbabile che sia la formula che il test falliscano in un modo che darebbe un "falso positivo".
vzn,

Risposte:


5
  1. Il concetto di "testimoni" o "prove verificabili" non è del tutto nuovo: come menzionato nei commenti, cerca il concetto di "certificato". Mi sono venuti in mente tre esempi, ce ne sono altri (nei commenti e altrove):

    • Kurt Mehlhorn ha descritto nel 1999 un problema simile negli algoritmi di geometria computazionale (ad esempio piccoli errori nelle coordinate possono produrre grandi errori nei risultati di alcuni algoritmi), risolto in modo simile nella libreria Leda , insistendo sul fatto che ciascun algoritmo produce un "certificato" della sua risposta oltre alla risposta stessa.

    • Demaine, Lopez-Ortiz e Munro nel 2000 hanno usato i concetti di certificati (li chiamano "prove") per mostrare limiti inferiori adattativi sul calcolo dell'unione e dell'intersezione (e differenza, ma questo è banale) di insiemi ordinati. Non escludere il loro lavoro perché non hanno usato i certificati per proteggere dagli errori di calcolo: hanno dimostrato che anche se il certificato può essere lineare nella dimensione dell'istanza nel peggiore dei casi, è spesso più breve e quindi può essere "controllato "in tempo sublineare (dato accesso casuale all'input come matrice ordinata o B-Tree), e in particolare in tempo inferiore a quanto richiesto per calcolare tale certificato.

    • Ho usato il concetto di certificati su vari altri problemi da quando ho visto Ian Munro presentare la loro implementazione ad Alenex 2001 , e in particolare per le permutazioni (scuse per la spina spudorata, un'altra in arrivo), dove il certificato è più breve nel migliore dei casi rispetto al caso peggiore o medio, che produce una struttura di dati compressi per permutazioni. Anche in questo caso, il controllo del certificato (ovvero l'ordine) richiede al massimo un tempo lineare, inferiore al calcolo (ovvero l'ordinamento).

  2. Il concetto non è sempre utile per il controllo degli errori: ci sono problemi in cui il controllo del certificato richiede tanto tempo quanto la sua produzione (o semplicemente la produzione del risultato). Mi vengono in mente due esempi, uno banale e l'altro complicato, Blum e Kannan (menzionati nei commenti) ne danno altri.

    • Il certificato per dimostrare che un elemento non si trova in una matrice non ordinata di elementi viene ottenuto in confronti e verificato nello stesso tempo.nn
    • Il certificato per lo scafo convesso in due e tre dimensioni, se i punti sono dati in ordine casuale, richiede tanti bit per codificare come confronti per calcolare [FOCS 2009] (altra spina spudorata).

La biblioteca Leda è lo sforzo più generale (che io conosca) per rendere gli algoritmi deterministici che producono certificati la norma nella pratica. L'articolo di Blum e Kannan è lo sforzo migliore che ho visto per renderlo la norma in teoria, ma mostrano i limiti di questo approccio.

Spero che sia d'aiuto...


Grazie, è molto interessante. Rispetto al tuo punto 2. Penso di parlare di qualcosa di leggermente diverso. Il problema non sono i bug nel codice ma piuttosto gli algoritmi che conosciamo potrebbero dare la risposta sbagliata. Inoltre, a livello banale, non so nemmeno come sarebbe un utile certificato per molte funzioni matematiche. Ad esempio per una somma infinita o, diciamo, la minimizzazione di una funzione.

Per essere leggermente più chiaro. Sembra che sia molto difficile escogitare algoritmi dimostrabilmente corretti per molti problemi matematici. Tuttavia viviamo con algoritmi che possono commettere errori senza avvisarci (e in effetti sono dimostratamente errati) per motivi pratici. La speranza che non sia (come) difficile ideare corretti verificatori di correttezza per lo stesso insieme di problemi.

Mi sto allontanando dalla mia esperienza, ma ho pensato che gli errori di calcolo fossero generalmente causati da arrotondamenti con risultati intermedi (era chiaramente il caso degli esempi che motivano Leda) su operazioni di base (moltiplicazioni, divisioni, ecc.) Piuttosto che errori negli algoritmi. Avrei pensato che i sistemi algebrici come l'acero e il matlab evitassero quelli :(
Jeremy

È una domanda interessante e forse qualcuno qui lo sa per certo .. comunque molte delle risposte errate di cui sto parlando non sono per calcoli numerici, quindi questo implica almeno prima facie che i problemi sono più di quelli che descrivi. Non conosco la complessità dei limiti di calcolo / somme infinite ecc., Ma presumo che in generale siano intrattabili nel caso peggiore e quindi siano necessarie / utili euristiche che a volte danno la risposta sbagliata. mathematica.stackexchange.com/questions/tagged/bugs non è disinformativo per avere un'idea delle cose che vanno male.

Il CS teorico ha il concetto di autotest, che si applica a molti problemi dell'algebra lineare. Una delle idee di base è che per molti problemi, la soluzione può essere controllata (forse con un po 'di informazioni extra) più facilmente di quanto possa essere calcolata. Vedi ad esempio https://doi.org/10.1016/0022-0000(93)90044-W .
Neal Young,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.