LOGICA PER LA PROGRAMMAZIONE - a.a Primo Appello - 20/01/2017 Soluzioni Proposte

Documenti analoghi
LOGICA PER LA PROGRAMMAZIONE. Franco Turini

Semantica Assiomatica

Riconoscere e formalizzare le dipendenze funzionali

Lezione 8. La macchina universale

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Algebra e Logica Matematica. Calcolo delle proposizioni Logica del primo ordine

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Esercitazione. Proposizioni. April 16, Esercizi presi dal libro di Rosen (useremo 0 per False e 1 per True). Problema 15, sezione 1.1.

La programmazione con vincoli in breve. La programmazione con vincoli in breve

La logica modale e la dimostrazione dell esistenza di Dio di Gödel. LOGICA MODALE

Nuove Hyundai Go! Brasil Limited Edition STANDARD POSE 4 fuoriclasse per la Coppa del Mondo.

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

x log(x) + 3. f(x) =

Indecidibilità, indefinibilità e incompletezza. 1

Esame di Informatica Generale 25 giugno 2010 Professori: Carulli, Fiorino, Mazzei

Linguaggi. Claudio Sacerdoti Coen 11/04/ : Semantica della logica del prim ordine. Universitá di Bologna

Alcune nozioni di base di Logica Matematica

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

ESERCIZIO 1 (Definizione funzioni passaggio parametri per copia)

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

3. La sintassi di Java

Lezione 3: Il problema del consumatore: Il

Algebra Booleana ed Espressioni Booleane

1a) Calcolare gli estremi dell intervallo di confidenza per µ al 90% in corrispondenza del campione osservato.

Esame di Informatica Generale 25 giugno 2012 Professori: Carulli, Fiorino. Docente Risultati Scritto Fiorino Carulli

Esempi ed esercizi Aritmetica degli elaboratori e algebra di commutazione

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

I TEST DI LOGICA. Alberto Zanardo Dipartimento di Matematica Università di Padova. I.T.I, Marzotto, Valdagno 24 febbraio 2014

SPAZI METRICI. Uno spazio metrico X con metrica d si indica con il simbolo (X, d). METRICI 1

DAL DIAGRAMMA AL CODICE

Istruzioni condizionali. Istruzioni condizionali IF-THEN- ELSE IF-THEN-ELSE. Statistica computazionale Carla Rampichini a.a.

Algebra di Boole. Le operazioni, nell algebra booleana sono basate su questi tre operatori: AND ( ), OR ( + ),NOT ( )

Massimi e minimi vincolati in R 2 - Esercizi svolti

Planning as Model Checking Presentazione della Tesina di Intelligenza Artificiale

A Descrizione: ruota effetti opzionale con supporto/ optional effects wheel with support/ iprofile FLEX MODIFICHE. Codice assemblato:

Corso di Esercitazioni di Programmazione

CAPITOLO 3 TRASFORMARE FORMULE E DEDURRE DA TEORIE.

Calcolare il massimo di una lista

Errori più comuni. nelle prove scritte

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Verifica di programmi C con SPIN

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Esercitazione 1 (Capitolo 2) Reti Logiche

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Logica dei predicati

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

x y z F x y z F F = x z + y z + yz + xyz G = wyz + vw z + vwy + vwz + v w y z Sommario

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Gli algoritmi: definizioni e proprietà

Introduzione al MATLAB c Parte 2

Cenni di Logica matematica

Esame di Informatica Generale 25 giugno 2012 Professori: Carulli, Fiorino. Docente Risultati Scritto Fiorino Carulli

Corso di Laurea in INFORMATICA

ALGEBRA DELLE PROPOSIZIONI

Geometria Superiore Esercizi 1 (da consegnare entro... )

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

La selezione binaria

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

DAL PROBLEMA ALL'ALGORITMO AL PROGRAMMA SCRITTO IN Come. Scopo principale dell informatica è risolvere problemi con i calcolatori.

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE

Appunti di Logica Matematica

Il software e la programmazione

TRIBUNALE DI ROMA TABELLA DANNO BIOLOGICO -ANNO 2013

INFORMATICA 1 L. Mezzalira

VARIABILI ALEATORIE CONTINUE

1 Giochi a due, con informazione perfetta e somma zero

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. Bob Kowalski: "Algoritmo = Logica + Controllo"

+ / operatori di confronto (espressioni logiche/predicati) / = > < Pseudo codice. Pseudo codice

Gestione di files Motivazioni

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 13 Settembre COGNOME E NOME: MATRICOLA: Civile Ambiente e Territorio

Algebra e Geometria. Ingegneria Meccanica e dei Materiali Sez (2) Ingegneria dell Automazione Industriale Sez (2)

Sottoprogrammi: astrazione procedurale

Algebra booleana. Si dice enunciato una proposizione che può essere soltanto vera o falsa.

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice.

Esercizio per casa. Filosofia della scienza Gianluigi Bellin. October 29, Si formalizzino i seguenti enunciati nel calcolo dei predicati.

Parte 1. Vettori di bit - AA. 2012/13 1.1

FOCUS GROUP. Trento, e

Algoritmi di Ricerca. Esempi di programmi Java

EQUAZIONI DIFFERENZIALI Esercizi svolti. y = xy. y(2) = 1.

Test Excel conoscenze di Base

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

Language-based security SICUREZZA BASATA SUI LINGUAGGI NON-INTERFERENZA. Isabella Mastroeni

LOGICA DEI PREDICATI. Introduzione. Predicati e termini individuali. Termini individuali semplici e composti

SAPIENZA Università di Roma Facoltà di Ingegneria

Lab 04 Istruzioni, cicli e array"

Syllabus: argomenti di Matematica delle prove di valutazione

Esercitazioni di Reti Logiche. Lezione 2 Algebra Booleana e Porte Logiche. Zeynep KIZILTAN zkiziltan@deis.unibo.it

Cap. 3 Reti combinatorie: analisi e sintesi operatori logici e porte logiche

Corso di Laurea in Matematica

Codifica binaria e algebra di Boole

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Laurea in Ingegneria Informatica Facoltà di Ingegneria Università di Roma La Sapienza. Dispense del Corso di Intelligenza Artificiale

Matematica Discreta. Gianfranco Niesi. Appunti per il corso di. C.S. in Informatica. Dipartimento di Matematica A.A

Transcript:

LOGICA PER LA PROGRAMMAZIONE - a.a. 2016-2017 Primo Appello - 20/01/2017 Soluzioni Proposte Attenzione: Le soluzioni che seguono sono considerate corrette dai docenti. Per ogni esercizio possono esistere altre soluzioni corrette, anche molto diverse da quelle proposte. ESERCIZIO 1 Si dica se le seguenti proposizioni sono tautologie oppure no. Se una proposizione è una tautologia, lo si deve dimostrare senza usare le tabelle di verità; altrimenti va prodotto un controesempio mostrando esplicitamente che rende la formula falsa. 1. Q S P R P R R S 2. A B C D C A B C A SOLUZIONE ESERCIZIO 1 1. La formula è una tautologia come mostrato di seguito. Per dimostrare la formula partiamo dalla premessa: Q S P R P R R {complemento} Q S P R P R {contronominale, doppia negazione} P R Q S P R {Modus Ponens, occ. pos.} Q S {De Morgan, doppia negazione} Q S {semplif-, occ. pos.} S 2. La formula non è una tautologia, in quanto l interpretazione: {A, B F, C, D F} la rende falsa. La riga della tabella di verità corrispondente all interpretazione data si costruice in modo standard. ESERCIZIO 2 Si consideri l alfabeto del primo ordine A con simboli di costante C = {L, M } e simboli di predicato P = {persona, scrittore, libro, hascritto, } e l interpretazione I = D, α, dove D è l insieme delle persone e dei libri, e αl è la persona Luca, αm è la persona Marco, αpersonap è vera se e solo se p è una persona, αscrittorep è vera se e solo se p è uno scrittore, αlibrop è vera se e solo se p è un libro, αhascrittop, q è vera se e solo se lo scrittore p ha scritto il libro q Formalizzare i seguenti enunciati usando l alfabeto A rispetto all interpretazione I: 1. Ogni persona è uno scrittore solo se ha scritto almeno un libro 1

2. Marco e Luca non hanno scritto nessun libro insieme SOLUZIONE ESERCIZIO 2 1. 2. x. personax scrittorex y. libroy hascrittox, y. x. librox hascrittom, x hascrittol, x. ESERCIZIO 3 Si provi che la seguente formula è valida A, B, C e D contengono la variabile libera x: x. C A x. D B x. A B A x. C D SOLUZIONE ESERCIZIO 3 Cominciamo col semplificare la conseguenza: x. C D {De Morgan} x. C D {De Morgan, doppia negazione} x. C D Quindi per la Regola di Skolemizzazione è sufficiente dimostrare la seguente formula, dove d è una nuova costante: Partiamo dalla premessa: x. C A x. D B x. A B A C A [ d / x ] x. C D x. C A x. D B x. A B A C[ d / x ] A[ d / x ] {semplif-, occ. pos.} x. D B x. A B A C[ d / x ] A[ d / x ] {elim-, occ. pos.} D[ d / x ] B[ d / x ] x. A B A C[ d / x ] A[ d / x ] {complemento} D[ d / x ] B[ d / x ] x. A B C[ d / x ] A[ d / x ] {De Morgan} D[ d / x ] B[ d / x ] x. A B C[ d / x ] A[ d / x ] {elim-, occ. pos.} D[ d / x ] B[ d / x ] A[ d / x ] B[ d / x ] C[ d / x ] A[ d / x ] {De Morgan, doppia negazione} D[ d / x ] B[ d / x ] A[ d / x ] B[ d / x ] C[ d / x ] A[ d / x ] {contronominale} D[ d / x ] B[ d / x ] A[ d / x ] B[ d / x ] A[ d / x ] C[ d / x ] {Modus Ponens, occ. pos.} D[ d / x ] B[ d / x ] B[ d / x ] C[ d / x ] {semplif., occ. pos.} C[ d / x ] {intro-, occ. pos} C[ d / x ] D[ d / x ] 2

{intro-, occ. pos} x. C D ESERCIZIO 4 Si formalizzi il seguente enunciato assumendo a, b: array [0, n of int: Ogni elemento dell array b è uguale alla somma degli elementi di a che lo precedono strettamente oppure è uguale al massimo tra gli elementi pari di a che lo seguono. SOLUZIONE ESERCIZIO 4 x. x [0, n b[x] = Σ y : y [0, x. a[y] b[x] = max z : z [x, n paria[z]. a[z] ESERCIZIO 5 Si consideri il seguente programma annotato assumendo a, c: array [0, n of int: { n > 0 } y:=n-1; h:=0; {Inv : y [ 1, n h = #{i : i y, n a[i] > c[i]}}{t: y} while y >= 0 do endw if a[y] > c[y] y:=y-1 then h:=h+1 else skip fi; {h = #{i : i [0, n a[i] > c[i]}} Scrivere e dimostrare l ipotesi di invarianza. SOLUZIONE ESERCIZIO 5 Invariante Inv : y [ 1, n h = #{i : i y, n a[i] > c[i]} Funzione di terminazione t : y Condizione E : y >= 0 Comando C : if...fi; y:=y-1 L Ipotesi di Invarianza {Inv E} C {Inv def E} in questo caso è {y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0} if a[y] > c[y] then h:=h+1 else skip fi; y:=y-1 {y [ 1, n h = #{i : i y, n a[i] > c[i]} def y >= 0} Per verificare la tripla applichiamo la Regola della Sequenza e quindi dobbiamo trovare una asserzione R che soddisfi le seguenti triple: 5.1 {y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0} if a[y] > c[y] then h:=h+1 else skip fi {R} 5.2 {R} y:=y-1 {y [ 1, n h = #{i : i y, n a[i] > c[i]} def y >= 0} Per determinare R usiamo l Assioma dell Assegnamento in 5.2 e troviamo def y 1 y [ 1, n h = #{i : i y, n a[i] > c[i]} def y >= 0 [ y 1 / y ] {sostituzione, definizione di def } y 1 [ 1, n h = #{i : i y 1, n a[i] > c[i]} def y 1 >= 0 Resta quindi da verificare la tripla 5.1 usando l asserzione R appena calcolata. Per dimostrare la tripla 5.1, applichiamo la Regola del Condizionale riducendoci a dimostrare che: 3

5.1.1 y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0 def a[y] > c[y] 5.1.2 {y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0 a[y] > c[y]}} h:=h+1 {R} 5.1.3 {y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0 a[y] > c[y]} skip {R} 5.1.1 Per dimostrare l implicazione partiamo dalla conseguenza def a[y] > c[y] {definizione di def } y doma y domc {Ip: y [ 1, n doma = domc = [0, n y >= 0} 5.1.2 Per verificare la tripla applichiamo la Regola dell Assegnamento e ci riduciamo a dimostrare che y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0 a[y] > c[y] def h + 1 R[ h+1 / h ] Partiamo dalla conseguenza def h + 1 R[ h+1 / h ] {definizione di def e sostituzione} y 1 [ 1, n h + 1 = #{i : i y 1, n a[i] > c[i]} {Ip: y [ 1, n, y >= 0} h + 1 = #{i : i y 1, n a[i] > c[i]} {Intervallo-#, Ip: a[y] > c[y] } h + 1 = #{i : i y, n a[i] > c[i]} + 1 {Ip: h = #{i : i y, n a[i] > c[i]} } h + 1 = h + 1 {calcolo } 5.1.3 Per verificare la tripla applichiamo l assioma SKIP e la regola PRE e ci riduciamo a dimostrare che y [ 1, n h = #{i : i y, n a[i] > c[i]} y >= 0 a[y] > c[y] R La dimostrazione procede in modo analogo al caso 5.1.2 usando la legge Intervallo-#. In questo caso tuttavia abbiamo che a[y] > c[y]. ESERCIZIO 6 Si verifichi la seguente tripla di Hoare assumendo c,d: array [0, n of int: {k 0, n i. i [0, k c[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x } c[k] := c[k-1] + d[k] - k { i. i [0, k] c[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x } SOLUZIONE ESERCIZIO 6 Applicando l Assioma dell Aggiornamento Selettivo e la regola PRE ci riduciamo a verificare che: 4

k 0, n i. i [0, k c[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x def k k domc def c[k 1] + d[k] k Q[ a / c ] dove a = c[ c[k 1]+d[k] k / k ] e Partiamo dalla conseguenza Q = i. i [0, k] c[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x. def k k domc def c[k 1] + d[k] k Q[ a / c ] {definizione di def } k domc k 1 domc k domd Q[ a / c ] {Ip: domc = domd = [0, n, k 0, n} Q[ a / c ] {sostituzione} i. i [0, k] a[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x {Intervallo- } i. i [0, k a[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x a[k] = Σy : y [0, k]. d[y] Σx : x [0, k]. x { } Ip: i. i [0, k c[i] = Σy : y [0, i]. d[y] Σx : x [0, i]. x, definizione di a a[k] = Σy : y [0, k]. d[y] Σx : x [0, k]. x { definizione di a = c[ c[k 1]+d[k] k / k ] } c[k 1] + d[k] k = Σy : y [0, k]. d[y] Σx : x [0, k]. x {Intervallo-Σ} c[k 1] + d[k] k = Σy : y [0, k 1]. d[y] + d[k] Σx : x [0, k 1]. x + k {calcolo} c[k 1] = Σy : y [0, k 1]. d[y] Σx : x [0, k 1]. x {Ip: c[k 1] = Σy : y [0, k 1]. d[y] Σx : x [0, k 1]. x} 5