I "teoremi di Wadler sono gratuiti" come il design per contratto per stabilire la correttezza?

cs.stackexchange https://cs.stackexchange.com/questions/19135

  •  30-10-2019
  •  | 
  •  

Domanda

Philip Wadler ha scritto a carta brillante chiamato "teoremi gratuitamente". La grande idea è che puoi usare i tipi per ragionare sul tuo programma e persino dimostrare semplici teoremi sul tuo programma.

Vediamo queste idee sui tipi applicati nella lingua Haskell.

Allo stesso tempo circa lo stesso periodo di tempo - abbiamo un Idea da Betrand Meyer chiamato "Design by Contract"- che è in particolare implementato in Lingua eiffel. Questo ha le seguenti caratteristiche:

  • Precondizioni di routine
  • Postcondizioni di routine
  • Invarianti di classe
  • Controlla le istruzioni (come assert)
  • Invarianti ad anello

L'idea alla base del design per contratto è I progettisti di software dovrebbero definire specifiche di interfaccia formale, precisa e verificabile per i componenti del software, che estendono la definizione ordinaria di tipi di dati astratti con precondizioni, postcondizioni e invarianti.

Ora molti sostengono che l'uso di "tipi" nei tuoi programmi porta a "programmi più corretti" (tramite il Corrispondenza di Howard Curry). Da quello che posso vedere - anche l'uso più avanzato di Digitazione dipendente in Idris e Scala è limitato ai tipi di somma e alle lunghezze degli elenchi (correggimi se sbaglio).

Al contrario: il potere del "design per contratto" nell'istituzione della correttezza del mio programma è più generale e più potente. (Sebbene non necessariamente a tempo di compilazione - ma al momento del test). Posso ad esempio stabilire nel mio programma bancario che tutti i depositi sono positivi e tutti i saldi dei conti segnalati sono positivi.

Il punto è che i tipi hanno un futuro affascinante delle possibilità e sono enormemente potenti e compilati - ma in questo momento la loro applicazione pratica sembra limitata.

La mia domanda è: La progettazione per contratto di applicazione più generale è che l'utilizzo di teoremi dai tipi alla ragioni sulla correttezza del mio programma attualmente? (O stiamo solo parlando di due cose diverse)

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top