Está en la página 1de 45

REPÚBLICA BOLIVARIANA DE VENEZUELA

UNIVERSIDAD PEDAGÓGICA EXPERIMENTAL LIBERTADOR


INSTITUTO PEDAGÓGICO DE CARACAS
PROGRAMA DE INFORMÁTICA

Modelos Computacionales
(Introducción)

Caracas

Junio 2019
Curso: Profesor: Ing. Antonio Quintín Lemus
Matemática Discreta
Sumario:
• Descripciones de Tareas.
• Conceptos Básicos – Glosario.
• Computador y Computación.
• Modelos Computacionales.
– Compuertas y Circuitos Lógicos.
– Máquinas de Estados Finitos.
– La Máquina de Turing.

Prof. Ing. Antonio Lemus Ruiz


Descripciones de Tareas:
• Procedurales (o Procedimentales):
– Cómo hacerlo…
– Especifican qué se necesita y cómo obtenerlo.
• Funcionales o Declarativas:
– Lo que se debe hacer.
– Especifican únicamente qué se necesita sin especificar
cómo obtenerlo.
• La descripción funcional o declarativa de una tarea tiene
muchas diferentes implementaciones procedurales.
• Lenguajes Funcionales Versus Lenguajes Procedurales:
– Los Lenguajes Funcionales o Declarativos son más
fáciles de aprender y usar que los Lenguajes
Procedimentales. Sin embargo, como no especifican
cómo conseguir un resultado, un “Procedimiento
Efectivo” para conseguirlo debe ser determinado…

Prof. Ing. Antonio Lemus Ruiz


Descripciones de Tareas:
• Un Procedimiento Efectivo es una secuencia finita de tareas
bien especificada que se pueden realizar en un tiempo
finito.
• La descripción es finita, pero ni el límite de memoria ni el
tiempo necesario para realizar cada tarea son acotados
(solo se sabe que son finitos).
• Para obtener una formalización aceptable de la idea de
procedimiento efectivo de calculo, se aíslan las
características generales compartidas por todos los
procedimientos de calculo finito.
• Ese fue el camino elegido por Turing para el desarrollo de su
modelo de computación:
– Se idealizan las condiciones bajo las que trabaja un ser
humano para llevar a cabo un calculo, siguiendo algún
“algoritmo” prefijado.
– Dicho calculo consiste esencialmente en la manipulación
de símbolos… y ésta manipulación esta sujeta a varias
condiciones de finitud… Prof. Ing. Antonio Lemus Ruiz
Conceptos Básicos - Glosario
Alfabeto Griego y Símbolos.
Tupla y n-tupla.
Relación Matemática.
Conjuntos y Operaciones sobre Conjuntos.
Funciones Parciales y Totales en Conjuntos.
Funciones Inyectivas, Sobreyectivas y Biyectivas.
Alfabeto, Palabras y Lenguaje.
Noción Intuitiva de Algoritmo.
Máquinas Matemáticas Abstractas

Prof. Ing. Antonio Lemus Ruiz


Definiciones Formales

{ ( T, U, P, L, A ) }
• Una tupla es una secuencia ordenada de objetos, esto es, una lista con un
número limitado de objetos que se emplea para describir objetos matemáticos
que tienen estructura; es decir, que son capaces de ser descompuestos en un
cierto número de componentes.
• Una n-tupla es la lista ordenada de n elementos, siendo n un número natural
(entero no-negativo). La 0-tupla “única” (que se representa por Ø) es la
secuencia vacía. Las tuplas suelen anotarse listando sus elementos entre
paréntesis (), separados por comas, pero en ocasiones se usan otros
delimitadores, como los corchetes [ ], las llaves { } o las angulares < >.
• Una n-tupla se define inductivamente desde la construcción de un par
ordenado, como una función finita que mapea (o asocia unívocamente)
atributos con valores. Su propósito es la asociación biyectiva de pares
ordenados ‘Atributo:Valor’.
• En Informática, generalmente en los lenguajes de programación, una tupla es
un objeto que puede tener datos o diversos elementos de distinto tipo que se
guardan de forma consecutiva en memoria. Un objeto de este tipo es conocido
también como record (registro).
Prof. Ing. Antonio Lemus Ruiz
Glosario (1)
N El conjunto de números naturales (incluido el 0)

N* El conjunto de números naturales (excluido el 0). El asterisco * excluye al cero…

Z El conjunto de los enteros (incluidos los negativos).

R El conjunto de números reales.

∅ El conjunto vacío.

⊆ La relación de subconjunto entre conjuntos (infijo o que se intercala en el interior) .

⊂ La relación propia de los subconjuntos (infijo, pero no igual).

∪ La operación infija de unión en conjuntos.

∩ La operación infija de intersección en conjuntos.

∼ El prefijo de la operación de complementación en conjuntos.

- El infijo de la operación de diferencia de conjuntos en conjuntos.

X El infijo de la operación de producto cartesiano en conjuntos.

Prof. Ing. Antonio Lemus Ruiz


Conjuntos y Operaciones sobre Conjuntos

• Se utilizarán las notaciones habituales para operaciones


aritméticas en números. Esto incluye el operador de resta
(indicado por el infijo operador -) que también es el de la
diferencia entre conjuntos.
• Del mismo modo, podemos utilizar el símbolo × para el
producto cartesiano y para la multiplicación de números. Por
lo general, el contexto determinará qué operación se
pretende. Algunas operaciones tales como la multiplicación
puede ser denotada por el punto . o por ningún símbolo en
absoluto, como es habitual en matemáticas.
• Además, serán usados los prefijos habituales para las
operaciones de suma ∑ y producto ∏ de conjuntos o de
secuencias de números.

Prof. Ing. Antonio Lemus Ruiz


Conjuntos y Operaciones sobre Conjuntos
• : ó / (reluz): tal que
• ∀ (Cuantificador Universal): para todos; para cualquier; para cada
– ∀x: P(x) significa: P(x) es verdadera para cualquier x
• ∃ (Cuantificador Existencial): existe por lo menos un/os
– ∃x : P(x) significa: existe por lo menos un x tal que P(x) es verdadera.
• A0 se identificará con el conjunto vacío ∅
• A1 se identificará con el conjunto A
• La 1-tupla (a) se identificará con a.
• Una relación n-aria para n > 0 en los conjuntos A1 , ..., An
es cualquier subconjunto de A1 × ··· × An
• f´ es la derivada de f (f prima).
• f: X → Y significa: la función f con correspondencia de X en Y.
– Ejemplo: Considérese la función f: Z → N definida por f(x) = x²
• f: X −|→ Y: función f con correspondencia parcial de X en Y.
Prof. Ing. Antonio Lemus Ruiz
Funciones Parciales y Totales en Conjuntos.
• Dados dos conjuntos A y B y una relación binaria f ⊆ A × B,
– Entonces: f −1 ⊆ B × A (el converso o inverso de f) es la
relación definida por (b, a) ∈ f −1 si y solo si (a, b) ∈ f.
– f es llamada una función parcial de tipo A −|→ B,
si f satisface la propiedad “singularidad de imagen”;
es decir, que para cada elemento a ∈ A hay al menos un
elemento b ∈ B tal que (a, b) ∈ f.
– b se llama la imagen de a bajo f.
• Se dice que f se define en a ∈ A si a tiene una imagen en f.
• Se dice que f no está definida en a si no tiene una imagen en f.
• f se llama una función total de tipo A → B
si f es una función parcial de tipo A −|→ B
y cada elemento de A tiene una imagen en f.
• Toda función total es también una función parcial.
• f: A → B implica Dom (f) = A y Ran (f) ⊆ B.

Prof. Ing. Antonio Lemus Ruiz


Funciones Inyectivas, Sobreyectivas y Biyectivas
• Dos funciones parciales f, g: A −|→ B
son iguales si y solo si Dom (f) = Dom (g)
y para cada a ∈ Dom (f), f (a) = g (a).
• Sea f: A −|→ B una función parcial:
– f es inyectiva si para cada a, a’ ∈ Dom (f), a ≠ a’ implica
f(a) ≠ f(a’). También se dice que f es una inyección.
– Si f es inyectiva, entonces f −1 : B −|→ A (la inversa de f),
con Dom (f −1) = Ran (f) ⊆ B y para cada b ∈ Dom (f −1),
f −1(b) = a si f(a) = b.
– Si f: A −|→ B es inyectiva,
entonces para cada a ∈ Dom (f), f −1 (f(a)) = a.
– f es sobreyectiva (o suryectiva) si Ran (f) = B.
Es decir, cada elemento de B es la imagen de, como
mínimo, un elemento de A.
– f es biyectiva (o es una biyección)
si es tanto inyectiva como sobreyectiva.
– Si f: A −|→ B es biyectiva, entonces f−1 es total
(de tipo B → A) y para cada b ∈ B, f (f−1 (b)) = b.

Prof. Ing. Antonio Lemus Ruiz


Glosario (2)

An El postfijo de la operación producto cartesiano “a la n” de A, es decir, A × ··· × A (n-veces).

r ⊆ A1 × ··· × An Una relación n-aria (para n> 0) sobre los conjuntos A1 , ..., An
f: A −|→ B Una función parcial del conjunto A al conjunto B
Una función total del conjunto A al conjunto B
f: A → B
(función f con correspondencia de A en B)
f (a) = b b es la imagen de a bajo f
f (a) = ⊥ f no está definida en a
Dom (f) Dominio de f. El subconjunto de valores para los que se define f .
Ran (f) Rango de f. El subconjunto de valores que son imágenes de elementos en el Dom (f)
f-1 Función Inversa de f
:ó/ tal que
∀ Cuantificador Universal: para todos; para cualquier; para cada…
∃ Cuantificador Existencial: existe por lo menos un/os…
∈ Pertenencia de conjunto: a ∈ S significa: a es elemento del conjunto S;
∉ a ∉ S significa: a no es elemento del conjunto S

Prof. Ing. Antonio Lemus Ruiz


Alfabeto, Palabras y Lenguaje

• Un conjunto finito de símbolos será algunas veces nombrado


como un alfabeto.
• Una secuencia finita formada por algunos elementos de un
alfabeto cualquiera ∑ se llama palabra.
• La palabra vacía se considera también una palabra
y es denotada por ∅.
• El conjunto de palabras de longitud n sobre ∑ se denota por ∑n
• El conjunto de todas las palabras sobre ∑
(incluyendo la palabra vacía) se denota por ∑*.
• Un subconjunto de ∑*, es decir, un conjunto arbitrario de
palabras, es llamado lenguaje.
• (El lenguaje vacío también se denota por ∅ pero es diferente
del lenguaje { ∅ } que sólo contiene la palabra vacía).

Prof. Ing. Antonio Lemus Ruiz


Noción Intuitiva de Algoritmo

• El concepto de “algoritmo” es fundamental para nuestro


estudio, pero no lo definiremos formalmente:
Más bien, lo consideramos una noción intuitiva,
que es susceptible de varios tipos de formalización
(y por lo tanto, de investigación desde un
punto de vista matemático).
• Algoritmo significa un procedimiento matemático que
sirve para una construcción, cálculo o computación
(el cómputo de alguna función), y que puede realizarse
mecánicamente, sin pensar…
• (Aunque esta no es realmente una definición, uno de los
propósitos de este curso es demostrar que se puede llegar a
un acuerdo general sobre este tema. Este acuerdo es
formulado a menudo como La Tesis de Church).

Prof. Ing. Antonio Lemus Ruiz


Máquinas Matemáticas Abstractas
• Un programa escrito en cualquier lenguaje de
programación es un buen ejemplo de especificación de
un algoritmo, pero dado que la naturaleza "mecánica" de
un algoritmo es su más importante característica, en
lugar de profundizar en la noción de algoritmo,
introduciremos varios conceptos de
“maquinas matemáticas abstractas”.
• Las máquinas matemáticas abstractas computan alguna
salida desde alguna entrada. La entrada y la salida
pueden ser una palabra (secuencia finita) sobre un
alfabeto fijo.
• Las máquinas matemáticas abstractas son muy parecidas
a los computadores reales que conocemos, pero
idealizados: se omiten algunas características no
esenciales (ejem. fallas de hardware) y se agregan
memorias ampliables infinitamente…

Prof. Ing. Antonio Lemus Ruiz


Computador
• Notación:
– Sea N el conjunto de números naturales y sea [k] = {0, 1, ..., k-1}
para cada k∈ N. Por lo tanto, [0] = ∅. Consideremos a [k] como un
alfabeto compuesto por k simbolos. Así pues, un “lenguaje” sobre
el alfabeto [k] es un subconjunto de [k]* para algunos k∈ N.
Y sean I y O conjuntos, denotamos por [I → 0] al conjunto de todas
las funciones parciales desde I hasta O.
• Definición:
Una máquina de computación o “computador”
es una 3-tupla M = (L, Φ, T), dónde
i. L es un lenguaje,
ii. Φ es una función desde L hasta [I → 0] y
iii. T es una función desde L hasta [I → 0] que cumple la siguiente
condición: Para cada programa P∈ L y x∈ I,
Φ (P, x) está definida si T(P, x) está definida.
La función Φ es llamada la interpretación de M y Φ (P) es la
función parcial realizada por P bajo M. Decimos que T(P) es la
complejidad (medida en tiempo) para P, y algunas veces
escribimos T(P)(x) en lugar de T(P, x). El conjunto I es el dominio
de entrada y el conjunto O es el dominio de salida.
Prof. Ing. Antonio Lemus Ruiz
Computador
• Dispositivo físico que implementa un
Cálculo, Cómputo o Computación.
• Computador Digital:
– Entradas, Salidas y Valores Internos
extraídos de conjuntos finitos.
• Computador Analógico:
– Las Entradas, Salidas y Valores Internos
pueden asumir valores reales.
• En este curso solo examinamos Modelos
de Computadores Digitales…
Prof. Ing. Antonio Lemus Ruiz
• Determinar algo por Métodos
Matemáticos o Lógicos
– Diccionario WordNet

Prof. Ing. Antonio Lemus Ruiz


Modelos Computacionales
• Definen las Características Esenciales
Abstractas de los Computadores.
Estudiaremos dos tipos de modelos:
• Modelos sin Memoria
– Circuitos Lógicos Combinacionales
• Modelos con Memoria (Basados en Estados)
– Modelos con Memoria Limitada.
– Modelos con Memoria Ilimitada.
Prof. Ing. Antonio Lemus Ruiz
Descripción de los Modelos
• Debemos describir dos elementos principales:
– Especificación: Definir formalmente dos tipos de
elementos:
• Los datos de entrada y de salida: Las estructuras de datos que se
manipulan durante la ejecución de la función o algoritmo.
• Las operaciones básicas permitidas en el modelo: Acciones
primitivas, bien definidas, que actúan sobre los datos.
– Implementación e Interpretación:
• Sintaxis: Reglas gramaticales para la construcción, a partir de las
operaciones básicas, de los procedimientos definibles en el
modelo.
• Semántica: Definición lógico-matemática de las relaciones que
definen los procedimientos entre los datos de entrada y salida.
• Así, es posible precisar el concepto función
computable: El hecho de que un algoritmo es
solución de un problema concreto.
Prof. Ing. Antonio Lemus Ruiz
Función Computable
en un Modelo de Computación
• Supongamos definido un modelo de computación M:
• Debemos asociar a cada M-programa P una función
[P] sobre la estructura de datos D
[P] : D → D
posiblemente parcial (o sea, que es posible que P no
pare sobre algún dato de entrada), definida como
sigue:
Para cada d∈ D, [P](d) = resultado de ejecutar P
con la entrada d
• Definición: Una función f : D → D es M-computable
si existe un M-programa P tal que [P] = f.
Prof. Ing. Antonio Lemus Ruiz
Modos de Computación
Dependen de la semántica y del concepto de solución:
1. Modo Secuencial-Determinista: La ejecución de un programa sobre
un dato es única. La solución de un problema es la solución lógica
exacta para cada entrada.
2. Modo Paralelo: El programa especifica diversas tareas que se
pueden ejecutar en procesadores distintos, compartiendo
información. Solución exacta.
3. Modo No Determinista. La ejecución no es única: existen
instrucciones que pueden elegir entre 2 o mas opciones. Un
programa resuelve un problema si alguna de sus posibles
ejecuciones ofrece una solución exacta para el dato de entrada.
4. Modo Probabilista: Los programas son deterministas, pero
contienen instrucciones que se ejecutan solo con cierta
probabilidad. Un programa resuelve un problema si, con cierta
probabilidad, obtiene una solución exacta.
Prof. Ing. Antonio Lemus Ruiz
Características Fundamentales de un Modelo

La características fundamentales de un modelo


de computación que deben ser estudiadas son:
1. Potencia del modelo: Que problemas
puede resolver, y analizar su completitud
computacional.
2. Formalización del Modelo:
Interpretabilidad del modelo con respecto
a otros, aspectos de complejidad sintáctica,
otras semánticas, etc.

Prof. Ing. Antonio Lemus Ruiz


Modelos Computacionales

• Compuertas y Circuitos Lógicos.


• Máquinas de Estados Finitos.
• La Máquina de Turing.

Prof. Ing. Antonio Lemus Ruiz


Fuente: CBSSS, JE Savage / June 16, 2004. Models of Computation.pdf Prof. Ing. Antonio Lemus Ruiz
Fuente: Arturo Díaz Pérez, Modelos Computacionales.pdf Prof. Ing. Antonio Lemus Ruiz
Fuente: Arturo Díaz Pérez, Modelos Computacionales.pdf Prof. Ing. Antonio Lemus Ruiz
Fuente: Arturo Díaz Pérez, Modelos Computacionales.pdf Prof. Ing. Antonio Lemus Ruiz
Prof. Ing. Antonio Lemus Ruiz
Máquinas de Estados Finitos.
• Una Máquina de Estados Finitos es un modelo computacional
consistente en un conjunto de estados bien definidos, un
estado inicial, un alfabeto de entrada y una función de
transición.
• Este concepto es equivalente a otros como autómata o
autómata finito.
• En un autómata, un estado es la representación de su
condición en un instante dado. El autómata comienza en el
estado inicial con un conjunto de símbolos; su paso de un
estado a otro se efectúa a través de la función de transición,
la cual, partiendo del estado actual y un conjunto de símbolos
de entrada, lo lleva al nuevo estado correspondiente.

Prof. Ing. Antonio Lemus Ruiz


Comportamiento de una Máquina de Estados Finitos
• Técnicamente existen diferentes
herramientas para definir el
comportamiento de un autómata, entre
las cuales se encuentra el diagrama de
estado.
• En él se pueden visualizar los estados
como círculos que en su interior
registran su significado, flechas que
representan la transición entre estados
y la notación de Entrada/Salida que
provoca la transición entre estados.
• En este ejemplo se muestran cuatro
diferentes estados de un autómata y se
define lo siguiente: partiendo del estado
"00", si se recibe una entrada "0", la
salida es "0" y el autómata conserva el
estado actual, pero si la entrada es "1",
la salida será "1" y el autómata pasa al
estado "01".
• Este comportamiento es homogéneo
para todos los estados del autómata.
• Nota: El autómata que se muestra en este ejemplo tiene un alfabeto binario (0 y 1).

Prof. Ing. Antonio Lemus Ruiz


Comportamiento de una Máquina de Estados Finitos
• Otra herramienta de representación del comportamiento de los autómatas es la tabla
de estados, que consiste de cuatro partes: descripción del estado actual, descripción
de la entrada, descripción del estado siguiente y descripción de las salidas.

En esta tabla de estados se puede notar que el autómata tiene dos elementos que definen
su estado (A y B). Además, se puede deducir la función de salida del autómata, la cual está
definida por la multiplicación lógica de la negación del estado de A por la entrada x:
y = ~A.x
Prof. Ing. Antonio Lemus Ruiz
Definición Formal de una Máquina de Estados Finitos
• Una Máquina de Estados Finitos es una 6-tuple M = (Ω,
Ψ, Q, δ, λ, s0)
Ω = Alfabeto de Entrada
Ψ = Alfabeto de Salida
Q = Conjunto de Estados Internos
δ : Ω x Q → Q es la función de transición de estados
λ : Ω x Q → Ψ es la función de salida.
s0 ∈ Q = Estado Inicial (START)
• Para cada entrada a∈ Ω y para cada estado s∈ Q,
se especifica la salida λ(a, s)∈ Ψ
y el nuevo estado δ(a, s)∈ Q.
• δ y λ son mapeos arbitrarios
• Ω, Ψ y Q son conjuntos finitos.
Prof. Ing. Antonio Lemus Ruiz
Definición Formal de una Máquina de Estados Finitos

• Example: At the beginning of a computation, the automaton is in


state s0 = START. The input to the computation is given in the form
of a string a1a2… an ∈ Ω*. The first input letter a1 takes the
automaton to state s1 = δ(a1; s0); the next input letter takes it into
state s2 = δ(a2; s1) etc. The result of the computation is the string
b1b2…bn, where bk = δ(ak; sk-1) is the output at the k-th step.

Prof. Ing. Antonio Lemus Ruiz


• Remarks: There are many possible variants of this notion, which are essentially
equivalent. Often the output alphabet and the output signal are omitted. In this
case, the result of the computation is read o from the state of the automaton at
the end of the computation. In the case of automata with output, it is often
convenient to assume that Ψ contains the blank symbol *; in other words, we
allow that the automaton does not give an output at certain steps.

Prof. Ing. Antonio Lemus Ruiz


Fuente: CBSSS, JE Savage / June 16, 2004. Models of Computation.pdf

Prof. Ing. Antonio Lemus Ruiz


La Máquina de Turing
• La Máquina de Turing es el modelo teórico de
computación más ampliamente utilizado.
• Demasiado lenta y poco eficiente como para ser
construida en un dispositivo real, esta máquina
conceptual, sin embargo, parecen capturar todo
lo que significa el término computación.
• La Máquina de Turing no sólo ocupa el lugar
más alto dentro de la Jerarquía de Chomsky (es
decir, que puede ser tratadas como
“aceptadora” de lenguajes), sino que también
parece capaz de computar cualquier función
que sea computable mediante cualquier otro
esquema conceptual de cómputo.
Prof. Ing. Antonio Lemus Ruiz
La Máquina de Turing

• La Máquina de Turing es sencilla: una cinta infinita


compuesta por celdas discretas se revisa, una celda en
cada momento, por una cabeza lectora/escritora que
comunica con un mecanismo de control. Bajo éste, la
máquina de Turing es capaz de leer el símbolo en la celda
actual de la cinta, o reemplazarlo con otro. Similarmente,
la máquina de Turing es capaz de desplazarse sobre la
cinta, celda por celda, ya sea a la izquierda o a la derecha.
Prof. Ing. Antonio Lemus Ruiz
La Máquina de Turing
• En general, se considera a la función definida por una Máquina de
Turing M como:
– Sea x una cadena sobre el alfabeto ∑ de la cinta de la máquina
M. Colocando la cabeza lectora/escritora sobre el símbolo más
a la izquierda de x en la cinta, M comienza en su estado inicial,
procediendo al cómputo sin interferencia.
– Si M eventualmente se detiene, entonces la cadena y que se
encuentra en la cinta en ese momento se considera como la
salida de M que corresponde a la entrada x.
– Ya que M no necesariamente se detiene para toda cadena de
entrada x, M computa una función parcial
f: ∑* -> ∑*
donde ∑* denota el conjunto de todas las cadenas sobre ∑.
– Bajo este esquema, toda clase de posibilidades para ∑ pueden
tomarse. Por ejemplo, puede usarse como base para la
representación de enteros, racionales, símbolos alfabéticos, o
cualquier clase de objetos que puedan computarse.
Prof. Ing. Antonio Lemus Ruiz
Programa de una Máquina de Turing
• Estrictamente hablando, una Máquina de Turing es esencialmente lo
mismo que su programa.
• Formalmente, tal programa M es una lista de quíntuples de la forma:
(q, s, q’, s’, d)
• donde q es el estado actual de M, s es el símbolo que actualmente M
lee en la cinta, q’ es el siguiente estado de M, s’ es el símbolo que M
escribe en la cinta para remplazar a s, y d es la dirección a la cual la
cabeza lectora/escritora se mueve relativamente sobre la cinta.
• Los estados provienen de un conjunto finito Q, los símbolos del
alfabeto finito ∑ y los movimientos de la cabeza de D = {L, R, S}
(derecha, izquierda y detente, respectivamente).
• El programa de una Máquina de Turing, dada una cadena particular a
la entrada, comienza siempre en un estado incial q0 ∈ Q y puede
detenerse en un número de formas.
• El método que se utiliza para detener un programa involucra el uso de
estados de detención. Cuando M entra al estado de detención q’, toda
actividad computacional cesa.

Prof. Ing. Antonio Lemus Ruiz


Prof. Ing. Antonio Lemus Ruiz
Prof.
Prof.
Ing.
Ing.
Antonio
Antonio
Lemus
Lemus
Ruiz
Ruiz
Prof. Ing. Antonio Lemus Ruiz

También podría gustarte