Lógica de predicados


La lógica de predicados, también conocida como lógica de primer orden, es una extensión de la Lógica proposicional que nos permite expresar y razonar sobre las propiedades de objetos individuales y las relaciones entre ellos.

    Todos los griegos son mortales.
    Nicolai es griego.
    Por tanto, Nicolai es mortal.

A diferencia de la lógica proposicional, la lógica de predicados nos permite validar este tipo de razonamiento mediante el uso de:

  • Predicados (como 'ser griego' o 'ser mortal')
  • Cuantificadores (para expresar 'todos')
  • Constantes individuales (como 'Nicolai')"

Sintaxis

En lógica de predicados trabajamos con un dominio y tres elementos fundamentales:

  1. Símbolos de función (Σ): Define las funciones que podemos usar Por ejemplo: Σ = [c/0, f/1, g/2, h/3] donde:
  2. c/0: constantes (aridad 0)
  3. f/1: funciones unarias como padre(x)
  4. g/2: funciones binarias como suma(x,y)
  5. h/3: funciones ternarias como entre(x,y,z)

  6. Símbolos de predicado (PΣ): Define las relaciones que podemos expresar Por ejemplo: PΣ = {P/1, Q/2} donde:

  7. P/1: predicados unarios como esAlto(x)
  8. Q/2: predicados binarios como mayorQue(x,y)

  9. Cuantificadores: Nos permiten expresar afirmaciones sobre el dominio

  10. Cuantificador universal (∀): "para todo"
    • ∀x P(x) significa "para todo x se cumple P(x)"
    • Ejemplo: ∀x (Humano(x) → Mortal(x))
  11. Cuantificador existencial (∃): "existe"
    • ∃x P(x) significa "existe al menos un x que cumple P(x)"
    • Ejemplo: ∃x (Planeta(x) ∧ TieneVida(x))

La notación "f/n" indica que f es una función/predicado de aridad n.

Aridad

La aridad indica el número de argumentos que acepta una función o predicado: - Aridad 0: Constantes (c) - Aridad 1: Funciones unarias (f(x)) - Aridad 2: Funciones binarias (g(x,y)) - Aridad 3: Funciones ternarias (h(x,y,z))

Ejemplo: - esEstudiante(x) → aridad 1 - hijoDe(x,y) → aridad 2 - entre(x,y,z) → aridad 3

Reglas de Formación

  1. Términos:
  2. Toda constante es un término
  3. Toda variable es un término
  4. Si f es una función de aridad n y t₁,...,tₙ son términos, entonces f(t₁,...,tₙ) es un término

  5. Fórmulas atómicas:

  6. Si P es un predicado de aridad n y t₁,...,tₙ son términos, entonces P(t₁,...,tₙ) es una fórmula atómica

  7. Fórmulas compuestas:

  8. Toda fórmula atómica es una fórmula
  9. Si φ es una fórmula, entonces ¬φ es una fórmula
  10. Si φ y ψ son fórmulas, entonces (φ ∧ ψ), (φ ∨ ψ), (φ → ψ) son fórmulas
  11. Si φ es una fórmula y x es una variable, entonces ∀x φ y ∃x φ son fórmulas

Ejemplos Prácticos

  1. Expresar "Todos los estudiantes son jóvenes": ∀x (Estudiante(x) → Joven(x))

  2. Expresar "Existe algún estudiante que es alto": ∃x (Estudiante(x) ∧ Alto(x))

  3. Expresar "Juan es más alto que todos los estudiantes": ∀x (Estudiante(x) → MásAltoQue(juan, x))

  4. Expresar "Todo número tiene un sucesor": ∀x ∃y (Sucesor(x,y))

Errores Comunes

  1. No confundir ∀x ∃y con ∃y ∀x
  2. ∀x ∃y P(x,y): "Para cada x hay algún y..."
  3. ∃y ∀x P(x,y): "Hay algún y que sirve para todo x..."

  4. Mantener los paréntesis necesarios

  5. Correcto: ∀x (P(x) → Q(x))
  6. Incorrecto: ∀x P(x) → Q(x)

  7. Usar variables ligadas correctamente

  8. Correcto: ∀x P(x) ∧ ∀x Q(x)
  9. Redundante: ∀x (P(x) ∧ Q(x))

Semántica

3. Semántica de la lógica de primer orden

El objetivo de la semántica es atribuir significado a los elementos de un lenguaje. En lógica proposicional se atribuye significado a una fórmula determinando su valor veritativo, verdadero o falso, en función del valor de los símbolos proposicionales que la formaban. En lógica de predicados, además, se tiene que determinar el valor de términos que representan a los individuos del universo del discurso y por eso se han de usar estructuras e interpretaciones.

Una Σ-estructura $$\mathcal{A}$$ se define como:

$$ \mathcal{A} = \left(A, { f^A \mid f \in F_\Sigma }, { P^A \mid P \in P_\Sigma }\right) $$

donde:

  • $A$ es un conjunto no vacío denominado universo de discurso o dominio.
  • ${ f^A \mid f \in F_\Sigma }$ es el conjunto de interpretaciones de las funciones $f$ en el lenguaje.
  • ${ P^A \mid P \in P_\Sigma }$: Es el conjunto de interpretaciones de los predicados $P$ en el lenguaje.

Los significados de $\mathcal{A}$ son definidos a partir de estas estructuras.

La semántica en lógica de predicados nos dice cómo interpretar los símbolos y fórmulas para darles significado. Para ello necesitamos:

  1. Interpretación (A): Consiste en:
  2. Un conjunto no vacío A (el dominio)
  3. Para cada símbolo de función f/n en Σ, una función fᴬ: Aⁿ → A
  4. Para cada símbolo de predicado P/n en PΣ, una relación Pᴬ ⊆ Aⁿ

Ejemplo: Si queremos interpretar la fórmula Padre(juan, maría): - A podría ser el conjunto de todas las personas - Padre/2 se interpretaría como la relación real de paternidad - juan y maría se interpretarían como personas específicas

  1. Estado (σ):
  2. Asigna valores del dominio a las variables
  3. σ(x) nos dice qué elemento del dominio representa la variable x

Ejemplo: Si x representa personas: - σ₁(x) = Juan - σ₂(x) = María

  1. Evaluación: Para evaluar una fórmula necesitamos tanto la interpretación como el estado:
  2. ⊨ P(x) significa "P es verdadero para el valor que σ asigna a x en A"

Ejemplo práctico: Para la fórmula EsAlto(x): - A = {personas} - EsAltoᴬ = {personas que miden más de 1.80m} - Si σ(x) = Juan y Juan mide 1.85m, entonces ⊨ EsAlto(x)

Lema de Coincidencia

El Lema de Coincidencia nos dice que el valor de verdad de una fórmula solo depende de: 1. Cómo se interpreten los símbolos que aparecen en ella 2. Qué valores tengan sus variables libres

Ejemplo práctico: Consideremos la fórmula: ∀y (Mayor(x,y)) - Solo importa: * Cómo interpretemos Mayor/2 * Qué valor tenga x (porque es libre) * El dominio A para y (porque está cuantificada) - NO importa: * Valores de otras variables * Interpretación de otros predicados

Notación Práctica

Para representar estados usamos la notación: $$ \begin{bmatrix} x₁ & x₂ & \cdots & xₙ \ a₁ & a₂ & \cdots & aₙ \end{bmatrix} $$

Reglas de inferencia

Son válidas las reglas de inferencia que se utilizan en Lógica proposicional: modus ponens, Y-Eliminación, Y-Introducción, O-Introducción y Resolución. Se añaden nuevas, para lo que usaremos la Notación SUST:

Eliminación Universal (EU)

Para cualquier expresión α, variable v y término de base g:

$$\frac{\forall v \space \alpha}{Sust({v/g}, \alpha)}$$

Donde $Sust({v/g}, \alpha)$ significa sustituir v por g en α.

Ejemplo: - De $\forall x \space LeGusta(x, Marisco)$ - Podemos inferir $LeGusta(Juan, Marisco)$ sustituyendo x por Juan

Eliminación Existencial (EE)

Para toda expresión α, variable v y constante k:

$$\frac{\exists v \cdot \alpha}{Sust({v/k}, \alpha)}$$

Ejemplo: - De $\exists x \space Matar(x, Victima)$ - Podemos inferir $Matar(asesino, Victima)$

[!danger] En la eliminación existencial, la constante usada para sustituir la variable debe ser nueva para evitar inconsistencias. Esto se debe a que la oración existencial solo afirma que existe algún objeto que satisface una condición, y al eliminar el cuantificador estamos dando nombre a dicho objeto. Este nombre no debe haber sido usado previamente para referirse a otro objeto.

Introducción Existencial (IE)

Para toda expresión α, variable v que no esté en α, y término de base g que no esté en α:

$$\frac{\alpha}{\exists v \space Sust({g/v}, \alpha)}$$

Ejemplo: - De $LeGusta(Pepe, Marisco)$ - Podemos inferir $\exists x \space LeGusta(x, Marisco)$

Tips para Evitar estos Errores

  1. Para Eliminación Existencial:
  2. Siempre usa una constante que no aparezca en ninguna parte
  3. Si tienes dudas, inventa un nombre completamente nuevo

  4. Para Introducción Universal:

  5. Usa una variable nueva que no aparezca en las premisas
  6. Asegúrate de que no estás usando propiedades específicas

  7. Para Sustituciones:

  8. Identifica claramente qué variables están libres
  9. Solo sustituye variables que no estén bajo cuantificadores

  10. Para Orden de Cuantificadores:

  11. Piensa en ejemplos concretos
  12. Dibuja diagramas si es necesario
  13. Recuerda que el orden importa

Vease importancia de Cláusulas de Horn

Vease Modus ponens generalizado

Resolución

Se identifican en el enunciado: - el universo $A$ - las funciones $f^A$ - los predicados $P^A$ - los cuantificadores

Ejemplo:

Ramón es miope.
Cuando alguien es miope lo es su madre o su padre.
Todo el mundo ama a su padre y a su madre.
Por tanto, algún miope es amado por alguien.

$$ A = {personas, F= {MadreDe/1, PadreDe/1, Amado/2}, P = {EsMiope}} $$ Constante = r = ramón

  • Formalizar en lenguaje lógico.

1. Eliminar símbolos de implicación (→)

  • Regla: P → Q se convierte en ¬P ∨ Q
  • Ejemplos:
  • A → B se convierte en ¬A ∨ B
  • (P ∧ Q) → R se convierte en ¬(P ∧ Q) ∨ R
  • P → (Q → R) se convierte en ¬P ∨ (¬Q ∨ R)

2. Mover negaciones hasta fórmulas atómicas

Usar las leyes de De Morgan: - ¬(P ∧ Q) = ¬P ∨ ¬Q - ¬(P ∨ Q) = ¬P ∧ ¬Q - ¬(¬P) = P - ¬(∀x P(x)) = ∃x ¬P(x) - ¬(∃x P(x)) = ∀x ¬P(x)

3. Estandarizar variables (renombrar)

  • Dar nombres únicos a variables bajo diferentes cuantificadores
  • Ejemplo:
  • ∀x P(x) ∧ ∀x Q(x) se convierte en ∀x₁ P(x₁) ∧ ∀x₂ Q(x₂)

4. Eliminar cuantificadores existenciales (Skolemización)

Reglas: 1. Si ∃x aparece al principio: reemplazar x por una constante nueva * ∃x P(x) → P(c) donde c es nueva 2. Si ∃x está dentro del alcance de ∀y₁,...,∀yₙ: reemplazar x por f(y₁,...,yₙ) * ∀y ∃x P(x,y) → ∀y P(f(y),y) donde f es nueva * ∀y₁ ∀y₂ ∃x P(x,y₁,y₂) → ∀y₁ ∀y₂ P(f(y₁,y₂),y₁,y₂)

5. Mover cuantificadores universales

  • Mover todos los ∀ al inicio de la fórmula
  • Ejemplo:
  • (∀x P(x)) ∧ (∀y Q(y)) se convierte en ∀x ∀y (P(x) ∧ Q(y))

6. Eliminar conjunciones (∧)

  • Separar las fórmulas unidas por ∧
  • Ejemplo:
  • P ∧ Q se convierte en dos cláusulas: P, Q
  • (A ∨ B) ∧ C se convierte en: (A ∨ B), C

7. Convertir a conjunto de cláusulas

  • Una cláusula es una disyunción de literales
  • Cada literal es un predicado o su negación
  • Ejemplo final:
  • Cláusula 1: P(x) ∨ ¬Q(x)
  • Cláusula 2: R(x,y) ∨ S(x)
  • Cláusula 3: ¬T(x)

Ejemplo Completo: El caso de Ramón

Enunciado original

"Demuestra que la siguiente argumentación es correcta: - Ramón es miope - Cuando alguien es miope, o su padre o su madre también lo son - Todo el mundo ama a su padre y a su madre Por tanto, algún miope es amado por alguien"

Paso Preliminar: Formalización

Identificamos: - Universo: personas - Constantes: r (Ramón) - Funciones: * p(x): padre de x * m(x): madre de x - Predicados: * M(x): x es miope * A(x,y): x ama a y

Formalizamos: 1. M(r) 2. ∀x(M(x) → (M(p(x)) ∨ M(m(x)))) 3. ∀x(A(x,p(x)) ∧ A(x,m(x))) 4. Conclusión: ∃x∃y(A(y,x) ∧ M(x))

Negamos la conclusión para refutación: ¬∃x∃y(A(y,x) ∧ M(x))

Paso 1: Eliminar implicaciones

  1. M(r) [sin cambios]
  2. ∀x(¬M(x) ∨ M(p(x)) ∨ M(m(x)))
  3. ∀x(A(x,p(x)) ∧ A(x,m(x))) [sin cambios]
  4. ¬∃x∃y(A(y,x) ∧ M(x)) [sin cambios]

Paso 2: Mover negaciones

  1. M(r) [sin cambios]
  2. ∀x(¬M(x) ∨ M(p(x)) ∨ M(m(x))) [sin cambios]
  3. ∀x(A(x,p(x)) ∧ A(x,m(x))) [sin cambios]
  4. ∀x∀y(¬A(y,x) ∨ ¬M(x))

Paso 3: Estandarizar variables

  1. M(r) [sin cambios]
  2. ∀x₁(¬M(x₁) ∨ M(p(x₁)) ∨ M(m(x₁)))
  3. ∀x₂(A(x₂,p(x₂)) ∧ A(x₂,m(x₂)))
  4. ∀x₃∀y₁(¬A(y₁,x₃) ∨ ¬M(x₃))

Paso 4: Eliminar cuantificadores existenciales

No hay cuantificadores existenciales que eliminar.

Paso 5: Mover cuantificadores universales

Los cuantificadores universales ya están al inicio de cada fórmula.

Paso 6: Eliminar conjunciones

  1. M(r)
  2. ∀x₁(¬M(x₁) ∨ M(p(x₁)) ∨ M(m(x₁))) 3a. ∀x₂(A(x₂,p(x₂))) 3b. ∀x₂(A(x₂,m(x₂)))
  3. ∀x₃∀y₁(¬A(y₁,x₃) ∨ ¬M(x₃))

Paso 7: Convertir a conjunto de cláusulas

  1. {M(r)}
  2. {¬M(x₁) ∨ M(p(x₁)) ∨ M(m(x₁))}
  3. {A(x₂,p(x₂))}
  4. {A(x₂,m(x₂))}
  5. {¬A(y₁,x₃) ∨ ¬M(x₃)}

Resolución

Ahora podemos empezar el proceso de resolución:

  1. M(r) con ¬M(x₁) ∨ M(p(x₁)) ∨ M(m(x₁))
  2. Unificación: x₁/r
  3. Resolvente: {M(p(r)) ∨ M(m(r))}

  4. M(p(r)) ∨ M(m(r)) con ¬A(y₂,x₂) ∨ ¬M(y₂)

  5. Unificación: y₂/p(r)
  6. Resolvente: {M(m(r)) ∨ ¬A(x₂,p(r))}

  7. M(m(r)) ∨ ¬A(x₂,p(r)) con ¬A(y₃,x₃) ∨ ¬M(y₃)

  8. Unificación: y₃/m(r)
  9. Resolvente: {¬A(x₂,p(r)) ∨ ¬A(x₃,m(r))}

  10. ¬A(x₂,p(r)) ∨ ¬A(x₃,m(r)) con A(x₄,p(x₄))

  11. Unificación: x₂/r, x₄/r
  12. Resolvente: {¬A(x₃,m(r))}

  13. ¬A(x₃,m(r)) con A(x₄,m(x₄))

  14. Unificación: x₃/r, x₄/r
  15. Resolvente: { } (cláusula vacía)

Logicadepredicados-demo.PNG

La obtención de la cláusula vacía demuestra que el argumento es válido.

1.4 Skolemización

Eliminar cuantificadores existenciales: - Si no hay universales: usar constante - Si hay universales: usar función Skolem

Ejemplo:

∀x ∃y P(x,y)
⇒ ∀x P(x,f(x))    // f es función Skolem

2. Unificación

La unificación encuentra sustituciones que hacen iguales dos expresiones.

Reglas de Unificación

  1. f(t₁,...,tₙ) y f(s₁,...,sₙ) unifican si t₁,...,tₙ unifican con s₁,...,sₙ
  2. Una variable unifica con cualquier término que no la contenga
  3. Las constantes unifican solo consigo mismas

Ejemplos de Unificación

Expresión 1     Expresión 2     Unificador
P(x,a)          P(b,y)          {x/b, y/a}
P(x,x)          P(y,a)          {x/a, y/a}
P(x,f(x))       P(a,y)          {x/a, y/f(a)}

No Unificables

P(x,f(x))       P(x,y)          No unifica (occur check)
P(x,a)          P(x,b)          No unifica (a≠b)

Tips y Trucos

  1. Para la Forma Clausal:
  2. Seguir el orden de los pasos es crucial
  3. Tener cuidado con la Skolemización

  4. Para la Unificación:

  5. Comprobar siempre el occur check
  6. Mantener las sustituciones lo más simples posible

  7. Para la Resolución:

  8. Empezar con cláusulas unitarias
  9. Dibujar un árbol de resolución
  10. Buscar el camino más corto a la contradicción

Errores Comunes

  1. En Skolemización:
  2. Olvidar dependencias de cuantificadores universales
  3. Usar funciones cuando basta con constantes

  4. En Unificación:

  5. Olvidar el occur check
  6. Unificar términos no unificables

  7. En Resolución:

  8. No estandarizar variables
  9. Resolver sobre variables ligadas