Tema 5 - Dpto. Ciencias de la Computación e Inteligencia Artificial

Anuncio
Tema 5:
Procedimientos para obtener funciones
computables
Dpto. Ciencias de la Computación e Inteligencia Artificial
Universidad de Sevilla
Lógica y Computabilidad
Curso 2010–11
LC, 2010–11
Procedimientos para obtener funciones computables
5.1
Procedimientos de definición y funciones
básicas
I
Estudiaremos procedimientos para definir funciones que nos
permitan obtener nuevas funciones computables, a partir de
otras funciones computables ya conocidas.
I
Es deseable que estos procedimientos de definición permitan
obtener todas las funciones GOTO–computables a partir de
algunas funciones básicas cuya computabilidad sea
indiscutible.
I
Esto nos proporcionará, más adelante, una caracterización de
las funciones GOTO-computables independiente de todo
modelo de computación particular.
Consideramos tres procedimientos básicos:
I
I
I
I
LC, 2010–11
Composición.
Recursión primitiva.
µ–Recursión (o Minimización).
Procedimientos para obtener funciones computables
5.2
Composición
I
Dadas g : Nn − −→ N, h1 , .., hn : Nm − −→ N, decimos que f
es la composición de g y h1 , . . . , hn , si
Para todo ~x ∈ Nm ,
I
I
f (~x ) = g (h1 (~x ), . . . , hn (~x ))
Usamos como notación f = C(g ; h1 , . . . , hn ).
Lema. GCOMP es cerrado bajo composición:
I
En efecto, el siguiente programa calcula f = C(g ; h1 , ..., hn ):
Z1 ←− h1 (X1 , ..., Xm )
..
.
Zn ←− hn (X1 , ..., Xm )
Y ←− g (Z1 , ..., Zn )
I
LC, 2010–11
Lema. El conjunto de funciones totales es cerrado bajo
composición.
Procedimientos para obtener funciones computables
5.3
Recursión Primitiva(I)
I
Dadas g : Nm − −→ N, h : Nm+2 − −→ N, decimos que
f : Nm+1 − −→ N se define por recursión primitiva a partir de
g y h (y escribimos f = R(g , h)), si
f (~x , 0) = g (~x )
m
Para todo ~x ∈ N , y ∈ N
f (~x , y + 1) = h(~x , y , f (~x , y ))
I
Esta definición se extiende al caso m = 0:
f (0) = k
f (x + 1) = h(x, f (x))
donde k ∈ N. En este caso escribimos: f = R(k, h), y
diremos que f se obtiene por recursión primitiva a partir de la
constante k y de h.
LC, 2010–11
Procedimientos para obtener funciones computables
5.4
Recursión Primitiva(II)
I
Lema. GCOMP es cerrado bajo recursión primitiva:
I
En efecto, sean g : Nm − −→ N, h : Nm+2 − −→ N
G-computables.
El siguiente programa calcula f = R(g ; h):
[A]
I
LC, 2010–11
Y ←− g (X1 , ..., Xm )
IF Xm+1 = 0 GOTO E
Y ←− h(X1 , ..., Xm , Z , Y )
Z ←− Z + 1
Xm+1 ←− Xm+1 − 1
GOTO A
Lema. El conjunto de funciones totales es cerrado por
recursión primitiva.
Procedimientos para obtener funciones computables
5.5
µ–Recursión (I)
I
Sea f : Nn+1 − −→ N, (n ≥ 1). La función definida por
µ–recursión a partir de f es la función fµ : Nn − −→ N dada
por
min{y : f (~x , y ) = 0 ∧ ∀z < y (f (~x , z) ↓)} si existe
fµ (~x ) =
↑
e.o.c.
I
Nota. Usualmente escribiremos: µy (f (~x , y ) = 0).
Lema. GCOMP es cerrada bajo µ–Recursión.
En efecto, sea f : Nn+1 − −→ N, (n ≥ 1), GOTO–computable.
El siguiente programa calcula fµ :
I
I
[A] Z ←− f (X1 , ..., Xn , Y )
IF Z = 0 GOTO E
Y ←− Y + 1
GOTO A
LC, 2010–11
Procedimientos para obtener funciones computables
5.6
µ–Recursión (II)
Para los predicados suele darse una definición ligeramente distinta:
I Si θ es un predicado n + 1-ario, definimos:
min{y : θ(~x , y )} si existe el mı́nimo
θµ (~x ) ≡ µy (θ(~x , y )) =
↑
e.c.o.c.
I
I
I
LC, 2010–11
Lema. θ ∈ GCOMP =⇒ µy (θ(~x , y )) ∈ GCOMP
Observación: La µ–Recursión no proporciona siempre
funciones totales.
Ejemplo. Sea θ el siguiente predicado de aridad 2:
1 si x = 0
θ(x, y ) =
0 e.o.c.
0 si x = 0
Entonces, θµ (x) = µy (θ(x, y )) =
↑ si x 6= 0
Como θ es computable, la función θµ es computable.
Procedimientos para obtener funciones computables
5.7
Funciones básicas
Llamaremos funciones básicas a las siguientes funciones:
I
Siguiente: S : N −→ N;
S(x) = x + 1
I
Idénticamente nula: O : N −→ N; O(x) = 0
I
Proyecciones:
Para
Qn
Qn cada i, n ∈ N (1 ≤ i ≤ n),
:
N
−→
N;
i
i (x1 , . . . , xn ) = xi
Lema. Las funciones básicas son G-computables:
X ←− X + 1
I Siguiente, S :
Y ←− X
I Nula, O :
Programa vacı́o, p∅
Q(n)
I Proyecciones,
:
Y ←− Xj
j
LC, 2010–11
Procedimientos para obtener funciones computables
5.8
Ejemplos-I- (Composición y Recursión)
Las siguientes funciones son GOTO-computables y totales:
I Identidad IN : N −→ N
I Constantes: Cak : Nk −→ N, Cak (~
x ) = a (a, k ∈ N, k > 0)
I Predecesor: pr : N −→ N
0
si x = 0
pr (x) =
x − 1 si x > 0
•
I
Diferencia reducida: − : N2 −→ N
•
0
si x ≤ y
x −y =
x − y e.c.o.c.
I
Signo: sg : N −→ N
sg (x) =
LC, 2010–11
0 si x = 0
1 e.c.o.c.
Procedimientos para obtener funciones computables
5.9
Ejemplos-II- (Composición y Recursión)
I
−
Signo inverso: sg : N −→ N
•
−
sg (x) = 1 − sg (x)
I
Suma: + : N2 −→ N
+(x, y ) = x + y
I
Producto: · : N2 −→ N
·(x, y ) = x·y
I
LC, 2010–11
Mı́nimo: min : N2 −→ N
y Máximo: max : N2 −→ N.
x si x ≤ y
min(x, y ) =
y e.c.o.c.
x si x ≥ y
max(x, y ) =
y e.c.o.c.
Procedimientos para obtener funciones computables
5.10
Ejemplos-III- (Composición y Recursión)
I
Distancia: || : N2 −→ N
|x − y | =
x −y
y −x
si x ≥ y
e.c.o.c.
I
Exponencial: exp : N2 −→ N
1 si x = 0 ∧ y = 0
exp(x, y ) =
x y e.c.o.c.
I
Factorial: fact : N −→ N

1



Y
fact(x) =

j


si x = 0
e.c.o.c.
1≤j≤x
LC, 2010–11
Procedimientos para obtener funciones computables
5.11
Ejemplos-IV- (µ–Recursión)
I
I
Minimización de la suma: Sum(x, y ) = x + y
0 si x = 0
Sumµ (x) = µy (Sum(x, y ) = 0) =
↑ e.o.c.
(
·
x − y si y ≤ x
Minimización de la función g (x, y ) =
↑
si y > x
gµ (x) = Id(x)
I
La función función raı́z cuadrada parcial, Sqrt, definida ası́:
y si existe y ∈ N tal que y 2 = x
Sqrt(x) =
↑ e.o.c
es GOTO-computable.
En efecto, Sqrt(x) = µy (|x − y 2 | = 0)
LC, 2010–11
Procedimientos para obtener funciones computables
5.12
Predicados y conjuntos GOTO–computables.
I
I
Un predicado sobre N es GOTO–computable si la función
que lo define es GOTO–computable.
Un conjunto A ⊆ Nk es GOTO–computable si su función
caracterı́stica, CA , es GOTO–computable.
Ejemplos:
I Los conjuntos ∅ y Nk , para cada k ∈ N son
GOTO–computables.
I Los predicados: θ1 (x, y ) ≡ x = y ; θ2 (x, y ) ≡ x ≤ y ;
θ3 (x, y ) ≡ x < y son GOTO–computables.
I Si f : Nk −→ N es GOTO–computable , entonces los
predicados (k + 1)-arios siguientes son GOTO–computables:
θ(~x , y ) ≡ f (~x ) = y ;
I
LC, 2010–11
θ0 (~x , y ) ≡ f (~x ) ≤ y ;
θ00 (~x , y ) ≡ f (~x ) < y .
El grafo G (f ) = {(~x , y ) ∈ Nk+1 : f (~x ) = y } de una función
f : Nk −→ N, GOTO–computable, es GOTO–computable.
Procedimientos para obtener funciones computables
5.13
Operaciones con conjuntos y predicados
I
Proposición. Sean θ, θ0 predicados sobre N, k–arios y
GOTO–computables, entonces los predicados:
¬θ, θ ∧ θ0 , θ ∨ θ0 , θ ⇒ θ0 y θ ⇔ θ0
son predicados GOTO-computables.
I
I
I
I
I
I
Corolario. Si A, B ⊆ Nk son conjuntos GOTO-computables,
entonces: Nk − A; A ∩ B; A ∪ B son GOTO-computables.
I
I
I
LC, 2010–11
¬θ(~x ) = sg (θ(~x ))
(θ ∧ θ0 )(~x ) = θ(~x )·θ0 (~x )
(θ ∨ θ0 )(~x ) = sg (θ(~x ) + θ0 (~x ))
θ ⇒ θ0 ≡ ¬θ ∨ θ0
θ ⇔ θ0 ≡ θ ⇒ θ0 ∧ θ0 ⇒ θ
CNk −A = ¬CA ;
CA∩B = CA ∧ CB ;
CA∪B = CA ∨ CB
Procedimientos para obtener funciones computables
5.14
Definiciones por casos
Proposición. Sean k ≥ 2 y f1 , . . . , fk : Nm −→ N funciones
GOTO-computables y totales. Sea {A1 , . . . , Ak } una partición de
Nm en conjuntos GOTO-computables, es decir,
S
Nm = ki=1 Ai , ∀i(Ai 6= ∅), y ∀i, j = 1, . . . , k, i 6= j ⇒ Ai ∩Aj = ∅
Entonces, la función g : Nm −→ N


 f1 (~x )
..
g (~x ) =
.


fk (~x )
definida por
si ~x ∈ A1
..
..
.
.
si ~x ∈ Ak
es GOTO-computable y total.
I
Pues g = f1 ·CA1 + . . . + fk ·CAk es GOTO-computable.
I
Nota: La proposición anterior puede expresarse con predicados
GOTO-computables, θ1 , . . . , θk , que sean exhaustivos y excluyentes.
LC, 2010–11
Procedimientos para obtener funciones computables
5.15
Minimización acotada -I-
Definición. Sea θ(~x , y ) un predicado (n + 1)–ario. Definimos la
función total θµ∗ : Nn+1 → N, ası́:
θµ∗ (~x , y )
I
=
min{z ≤ y : θ(~x , z)}
y +1
si existe tal mı́nimo
e.c.o.c.
Usualmente escribiremos: µz ≤ y θ(~x , z)
y diremos que θµ∗ se obtiene de θ por minimización acotada.
Proposición. Si θ ∈ GCOMP (n+1) entonces θµ∗ ∈ GCOMP (n+1) .
I
LC, 2010–11
Es fácil diseñar un programa que calcule θµ∗ (~x , y ) (Ejercicio).
Procedimientos para obtener funciones computables
5.16
Minimización acotada -III
Definición. Sea f (~x , y ) una función (n + 1)–aria y total.
Definimos la función de aridad n + 1, fµ∗ , ası́:
fµ∗ (~x , y ) = µz ≤ y (f (~x , z) = 0)
I
Diremos que fµ∗ se obtiene de f por minimización acotada.
I
Proposición. Si f ∈ GCOMP (n+1) y total entonces
fµ∗ ∈ GCOMP (n+1) .
Ejemplos.
I
I
I
La función cociente.
0
qt(x, y ) =
µt ≤ x (x < (t + 1) · y )
La función resto.
(
rm(x, y ) =
LC, 2010–11
si y = 0
e.o.c.
•
x − (y · qt(x, y )) si y =
6 0
0
si y = 0
Procedimientos para obtener funciones computables
5.17
Cuantificación acotada
I
Proposición. Sea θ ∈ G -COMP (n+1) un predicado n + 1-ario.
Los siguientes predicados son GOTO-computables:
θ1 (~x , y ) ≡ ∃z ≤ y θ(~x , z);
I
En efecto:
θ2 (~x , y ) ≡ ∀z ≤ y θ(~x , z)
•
I
θ1 (~x , y ) = sg (y + 1− µt ≤ y (θ(~x , t)))
I
θ2 (~x , y ) = sg (y + 1− µt ≤ y (¬θ(~x , t)))
•
I
Ejemplos. Los siguientes predicados son GOTO-computables:
I
Predicado de divisibilidad, x|y :
θ(x, y ) ≡ ∃z ≤ y (y = z · x)
I
Predicado de primalidad:
primo(x) ≡ (x > 1) ∧ ∀t ≤ x((t|x) → (t = 1 ∨ t = x))
LC, 2010–11
Procedimientos para obtener funciones computables
5.18
La sucesión de los números primos
I
Es la función p : N → N definida por:
I
I
I
LC, 2010–11
p(0) = 0, y
para todo n ≥ 1, p(n) = pn es el n–ésimo primo.
p es GOTO–computable ya que se define por recursión ası́:
p(0)
= 0
p(x + 1) = µy (primo(y ) ∧ y > p(x))
Procedimientos para obtener funciones computables
5.19
Codificación de sucesiones
Definición (Sucesiones finitas). Una codificación de Nm
a partir de N, es una función total f : Nm −→ N que verifica:
1. f es GOTO–computable e inyectiva.
2. Para cada i, 1 ≤ i ≤ m, la función total, gi : N −→ N:
ai si x ∈ rang (f ) ∧ x = f (a1 , ..., am )
gi (x) =
0 e.c.o.c.
es GOTO–computable.
Definición (Sucesiones de longitud arbitraria).
Sea N0 = {ε} ∪ N ∪ N2 ∪ ... ∪ Nk ∪ ... (donde ε es la sucesión
vacı́a -de longitud 0-).
Una función f : N0 −→ N, codifica N0 a partir de N, si:
I
f es total.
I
∀j ≥ 1, f Nj es una codificación de Nj , a partir de N.
LC, 2010–11
Procedimientos para obtener funciones computables
5.20
La función par
I
Es la función total h· , ·i : N2 −→ N definida por
•
hx, y i = 2x · (2y + 1) − 1
I
I
I
La función par es GOTO-computable y biyectiva.
Para todo x, y ∈ N se verifica: x ≤ hx, y i, y ≤ hx, y i.
Existen l, r : N −→ N tales que si z = hx, y i ,
l(z) = x;
I
I
r (z) = y
z = hl(z), r (z)i
l y r son funciones decodificadoras de h ·, ·i.
Las funciones l, r son GOTO-computables y totales.
Usando la función par podemos codificar N3 a partir de N:
(x, y , z) −→ hx, hy , zii
Y, en general, Nk a partir de N.
LC, 2010–11
Procedimientos para obtener funciones computables
5.21
Números de Gödel
Sea {pn : n ≥ 1} la sucesión de números primos y [ · · · ] : N0 −→ N
la función definida ası́:
[ε]
=1
[a1 , ..., an ] = p1a1 ...pnan
Diremos que [a1 , ..., an ] es el número de Gödel de la sucesión
finita a1 , ..., an .
Propiedades:
I
La función [ · · · ] codifica N0 a partir de N.
I
Para todo i, 1 ≤ i ≤ n se verifica: ai ≤ [a1 , ..., an ].
I
La función [ · · · ] no es inyectiva.
I
rang( [ · · · ])= N − {0}.
I
Cada número natural codifica infinitas sucesiones.
LC, 2010–11
Procedimientos para obtener funciones computables
5.22
Las funciones componente y longitud
I
Lema. Si x ∈ N − {0, 1} existen unos únicos
a1 , ..., an ∈ N, an 6= 0, tales que x = [a1 , ..., an ].
I
I
Escribiremos (x)i = ai si i ∈ {1, ..., n} y diremos que ai es
la componente i–ésima de x.
Si i ∈
/ {1, ..., n} entonces escribiremos: (x)i = 0.
I
Definición. Denominaremos función componente a la
función: ( · ) : N2 −→ N , definida ası́:
0
si x = 0
(x)i =
t+1
µt ≤ x (¬(pi |x)) e.c.o.
I
La función componente es GOTO–computable y total.
Definición. Definimos la función longitud, long : N −→ N,
ası́:
I
long (x) = µi ≤ x ((x)i 6= 0 ∧ ∀j ≤ x (j > i → (x)j = 0))
I
LC, 2010–11
La función longitud es GOTO–computable y total.
Procedimientos para obtener funciones computables
5.23
Descargar