Esercizi di Elementi di Informatica Teorica

Transcript

Esercizi di Elementi di Informatica Teorica
Esercizi di Elementi di Informatica Teorica
Luigi Starace
16 Ottobre 2014
Se riscontrate errori in questo svolgimento, vi sarei molto grato se li segnalaste al sottoscritto nel
thread ufficiale che trovate a questo indirizzo: http://scienzeinformatiche.agenziafuoritutto.com/
viewtopic.php?f=81&t=575
In alternativa alla mia mail personale luigi.starace su gmail.com o @luigi.starace su facebook.
Indice
1 54.1 - Let f (x) = 2x if x is a perfect square; f (x) = 2x + 1 otherwise. Show that f is
primitive recursive.
2
2 54.2 - Let σ(x) be the sum of the divisors of x if x 6= 0; σ(O) = 0.
Show that σ(x) is primitive recursive.
2
3 54.3 - Let π(x) be the number of primes that are ≤ x. Show that π(x) is primitive
recursive.
3
4 54.4 - Let SQSM(x) be true if x is the sum of two perfect squares; false otherwise.
Show that SQSM(x) is primitive recursive.
3
5 54.6 - Let RP(x, y) be true if x and y are relatively prime. Show that RP(x, y) is
primitive recursive.
3
6 58.5 - Let R(x, t) be a primitive recursive predicate. Prove that maxt≤y R(x, t) is
primitive recursive.
3
7 58.8 - Give a computable predicate P(x1 , . . . , xn , y) such that the function miny P(x1 , . . . , xn , y)
is not computable.
4
1
1
54.1 - Let f (x) = 2x if x is a perfect square; f (x) = 2x + 1
otherwise. Show that f is primitive recursive.
Riconosciamo subito lo schema di definizione per casi:
(
2x
if n is a perfect square
f (x) =
2x + 1 otherwise
Abbiamo quindi che 2x e 2x + 1 sono banalmente funzioni primitive ricorsive, in quanto possiamo definire
la somma secondo il seguente schema di ricorsione di funzioni di base:


= x = u11 (x)
x + 0
x + (y + 1) = (x + y) + 1 = s(x + y)


= g(x, x + y, y) = s(u32 (x, x + y, y))
e prodotto con il seguente:


x · 0
x · (y + 1)


= 0 = n(x)
= (x · y) + x = g(x, x · y, y)
= u32 (x, x · y, y) + u31 (x, x · y, y)
Il predicato P(x): x è un quadrato perfetto, è anch’esso primitivo ricorsivo, in quanto equivale al seguente:
(∃y)≤x : y · y = x ⇔ (∃y)≤x : d(y · y, x)
che è primitivo ricorsivo poichè quantificatore esistenziale limitato di un predicato primitivo ricorsivo.
Banalmente, anche ¬ P(x) sarà primitivo ricorsivo.
Possiamo quindi concludere che la nostra f è anch’essa primitiva ricorsiva, in quanto definita mediante
lo schema per casi con funzioni e predicati primitivi ricorsivi.
Infatti, è possibile scriverla nella seguente forma, come composizione di funzioni e predicati che abbiamo
mostrato essere primitivi ricorsivi:
f (x) = [2x · P (x)] + [(2x + 1) · (¬P (x))]
2
54.2 - Let σ(x) be the sum of the divisors of x if x 6= 0; σ(O) = 0.
Show that σ(x) is primitive recursive.
Possiamo scrivere la funzione in questo modo:
(
0, if x = 0
σ(x) = Px
i=1 γ(x, i), otherwise
Dove, in particolare:
(
γ(x, i) =
i, if i | x
0, otherwise
La funzione γ è primitiva ricorsiva in quanto la possiamo scrivere come:
(
u22 (x, i), if i | x
γ(x, i) =
n(x), otherwise
che è banalmente primitiva ricorsiva in quanto definizione per casi con funzioni e predicati primitivi
ricorsivi. Di conseguenza anche σ è primitiva ricorsiva, come volevasi dimostrare.
2
3
54.3 - Let π(x) be the number of primes that are ≤ x. Show
that π(x) is primitive recursive.
Abbiamo che:
π(x) =
x
X
P rime(x)
i=1
P rime(x) è un predicato primitivo ricorsivo, dal momento che può essere scritto in questo modo come
composizione, somme e prodotti di predicati primitivi ricorsivi:
P rime(x) ⇐⇒ (x > 1) ∧ (∀k)≤x k = 1 ∨ k = x ∨ ¬ k x
Allora, anche π(x), sommatoria di predicati primitivi ricorsivi, è primitiva ricorsiva.
4
54.4 - Let SQSM(x) be true if x is the sum of two perfect
squares; false otherwise. Show that SQSM(x) is primitive
recursive.
Possiamo scrivere SQSM(x) come:
SQSM (x) = (∃s, t)≤x : P (s) ∧ P (t) ∧ (t + s = x)
dove P è il predicato già definito nell’esercizio 1 ed indica se un numero è un quadrato perfetto o meno.
Poichè SQSM(x) è quantificatore esistenziale di un predicato prodotto di predicati primitivi ricorsivi,
allora SQSM(x) è anch’esso primitivo ricorsivo.
5
54.6 - Let RP(x, y) be true if x and y are relatively prime.
Show that RP(x, y) is primitive recursive.
Possiamo scrivere RP come:
¬ (∃t)≤max(x,y) : (t 6= 1 ∧ (t | x) ∧ (t | y))
Quindi, poichè negazione di quantificatore esistenziale di un predicato prodotto di predicati primitivi
ricorsivi, allora RP è primitivo ricorsivo.
6
58.5 - Let R(x, t) be a primitive recursive predicate. Prove
that maxt≤y R(x, t) is primitive recursive.
La funzione g assegnata dalla traccia è:
(
maxt≤y [R(x, t)] , if (∃t)≤y : R(x, t)
g(x, y) =
0, otherwise
I predicati e le funzioni che compaiono nella definizione per casi appena data di g sono primitivi ricorsivi.
Mostriamo che anche maxt≤y [R(x, t)] è primitiva ricorsiva:
max [R(x, t)] ⇔ min : R(x, t) ∧ [(∀k)≤y ((k ≤ t) ∨ (k > t ∧ ¬R(x, k))]
t≤y
t≤y
max è quindi primitiva ricorsiva, perchè l’abbiamo ricondotta ad una minimalizzazione di un predicato
primitivo ricorsivo.
3
7
58.8 - Give a computable predicate P(x1 , . . . , xn , y) such that
the function miny P(x1 , . . . , xn , y) is not computable.
Se P è calcolabile, allora la funzione miny è parzialmente calcolabile, in quanto il seguente S-Programma
la calcola:
1
3
[A]
IF (P( x1 , . . . , xn , y ) ) GOTO E
Y← Y+1
GOTO A
Ci basta quindi esibire un predicato calcolabile che, per alcuni input, non sia mai vero, come ad esempio:
B(x1 , x2 , y) ⇔ (x1 )3 + (x2 )3 = y 3
Considerando l’S-Programma P (analogo a quello illustrato precedentemente) che calcola
min B(x1 , x2 , y)
y
3
si ha che ∀y ψP
(2, 3, y) =↑, implicando che la funzione miny non è totale, e quindi che è soltanto
parzialmente calcolabile e non calcolabile.
4