Topic outline

  • General

  • Informazioni generali

    Le lezioni di questo modulo cominceranno lunedì 3 ottobre 2022. Le lezioni si tengono il lunedì e il giovedì dalle 15:30 alle 18:30, ma in alcune date termineranno alle 17:30. Le lezioni saranno esclusivamente in presenza; quando possibile, il materiale relativo a una lezione sarà pubblicato in anticipo. Saranno anche disponibili le registrazioni delle lezioni dell'anno scorso sugli stessi argomenti.

    Questo è il calendario delle prime lezioni, dedicate alle tecniche di dimostrazioni di correttezza di programmi e alla logica di Hoare. Consultate sempre il sito per eventuali variazioni.

    •  3 ottobre, 15:30-18:30, aula U4-02
    •  6 ottobre, 15:30-17:30, aula U24-C1
    • 10 ottobre, 15:30-18:30, aula U4-02
    • 13 ottobre, 15:30-18:30, aula U24-C1
    • 17 ottobre, 15:30-17:30, aula U4-02

    Calendario delle lezioni dedicate ai modelli di sistemi concorrenti: CCS
    • 20 ottobre, 15:30-18:30, aula U24-C1
    • 24 ottobre, 15:30-17:30, aula U4-02
    • 27 ottobre, 15:30-16:30, aula U24-C1
    • 3 novembre, 15:30-18:30, aula U24-C1
    • 7 novembre, 15:30-18:30, aula U4-02
    • 10 novembre, 15:30-18:30, aula U24-C1
    • 14  novembre, 15:30-18:30, aula U4-02

    Calendario delle lezioni dedicate ai modelli di sistemi concorrenti: reti di Petri
    • 17 novembre, 15:30-18:30, aula U24-C1
    • 21 novembre, 15:30-18:30, aula U4-02
    • 24 novembre, 15:30-18:30, aula U24-C1
    • 28 novembre, 15:30-18:30, aula U4-021
    • 1 dicembre, 15:30-18:30, aula U24-C1
    Calendario delle lezioni su logiche temporali e model-checking (consultate sempre il sito per eventuali variazioni)
    • 5 dicembre 15:30-17:30, aula U4-02
    • 12 dicembre 15:30-17:30, aula U4-02
    • 15 dicembre 15:30-17:30, aula U24-C1
    • 19 dicembre 15:30-17:30, aula U4-02
    • 22 dicembre 15:30-17:30, aula U24-C1
    • 9 gennaio 15:30-17:30, aula U4-02
    In preparazione all'esame, si potranno tenere incontri supplementari

  • Esami

    La prova scritta comprende quattro esercizi, uno per ciascuno dei seguenti argomenti:

    • CCS e bisimulazione
    • Reti di Petri e processi
    • Dimostrazioni di correttezza con la logica di Hoare
    • Logiche temporali e model-checking
    Negli esempi di prove scritte che trovate in questa sezione è presente un quinto esercizio, di traduzione dall'italiano a logiche temporali; questo tipo d'esercizio non fa più parte della prova scritta, ma può essere argomento di domande durante il colloquio.
    • Testo della prova scritta

    • Gli studenti che intendono sostenere la prova del modulo Modelli della concorrenza nell'appello del 13 giugno 2023 sono pregati di compilare questo modulo entro il 10 giugno. Chi prevede di completare l'esame dell'insegnamento Modelli e computabilità in questo appello deve anche iscriversi all'esame sul sito delle segreterie online.

    • Gli studenti che intendono sostenere la prova del modulo Modelli della concorrenza nell'appello del 4 luglio 2023 sono pregati di compilare questo modulo entro il 30 giugno. Solo chi prevede di completare l'esame dell'insegnamento Modelli e computabilità in questo appello deve anche iscriversi all'esame sul sito delle segreterie online.

    • Esito della prova scritta e calendario degli orali

    • Gli studenti che intendono sostenere la prova del modulo Modelli della concorrenza nell'appello dell'11 settembre 2023 sono pregati di compilare questo modulo entro l'8 settembre. Solo chi prevede di completare l'esame dell'insegnamento Modelli e computabilità in questo appello deve anche iscriversi all'esame sul sito delle segreterie online.

  • Dimostrazioni di correttezza

    Come si può stabilire se un programma è "corretto"? In questa parte del corso si studia un metodo rigoroso per esprimere i requisiti di programmi sequenziali e per dimostrare che un programma soddisfa un requisito assegnato. Lo strumento fondamentale è la logica di Hoare, definita a partire dalla logica proposizionale e dei predicati.

    • 15:30-18:30, aula U4-02

      Riassunto della lezione
      • Introduzione generale al modulo (vedi Introduzione)
      • Esempio di dimostrazione di correttezza informale (vedi Dimostrazione informale)
      • Nozioni fondamentali di logica proposizionale, prima parte (vedi Logica proposizionale)
    • 15:30-17:30, aula U24-C1

      Il materiale di consultazione non è ancora completo.

      Riassunto

      • Ripasso di logica proposizionale, seconda parte (vedi Logica proposizionale nel materiale della prima lezione)
      • Una logica per ragionare su programmi: le triple di Hoare
      • Definizione di un linguaggio di programmazione
      • Regole di derivazione della logica di Hoare, prima parte (vedi Logica di Hoare, prima parte; attenzione: nella definizione delle espressioni aritmetiche manca la clausola che dice che ogni nome di variabile è un'espressione aritmetica)
    • 15:30-17:30, aula U4-02

      Riassunto della lezione

      • Regole di derivazione della logica di Hoare, seconda parte
      • La regola delle istruzioni iterative: definizione di invariante di ciclo
      • Distinzione fra correttezza parziale e correttezza totale
      • Esercizi
    • 15:30-18:30, aula U24C1

      Il contenuto di questa cartella verrà arricchito nei prossimi giorni.

      Riassunto

      • Logica di Hoare: la regola di derivazione per la correttezza totale di istruzioni iterative
      • Considerazioni su correttezza e completezza della logica di Hoare
      • Precondizione più debole (weakest precondition): definizione, significato intuitivo, esempi
      • Corrispondenza fra stati e formule
    • Dimostrazioni di correttezza e precondizioni più deboli

    • 15:30-17:30, aula U4-02

      Riassunto

      • Programmi come trasformatori di stato; computazione come cammino in un grafo
      • Schema generale di una dimostrazione di correttezza
      • La logica di Hoare nella pratica: design by contract, Eiffel, Java Modeling language
      • La logica di Hoare come fondamento di una semantica dei programmi
      • Esercizi
      Attenzione: nel diagramma a pagina 7 del file mdc-finale.pdf la regione associata alla formula "s" dovrebbe contenere tutti gli stati nell'intersezione di "i" e "non B".
  • Modelli di sistemi concorrenti - CCS

    Presentiamo un linguaggio (CCS - Calculus of Communicating Systems) con il quale è possibile specificare, in forma astratta, sistemi concorrenti, cioè formati da componenti che interagiscono. Studiamo una nozione di equivalenza fra "programmi" scritti in questo linguaggio, e il suo interesse, sia teorico sia applicativo.

    • Questi esercizi verranno corretti lunedì 14 novembre.

    • Per la verifica della bisimulazione con la tecnica tratta dalla teoria dei giochi dell'"attaccante e difensore" si veda anche la sezione 3.5 e 3.5.1 del testo  "Reactive Systems" al link precedente. (Si noti che viene presentata la tecnica per la Bisimulazione forte e solo nella sezione 3.5.1 quella per la Bisimulazione debole.) 

    • Alcuni di questi esercizi sono stati discussi a lezione
    • Caal è un tool open source sviluppato presso l'Università di  Aalborg, in Danimarca e disponibile al link: https://caal.cs.aau.dk/. Consiste di vari moduli tra cui un editor per CCS, uno per la visualizzazione dei processi, uno per la verifica delle equivalenze e il model checking e uno per il gioco della bisimulazione. Questo file presenta gli aspetti fondamentali del tool e contiene indicazioni su come utilizzarlo.

  • Modelli di sistemi concorrenti - Reti di Petri

    Le reti di Petri costituiscono un modello formale per rappresentare sistemi distribuiti e processi concorrenti a partire dalla nozione di stato locale. Studiamo i fondamenti della teoria delle reti di Petri, e alcune tecniche per analizzarne le caratteristiche.

    • questi esercizi sui processi non sequenziali verranno corretti il 1 dicembre
    • questo esercizio verrà corretto in aula l'1 dicembre

    • aggiornato il 24 nov '22
    • Di questo articolo si considerino in particolare (senza le dimostrazioni) le seguenti sezioni:
      - sez 1, 2, 3 
      - 4.1 (fino al teorema 29 compreso), 4.5 
      - 5, 5.1, 5.2, 5.3, sui processi non sequenziali si vedano anche le slide pubblicate.

    • articolo su Elementary net systems e processi non sequenziali

    • Articolo su una panoramica della teoria e delle applicazioni delle Reti di Petri

    • Una biografia di C.A. Petri

    • articolo sui fondamenti della teoria delle reti di Petri

  • Logiche temporali e model-checking

    Fissato un modello formale di un sistema, reale o da realizzare, vogliamo stabilire se il modello soddisfa certi requisiti. Le tecniche di model-checking si basano sull'impiego di logiche modali e temporali per esprimere le proprietà che vogliamo studiare, e su algoritmi che decidono se il modello del sistema in esame le soddisfa o no. Studiamo alcuni linguaggi logici e i relativi algoritmi di decisione.