Lógica de predicados: ¿Cómo autoverificas la estructura lógica de tus propios argumentos?

En lógica proposicional, hay tablas de verdad. Entonces puede verificar si la estructura lógica de su argumento no es correcta en sí misma, pero si es lo que pretendía que fuera.

En la lógica de predicados, no he visto ninguna referencia a las tablas de verdad, ni he visto ningún uso (uso literal) de las tablas de verdad al buscar ejemplos en los que se usan tablas de verdad en PL.

Sería bueno verificar la estructura lógica de mis propios argumentos, ya que no siempre tendré a alguien que valide mi propio trabajo. Planeo emplear mis habilidades en lógica, pero quiero una forma segura de asegurarme de que mi forma sea correcta :)

Existen reglas de inferencia bien conocidas .
Hay varios paquetes de software de verificación de pruebas que están disponibles de forma gratuita en línea.
Partiendo de un conjunto de axiomas, puedes realizar tu demostración en algún sistema de deducción estilo Hilbert . De hecho, las pruebas "naturales" (aquellas que usamos a diario) pueden considerarse como instrucciones para construir una deducción formal en el cálculo de Hilbert...

Respuestas (1)

Las tablas de verdad no son suficientes para capturar la lógica de primer orden (con cuantificadores), por lo que usamos reglas de inferencia en su lugar. Cada regla de inferencia se elige para que sea sólida, lo que significa que si comienza con declaraciones verdaderas y usa la regla, deducirá solo declaraciones verdaderas. Decimos que estas reglas preservan la verdad. Si elige con suficiente cuidado, puede hacer que las reglas no solo preserven la verdad, sino que también le permitan deducir cada declaración (bien formada) que sea necesariamente verdadera (en todas las situaciones).

Lo que probablemente esté buscando (es decir, una forma práctica de verificar rigurosamente la validez lógica de sus argumentos) es la deducción natural. Hay muchos estilos diferentes, el tipo más intuitivo es el estilo Fitch , que marca los subcontextos usando sangría o alguna demarcación visual relacionada. El siguiente sistema usa sangría y sigue la intuición más de cerca en mi opinión.


Contextos

Cada línea es un encabezado o una declaración. Pondremos dos puntos después de cada encabezado y un punto después de cada declaración. Cada encabezado especifica algún subcontexto (contenido por el contexto actual), y las líneas gobernadas por ese encabezado se indican mediante la sangría. El contexto completo de cada línea está especificado por todos los encabezados que la gobiernan (es decir, todos los encabezados más cercanos por encima de ella en cada nivel de sangría inferior).

Por ejemplo, un análisis de caso anidado podría verse así:

Si  A :   Si  B :   . . . Si  ¬ B :   . . . Si  ¬ A :   . . .

Y razonar sobre un miembro arbitrario de una colección. S se vería como:

Dado  X S :   . . .

Tenga en cuenta que lo que se afirma en algún contexto puede no ser válido en otros contextos. Una vez que comprenda el principio detrás de los contextos y la sangría, las siguientes reglas son muy naturales. También tenga en cuenta que para la lógica de primer orden, estos dos tipos de encabezados de contexto (para subcontextos condicionales y subcontextos universales, respectivamente) son los únicos tipos necesarios.

Reglas de sintaxis

Una declaración debe ser una proposición atómica (indivisible) o una declaración compuesta formada de la manera habitual usando operaciones booleanas o cuantificadores, con la restricción de que cada variable que está limitada por un cuantificador no se usa ya para referirse a algún objeto en el contexto actual. , y que no hay cuantificadores anidados que vinculen la misma variable.

Reglas de deducción natural

Cada regla de inferencia es de la forma:

X Y

lo que significa que si las últimas líneas que ha escrito coinciden con "X", puede escribir "Y" inmediatamente después con el mismo nivel de sangría. Cada aplicación de una regla de inferencia también está ligada al contexto actual, a saber, el contexto de "X". No mencionaremos el "contexto actual" todo el tiempo.


operaciones booleanas

Toma cualquier declaración A , B , C (en el contexto actual).

replantear : Si probamos algo, podemos afirmarlo nuevamente en el mismo contexto.

A . . . . A .

Tenga en cuenta que " . . . " denota cualquier número de líneas que estén al menos en el nivel de sangría representado. En la regla anterior, esto significa que todas las líneas escritas desde la escritura anterior de " A . " debe estar en el mismo contexto (o en algún subcontexto).

En la práctica nunca escribimos la misma línea dos veces. Para indicar que podemos omitir una línea en una prueba, la marcaré con corchetes como este:

A . . . . [ A . ]

⇒sub       ⇒restate     (Podemos crear un subcontexto condicional donde A sostiene.)

Si  A :   [ A . ] B . . . . Si  A :   . . .   [ B . ]

⇒introducción       ⇒eliminación

Si  A :   . . . B . [ A B . ] A B . A . B .

∧introducción     ∧eliminación

A . B . A B . A B . [ A . ] [ B . ]

∨introducción     ∨elim

A . [ A B . ] [ B A . ] A B . A C . B C . C .

¬introducción     ¬eliminar     ¬¬eliminar

A . ¬ A . A . ¬ A . . ¬ ¬ A . A .

Tenga en cuenta que al usar ¬intro y ¬¬elim podemos obtener la siguiente regla de inferencia adicional:

¬ A . A .

que corresponde a cómo uno intentaría probar A por contradicción , es decir, mostrar que suponiendo ¬ A implica una falsedad.

⇔introducción     ⇔eliminar

A B . B A . A B . A B . [ A B . ] [ B A . ]

Cuantificadores e igualdad

Las reglas aquí son para cuantificadores restringidos porque generalmente pensamos en términos de ellos. Primero necesitamos algunas definiciones.

Variable utilizada : una variable que se declara en el encabezado de algún contexto contenedor o se declara en algún paso anterior de eliminación ("let") de algún contexto contenedor.

Variable no utilizada : una variable que no se utiliza.

Variable nueva : una variable que no aparece en ninguna declaración anterior en ningún contexto que la contenga.

Expresión de objeto : una expresión que hace referencia a un objeto (por ejemplo, una variable utilizada o un símbolo de función aplicado a expresiones de objeto).

Propiedad con k parámetros : una cadena PAG con algunos espacios en blanco donde cada espacio en blanco tiene alguna etiqueta de 1 a k , tal que reemplazando cada espacio en blanco en PAG por alguna expresión de objeto produce una declaración. Si k = 2 , entonces PAG ( mi , F ) es el resultado de reemplazar cada espacio en blanco etiquetado 1 por mi y reemplazando cada espacio en blanco etiquetado 2 por F . Del mismo modo para otros k .

En esta sección, mi , F (si está involucrado) puede ser cualquier expresión de objeto (en el contexto actual).

Comenzamos con las siguientes reglas que proporcionan un tipo de todos los objetos.

universo : o b j es un tipo

[ mi o b j . ]

Ahora toma cualquier tipo S y una propiedad de 1 parámetro PAG y una variable no utilizada X que no aparece en S o PAG .

∀sub           ∀restate         (Podemos crear un ∀-subcontexto en el que X es de tipo S .)

Dado  X S :   [ X S . ] A . . . . Dado  X S :   . . .   [ A . ] ( X no debe aparecer en A )

∀introducción           ∀eliminar

Dado  X S :   . . . PAG ( X ) . X S   (   PAG ( X )   ) . X S   (   PAG ( X )   ) . mi S . PAG ( mi ) . ( mi no debe compartir ninguna variable no utilizada con PAG )

∃ introducción           ∃ elim

mi S . PAG ( mi ) . X S   (   PAG ( X )   ) . X S   (   PAG ( X )   ) . Dejar  y S  tal que  PAG ( y ) . [ y S . ] [ PAG ( y ) . ] (dónde y es una variable fresca)

= introducción       = eliminar

[ mi = mi . ] mi = F . PAG ( mi ) . PAG ( F ) . ( F no debe compartir ninguna variable no utilizada con PAG )

Cambio de nombre de variables

Finalmente, las siguientes reglas para renombrar variables son redundantes, pero acortarían las demostraciones.

∀renombrar         ∃renombrar

X S   (   PAG ( X )   ) . [ y S   (   PAG ( y )   ) . ] X S   (   PAG ( X )   ) . [ y S   (   PAG ( y )   ) . ]

  (dónde y es una variable no utilizada que no aparece en PAG )

Formas cortas

Por conveniencia escribimos " X , y S   (   PAG ( X , y )   ) " como abreviatura de " X S   (   y S   (   PAG ( X , y )   )   ) ", y de manera similar para más variables y para " ". También comprimiremos los encabezados de subcontexto ∀ anidados de la siguiente forma:

Dado  X S :   Dado  y S :   . . .

a:

Dado  X , y S :   . . .

Además, " ! X S   (   PAG ( X )   ) " es la forma abreviada de " X S   (   PAG ( X ) y S   (   PAG ( y ) X = y   )   ) ".


Ejemplo

He aquí un ejemplo, donde S , T son de cualquier tipo y PAG es cualquier propiedad con dos parámetros.

Primero con todas las líneas mostradas:

  Si X S   (   y T   (   PAG ( X , y )   )   ) : [⇒sub]
    X S   (   y T   (   PAG ( X , y )   )   ) . [⇒sub]
    Deja a S tal que y T   (   PAG ( a , y )   ) . [∃eliminar]
    a S . [∃eliminar]
    y T   (   PAG ( a , y )   ) . [∃eliminar]
    z T   (   PAG ( a , z )   ) . [∀renombrar]
    Dado y T : [∀sub]
      y T . [∀sub]
      z T   (   PAG ( a , z )   ) . [∀reiterar]
      y T . [reafirmar]
      PAG ( a , y ) . [∀eliminar]
      a S . [∀reiterar]
      X S   (   PAG ( X , y )   ) . [∃introducción]
    y T   (   X S   (   PAG ( X , y )   )   ) . [∀introducción]
X S   (   y T   (   PAG ( X , y )   )   ) y T   (   X S   (   PAG ( X , y )   )   ) . [⇒introducción]

Finalmente, con todas las líneas entre corchetes eliminadas:

  Si X S   (   y T   (   PAG ( X , y )   )   ) : [⇒sub]
    Vamos a S tal que y T   (   PAG ( a , y )   ) . [∃elim]
    Dado y T : [∀sub]
      PAG ( a , y ) . [∀eliminar]
      X S   (   PAG ( X , y )   ) . [∃introducción]
    y T   (   X S   (   PAG ( X , y )   )   ) . [∀introducción]
X S   (   y T   (   PAG ( X , y )   )   ) y T   (   X S   (   PAG ( X , y )   )   ) . [⇒introducción]

Esta prueba final está limpia pero aún es fácilmente verificable por computadora.

Expansión definitoria

Para facilitar las definiciones , que pueden acortar significativamente las demostraciones, también tenemos las siguientes reglas de expansión definitoria.

Para cada k -propiedad del parámetro PAG y predicado-símbolo fresco q :

Dejar  q ( X 1 , . . . X k ) PAG ( X 1 , . . . X k )  para cada  X 1 S 1  y y  X k S k . [ X 1 S 1   X k S k   (   q ( X 1 , . . . X k ) PAG ( X 1 , . . . X k )   ) . ]

Para cada ( k + 1 ) -propiedad del parámetro R y nuevo símbolo de función F :

X 1 S 1 X k S k   ! y T (   R ( X 1 , . . . X k , y )   ) Dejar  F : S 1 × × S k T  tal que  R ( X 1 , . . . X k , F ( X 1 , . . . X k ) )  para cada  X 1 S 1  y y  X k S k . [ X 1 S 1   X k S k   (   F ( X 1 , . . . X k ) T R ( X 1 , . . . X k , F ( X 1 , . . . X k ) )   ) . ]

Estas reglas son redundantes en el sentido de que cualquier declaración que pueda probar que no use ninguno de los nuevos símbolos puede probarse sin usar la expansión definitoria.

notas

Las reglas anteriores evitan el problema habitual que tienen muchos otros sistemas, donde las variables utilizadas para testigos de declaraciones existenciales deben distinguirse de las variables utilizadas para objetos arbitrarios. La razón es que cada variable aquí está especificada por un subcontexto ∀ o por una instrucción "let"; en otras palabras, no hay variables libres. El hecho de que toda variable esté ligada está fuertemente relacionado con el hecho de que este sistema permite un universo vacío, si no hay otros axiomas.

Además, cada variable se especifica mediante un encabezado único o una declaración "let" en el contexto actual; en otras palabras, no hay sombreado variable. Esto es por diseño, y en la práctica matemática real también lo cumplimos, aunque la mayoría de los otros sistemas formales no lo hacen. En consecuencia, oraciones como " X   X   ( X = X ) ." simplemente no se puede escribir en este sistema. Si desea permitir este tipo de oraciones terribles, tendría que modificar las reglas apropiadamente, pero lo más probable es que le cause un dolor de cabeza.

Finalmente, hubo algunas decisiones técnicas sutiles. Para las reglas del cuantificador, la razón por la que exigí que X no aparece en S , PAG es que, si más adelante incluyéramos reglas para especificar tipos, normalmente tendríamos nombres de variables en su sintaxis, lo que daría problemas. Por ejemplo, si hemos escrito en el contexto actual " X { y : y S y T } " y " X tu ", no será sensato permitir la escritura" y tu   ( y { y : y S y T } ) ". Del mismo modo, si hemos escrito " X = { y : PAG ( y ) } " y " y tu   ( q ( X , y ) ) ", no queremos permitir la escritura" y tu   ( q ( { y : PAG ( y ) } , y ) ) ".

Además, para permitir que una variable se actualice nuevamente después de dejar el subcontexto en el que fue declarada, requerí que las reglas ⇒intro e ∀intro se puedan aplicar solo inmediatamente después del ⇒-subcontext o ∀-subcontext correspondiente. Sería más sencillo simplemente definir una variable nueva como una que no aparece en ninguna línea anterior, pero luego fácilmente podemos quedarnos sin nombres de variables nuevas en una prueba larga.

~ ~ ~ ~ ~ ~ ~

Para ilustrar la flexibilidad de este sistema, expresaré tanto la Aritmética de Peano como la Teoría de conjuntos como reglas adicionales que pueden agregarse simplemente al sistema.

Aritmética Peano

Agrega el tipo norte y los símbolos de PA, a saber, los símbolos constantes 0 , 1 y el 2 -símbolos de función de entrada + , · y el 2 -input predicado-símbolo < .

Añadir los axiomas de PA , adaptado de aquí :

  • X , y norte   (   X + y norte   ) .
  • X , y norte   (   X · y norte   ) .
  • X , y norte   (   X + y = y + X   ) .
  • X , y norte   (   X · y = y · X   ) .
  • X , y , z norte   (   X + ( y + z ) = ( X + y ) + z   ) .
  • X , y , z norte   (   X · ( y · z ) = ( X · y ) · z   ) .
  • X , y , z norte   (   X · ( y + z ) = X · y + X · z   ) .
  • X norte   (   X + 0 = X   ) .
  • X norte   (   X · 1 = X   ) .
  • X norte   (   ¬ X < X   ) .
  • X , y norte   (   X < y y < X X = y   ) .
  • X , y , z norte   (   X < y y < z X < z   ) .
  • X , y , z norte   (   X < y X + z < y + z   ) .
  • X , y , z norte   (   X < y 0 < z X · z < y · z   ) .
  • X , y norte   (   X < y z norte   (   X + z = y   )   ) .
  • 0 < 1 .
  • X norte   (   0 = X 1 = X 1 < X   ) .

Agregue los axiomas de inducción, es decir, para cada propiedad PAG involucrando solo los símbolos de PA y cuantificadores sobre norte agregue el siguiente axioma (donde k no aparece en PAG ):

  • PAG ( 0 ) k norte   (   PAG ( k ) PAG ( k + 1 )   ) k norte   (   PAG ( k )   ) .

Teoría de conjuntos

Agrega el tipo s mi t y la regla de que todo miembro de s mi t también es un tipo.

Agregue los símbolos de función unarios PAG , , los símbolos de funciones binarias × , , y el símbolo constante . Reutilizamos el predicado-símbolo binario , ya que no habrá ambigüedad. También agregue las siguientes reglas (en cada contexto) para la otra notación:

  • Si mi , F o b j , entonces ( mi , F ) o b j y { mi , F } s mi t .
  • Si S , T s mi t , entonces S × T s mi t y ( S T ) s mi t y PAG ( S ) s mi t .
  • Si S , T s mi t y F ( S T ) y X S , entonces F ( X ) T .
  • Si S s mi t y X S   (   X s mi t   ) , entonces ( S ) s mi t .

Agregue los siguientes axiomas:

  • extensionalidad :   S , T s mi t   (   S = T X o b j   (   X S X T   )   ) .
  • conjunto vacío :   X o b j   (   ¬ X   ) .
  • naturales :   norte s mi t .
  • conjunto de potencia :   S s mi t   (   PAG ( S ) = { T : T s mi t X T   (   X S   ) } ) .
  • pareja :   X , y o b j   (   { X , y } = { z : z = X z = y } ) .
  • par ordenado :   X , y o b j   z , w o b j   (   ( X , y ) = ( z , w ) X = z y = w   ) .
  • tipo de producto :   S , T s mi t   (   S × T = { t : X S   y T   (   t = ( X , y )   ) }   ) .
  • tipo de función :   S , T s mi t   (   ( S T ) = { F : F PAG ( S × T ) X S   ! y T   (   ( X , y ) F   ) }   ) .
  • función-aplicación :   S , T s mi t   F ( S T )   X S   (   ( X , F ( X ) ) F   ) .
  • unión :   S s mi t   (   ( S ) = { X : T s mi t   (   X T T S   ) }   ) .
  • elección :   S , T s mi t   R PAG ( S × T )   (   X S   y T   (   ( X , y ) R   ) F ( S T )   X S   (   ( X , F ( X ) ) R   )   ) .

Agregue las siguientes reglas:

notación de tipo

Tomar (en el contexto actual) cualquier propiedad PAG y expresión de objetos mi y variable no utilizada X .

Entonces { X : PAG ( X ) } es un tipo y su pertenencia se rige por:

mi { X : PAG ( X ) } PAG ( mi ) . . ( X no debe aparecer en mi o PAG )

comprensión

Tomar cualquier propiedad PAG y variable no utilizada X .

S s mi t . { X : X S PAG ( X ) } s mi t . . ( X no debe aparecer en S o PAG )

reemplazo

Tomar cualquiera 2 -propiedad del parámetro PAG y variables no utilizadas X , y .

S s mi t . X S   ! y o b j   (   PAG ( X , y )   ) . { y : X S   (   PAG ( X , y )   ) } s mi t . ( X , y no debe aparecer en S o PAG )

inducción

Tomar cualquier propiedad PAG con 1 parámetro de norte .

PAG ( 0 ) . k norte   (   PAG ( k ) PAG ( k + 1 )   ) . k norte   (   PAG ( k )   ) . ( k no debe aparecer en PAG )

La regla de inducción subsume los axiomas de inducción para PA, y esencialmente la única diferencia es que la propiedad PAG puede involucrar operaciones de conjuntos y cuantificación sobre conjuntos.

notación de función

Esta regla es teóricamente innecesaria pero pragmáticamente muy conveniente (también conocida como expresiones lambda en informática).

Toma cualquier conjunto S y cualquier expresión de objeto mi con 1 parámetro de S y variable no utilizada X .

Entonces ( S   X mi ( X ) ) es un objeto y su comportamiento se rige por:

X S   (   mi ( X ) T   ) . F = ( S   X mi ( X ) ) . F ( S T ) X S (   F ( X ) = mi ( X )   ) .

sistema fundacional

La combinación de la Aritmética de Peano anterior más la Teoría de conjuntos produce un sistema fundamental que es esencialmente tan fuerte como ZFC pero mucho más fácil de usar. También es agnóstico a la existencia de objetos que no son conjuntos, y ni siquiera asume que los miembros de norte son conjuntos. También trata los productos cartesianos y los pares ordenados como nociones abstractas incorporadas. Así es como los usamos en las matemáticas reales. (Más precisamente, el sistema anterior interpreta directamente ZFC menos la regularidad).

Hola amigo, muchas gracias por toda tu ayuda :)
@user108262: ¡De nada y espero que te ayude tanto como me ha ayudado a mí! Cuando ideé estas reglas, estaba fuertemente influenciado por la programación donde el contexto de cada declaración es explícito. Esa es realmente la clave, porque entonces es sencillo construir las reglas de inferencia basadas en la intuición. Al igual que en la programación, puede haber varias declaraciones dentro del mismo contexto, y esto minimiza la cantidad de escritura necesaria, en marcado contraste con los sistemas de estilo Hilbert. Lo presenté aquí en estilo Fitch, pero también podemos usar llaves o sangría como en C o Python.
Decidí actualizar mi publicación con todas las reglas y cambié al estilo Python. La idea subyacente es ciertamente correcta, ya que la he usado durante años. Pero es una publicación larga y puede haber errores, así que si alguien tiene alguna pregunta, no dude en preguntarme en chat.stackexchange.com/rooms/44058/logic .
¿El sistema que describiste es el estilo Fitch?
@Buraian: "fithch" ≠ "Fitch", y mi publicación enlaza explícitamente con el artículo de wikipedia que describe el estilo de Fitch. Un estilo no es un sistema, al igual que el formato de archivo ejecutable no es un software de aplicación. En cualquier caso, el propósito de esta publicación es presentar un sistema básico completo y fácil de usar para las matemáticas, y para eso no es importante saber qué estilo usa. Después de que aprenda a usarlo, se volverá trivialmente obvio por qué el estilo Fitch es mejor que otros estilos, pero esa comprensión solo se obtiene después de aprenderlo y ver cuán inutilizables son los sistemas alternativos.
(Cito a Fitch puramente en aras de la atribución de crédito, no por pedagogía).
@Buraian: Si desea aprender a usar este sistema, puede preguntarme al respecto en la sala de chat de Matemáticas básicas .
@kjo: use las reglas de reformulación para 'extraer' un teorema anterior de un contexto contenedor al subcontexto donde desea usarlo. Para más consultas, no dude en preguntar en la sala de chat vinculada, a la que le he dado acceso.