• Non ci sono risultati.

LOGICA PER LA PROGRAMMAZIONE – a.a. 2017/18 Quinta esercitazione – 23/11/2017 – Soluzioni Proposte

N/A
N/A
Protected

Academic year: 2022

Condividi "LOGICA PER LA PROGRAMMAZIONE – a.a. 2017/18 Quinta esercitazione – 23/11/2017 – Soluzioni Proposte"

Copied!
4
0
0

Testo completo

(1)

LOGICA PER LA PROGRAMMAZIONE – a.a. 2017/18 Quinta esercitazione – 23/11/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 fornisca per ognuno dei seguenti enunciati una formula del primo ordine che lo formalizza usando l’interpretazione standard sui naturali e ipotizzando che bar e foo siano due array con dominio rispettivamente [0, n) e [0, m):

1. L’array bar ha al massimo un elemento minore di tutti gli elementi dell’array foo

2. Il primo elemento dell’array foo, se esiste, `e proprio uguale al doppio della somma degli elementi pari dell’array bar

3. La sequenza costituita dall’array bar seguito dall’array foo `e strettamente crescente.

4. Il numero di elementi dell’array bar che sono uguali all’elemento successivo `e minore della somma degli elementi dell’array foo che sono uguali al doppio dell’elemento precedente

5. Ogni elemento dell’array foo di posizione pari `e il triplo di un elemento dell’array bar , mentre tutti gli altri sono minori di tutti gli elementi di bar

SOLUZIONE ESERCIZIO 1

1. L’array bar ha al massimo un elemento minore di tutti gli elementi dell’array foo

#{x : x ∈ [0, n) | bar[x] < (min y : y ∈ [0, m) . foo[y])} ≤ 1

2. Il primo elemento dell’array foo, se esiste, `e proprio uguale al doppio della somma degli ele- menti pari dell’array bar

(m > 0) ⇒ foo[0] = 2 × Σ x : x ∈ [0, n) ∧ pari(bar[x]) . bar[x] 3. La sequenza costituita dall’array bar seguito dall’array foo `e strettamente crescente.

(∀x . x ∈ [0, n − 1) ⇒ bar[x] < bar[x + 1]) ∧ (∀x . x ∈ [0, m − 1) ⇒ foo[x] < foo[x + 1])

∧ ((n > 0) ∧ (m > 0) ⇒ bar[n − 1] < foo[0])

4. Il numero di elementi dell’array bar che sono uguali all’elemento successivo `e minore della somma degli elementi dell’array foo che sono uguali al doppio dell’elemento precedente

#{i : i ∈ [0, n − 1) | bar[i] = bar[i + 1]} < (Σj : j ∈ (0, m) ∧ foo[j] = 2 ∗ foo[j − 1] . foo[j]) 1

(2)

5. Ogni elemento dell’array foo di posizione pari `e il triplo di un elemento dell’array bar , mentre tutti gli altri sono minori di tutti gli elementi di bar

∀x . x ∈ [0, m) ⇒ (pari(x) ⇒ (∃y . y ∈ [0, n) ∧ foo[x] = 3 ∗ bar[y])) ∧ (dispari(x) ⇒ (∀y . y ∈ [0, n) ⇒ foo[x] < bar[y]))

ESERCIZIO 2 Si consideri il seguente array a con dominio [0, 4):

7 6 11 4

Si dimostri, utilizzando pi`u volte la legge dell’intervallo per la sommatoria, la validit`a della seguente formula:

m = (Σx : x ∈ [0, 4) ∧ pari (a[x]) . (a[x] − 1)2) ≡ m = 34 SOLUZIONE ESERCIZIO 2

m = (Σx : x ∈ [0, 3] ∧ pari (a[x]) . (a[x] − 1)2)

≡ {(Intervallo-Σ), pari(a[3])}

m = (Σx : x ∈ [0, 2] ∧ pari (a[x]) . (a[x] − 1)2) + 9

≡ {(Intervallo-Σ), ¬pari(a[2])}

m = (Σx : x ∈ [0, 1] ∧ pari (a[x]) . (a[x] − 1)2) + 9

≡ {(Intervallo-Σ), pari(a[1])}

m = (Σx : x ∈ [0, 0] ∧ pari (a[x]) . (a[x] − 1)2) + 9 + 25

≡ {(Intervallo-Σ), ¬pari(a[0])}

m = (Σx : x ∈ [0, 0) ∧ pari (a[x]) . (a[x] − 1)2) + 34

≡ {(Σ-vuoto)}

m = 34

ESERCIZIO 3 Si consideri il seguente array a con dominio [0, 5): 5 2 4 0 3 Si spieghi a parole cosa calcola la seguente formula e si dica quanto vale k:

k = (Σx : x ∈ [0, 5) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x) SOLUZIONE ESERCIZIO 3

La formula dice che k `e la somma degli indici degli elementi di a che se contengono un valore del dominio di a allora l’elemento in quella posizione `e un numero pari. Quindi k = 0 + 1 + 4 = 5.

Formalmente abbiamo che

k = (Σx : x ∈ [0, 5) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x)

≡ {(Intervallo-Σ), a[4] = 3 ∈ [0, 5) ∧ pari (a[3]), quindi l’implicazione `e vera per x 7→ 4}

k = (Σx : x ∈ [0, 4) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x) + 4

≡ {(Intervallo-Σ), a[3] = 0 ∈ [0, 5) ∧ ¬pari (a[0]), quindi l’implicazione `e falsa per x 7→ 3}

2

(3)

k = (Σx : x ∈ [0, 3) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x) + 4

≡ {(Intervallo-Σ), a[2] = 4 ∈ [0, 5) ∧ ¬pari (a[4])}

k = (Σx : x ∈ [0, 2) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x) + 4

≡ {(Intervallo-Σ), a[1] = 2 ∈ [0, 5) ∧ pari (a[2])}

k = (Σx : x ∈ [0, 1) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x) + 4 + 1

≡ {(Intervallo-Σ), ¬a[0] ∈ [0, 5), quindi l’implicazione `e vera per x 7→ 0}

k = (Σx : x ∈ [0, 0) ∧ (a[x] ∈ [0, 5) ⇒ pari (a[a[x]])). x) + 0 + 4 + 1

≡ {(Σ-vuoto)}

k = 5

ESERCIZIO 4 Dimostrare la seguente formula usando le ipotesi non tautologiche e la legge dell’intervallo per la sommatoria:

m = Σy : y ∈ [0, z) . a[y] + 2 ∗ Σy : y ∈ [0, z) . y ⇒

m + a[z] + 2 ∗ z = Σy : y ∈ [0, z] . a[y] + 2 ∗ Σy : y ∈ [0, z] . y

SOLUZIONE ESERCIZIO 4

Per dimostrare l’implicazione partiamo dalla conseguenza usando la premessa come ipotesi non tautologica:

m + a[z] + 2 ∗ z = Σy : y ∈ [0, z] . a[y] + 2 ∗ Σy : y ∈ [0, z] . y

≡ {(Intervallo-Σ)}

m + a[z] + 2 ∗ z = Σy : y ∈ [0, z) . a[y] + a[z] + 2 ∗ Σy : y ∈ [0, z] . y

≡ {calcolo}

m + 2 ∗ z = Σy : y ∈ [0, z) . a[y] + 2 ∗ Σy : y ∈ [0, z] . y

≡ {(Intervallo-Σ)}

m + 2 ∗ z = Σy : y ∈ [0, z) . a[y] + 2 ∗ ( Σy : y ∈ [0, z) . y + z)

≡ {calcolo}

m = Σy : y ∈ [0, z) . a[y] + 2 ∗ Σy : y ∈ [0, z) . y

≡ Ip: m = Σy : y ∈ [0, z) . a[y] + 2 ∗ Σy : y ∈ [0, z) . y

T

ESERCIZIO 5 Usando le ipotesi non tautologiche e le opportune leggi dell’intervallo, dimo- strare la seguente formula assumendo che gli array a e b abbiano dominio [0, n) e che x ∈ (0, n):

∀i . i ∈ [0, x) ⇒ b[i] = Σj : j ∈ [0, i] . a[j]

∧ b[x] = b[x − 1] + a[x] ⇒

∀i . i ∈ [0, x] ⇒ b[i] = Σj : j ∈ [0, i] . a[j]

SOLUZIONE ESERCIZIO 5

Per dimostrare l’implicazione partiamo dalla conseguenza usando la premessa come ipotesi non tautologica:

3

(4)

∀i . i ∈ [0, x] ⇒ b[i] = Σj : j ∈ [0, i] . a[j]

≡ {(Intervallo-∀), x > 0}

∀i . i ∈ [0, x) ⇒ b[i] = Σj : j ∈ [0, i] . a[j]

∧ b[x] = Σj : j ∈ [0, x] . a[j]

≡ Ip: ∀i . i ∈ [0, x) ⇒ b[i] = Σj : j ∈ [0, i] . a[j], (Unit`a) b[x] = Σj : j ∈ [0, x] . a[j]

≡ {Ip: b[x] = b[x − 1] + a[x]}

b[x − 1] + a[x] = Σj : j ∈ [0, x] . a[j]

≡ {(Intervallo-Σ)}

b[x − 1] + a[x] = Σj : j ∈ [0, x) . a[j] + a[x]

≡ {calcolo}

b[x − 1] = Σj : j ∈ [0, x) . a[j]

≡ Ip: ∀i . i ∈ [0, x) ⇒ b[i] = Σj : j ∈ [0, i] . a[j], (Elim-∀), x > 0 e quindi x − 1 ∈ [0, x) T

4

Riferimenti

Documenti correlati

Dopo la prova scritta il docente aggiorna la propria opinione sullo studente. Questi verr` a promosso se al termine dell’esame verr` a ritenuto diligente con probabilit` a

dove numero_elementi deve essere o un valore intero, o un’espressione costante oppure una variabile che sia stata però istanziata prima della definizione dell'array; ad esempio,

Abbiamo visto che il tipo di dato degli elementi di un array può essere qualsiasi tipo valido.. Il tipo di dato degli elementi di un array può dunque anche essere un

codice strumento prezzo FLT flauto 2500 VLN violino 8000. $inv_art

• Q `e condizione NECESSARIA per P: l’essere un mammifero ` e un requisito indispensabile per essere un cane, ovvero se Lassie non ` e un mammifero allora certamente non pu` o essere

=⇒ Non serve specificare la dimensione del vettore nel parametro formale ( `e un puntatore al tipo degli elementi del vettore).. Quando passiamo una matrice ad una funzione, per

La quantificazione ` e ristretta ai soli senatori e anche in questo caso abbiamo un’implicazione implicita: “Per ogni persona vale che essere senatore implica avere almeno

I Questo ha consentito di applicare la logica ai fondamenti della matematica, arrivando a interessanti controversie fondazionali (studiate negli anni 1900-25). I In matematica,