Saltar al contenido principal
LibreTexts Español

11.4: Lógica de orden superior

  • Page ID
    103573
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Template:MathJaxZach

    Pasar de la lógica de primer orden a la lógica de segundo orden nos permitió hablar de conjuntos de objetos en el dominio de primer orden, dentro del lenguaje formal. ¿Por qué parar ahí? Por ejemplo, la lógica de tercer orden debería permitirnos tratar con conjuntos de conjuntos de objetos, o tal vez incluso conjuntos que contienen tanto objetos como conjuntos de objetos. Y la lógica de cuarto orden nos permitirá hablar de conjuntos de objetos de ese tipo. Como habrás adivinado, se puede iterar esta idea arbitrariamente.

    En la práctica, la lógica de orden superior a menudo se formula en términos de funciones en lugar de relaciones. (Modulo las identificaciones naturales, esta diferencia no es esencial.) Dados algunos “tipos” básicos\(A\)\(B\)\(C\),,,... (que ahora llamaremos “tipos”), podemos crear otros nuevos estipulando

    Si\(\sigma\) y\(\tau\) son tipos finitos entonces así es\(\sigma \to \tau\).

    Piense en los tipos como “etiquetas” sintácticas, que clasifican los objetos que queremos en nuestro dominio;\(\sigma \to \tau\) describe aquellos objetos que son funciones que llevan objetos de tipo\(\sigma\) a objetos de tipo\(\tau\). Por ejemplo, podríamos querer tener un tipo\(\Omega\) de valores de verdad, “verdaderos” y “falsos”, y un tipo\(\Nat\) de números naturales. En ese caso, se puede pensar en objetos de tipo\(\Nat \to \Omega\) como relaciones unarias, o subconjuntos de\(\Nat\); los objetos de tipo\(\Nat \to \Nat\) son funciones desde numeros naturales hasta números naturales; y los objetos de tipo\((\Nat \to \Nat) \to \Nat\) son “funcionales”, es decir, superiores- escriba funciones que llevan funciones a números.

    Como en el caso de la lógica de segundo orden, se puede pensar en la lógica de orden superior como una especie de lógica de muchos ordenamientos, donde hay una especie para cada tipo de objeto que queremos considerar. Pero suele ser más claro solo para definir la sintaxis de la lógica de tipo superior desde cero. Por ejemplo, podemos definir un conjunto de tipos finitos inductivamente, de la siguiente manera:

    1. \(\Nat\)es un tipo finito.

    2. Si\(\sigma\) y\(\tau\) son tipos finitos, entonces también lo es\(\sigma \to \tau\).

    3. Si\(\sigma\) y\(\tau\) son tipos finitos, así es\(\sigma \times \tau\).

    Intuitivamente,\(\Nat\) denota el tipo de los números naturales,\(\sigma \to \tau\) denota el tipo de funciones de\(\sigma\) a\(\tau\), y\(\sigma \times \tau\) denota el tipo de pares de objetos, uno de\(\sigma\) y otro de \(\tau\). Entonces podemos definir un conjunto de términos inductivamente, de la siguiente manera:

    1. Para cada tipo\(\sigma\), hay un stock de variables\(x\),\(y\),\(z\),... de tipo\(\sigma\)

    2. \(\Obj 0\)es un término de tipo\(\Nat\)

    3. \(\Obj S\)(sucesor) es un término de tipo\(\Nat \to \Nat\)

    4. Si\(s\) es un término de tipo\(\sigma\), y\(t\) es un término de tipo\(\Nat \to (\sigma \to \sigma)\), entonces\(\Obj{R}_{st}\) es un término de tipo\(\Nat \to \sigma\)

    5. Si\(s\) es un término de tipo\(\tau \to \sigma\) y\(t\) es un término de tipo\(\tau\), entonces\(s(t)\) es un término de tipo\(\sigma\)

    6. Si\(s\) es un término de tipo\(\sigma\) y\(x\) es una variable de tipo\(\tau\), entonces\(\lambd[x][s]\) es un término de tipo\(\tau \to \sigma\).

    7. Si\(s\) es un término de tipo\(\sigma\) y\(t\) es un término de tipo\(\tau\), entonces\(\tuple{s, t}\) es un término de tipo\(\sigma \times \tau\).

    8. Si\(s\) es un término de tipo\(\sigma \times \tau\) entonces\(p_1(s)\) es un término de tipo\(\sigma\) y\(p_2(s)\) es un término de tipo\(\tau\).

    Intuitivamente,\(\Obj{R}_{st}\) denota la función definida recursivamente por\[\begin{aligned} \Obj{R}_{st}(0) & = s \\ \Obj{R}_{st}(x+1) & = t(x, R_{st}(x)),\end{aligned}\]\(\tuple{s, t}\) denota el par cuyo primer componente es\(s\) y cuyo segundo componente es\(t\), y\(p_1(s)\) y\(p_2(s)\) denotan el primer y segundo elementos (“proyecciones”) de\(s\). Finalmente,\(\lambd[x][s]\) denota la función\(f\) definida por\[f(x) = s\nonumber\] para cualquier\(x\) tipo\(\sigma\); así ítem (6) nos da una forma de comprensión, permitiéndonos definir funciones usando términos. Las fórmulas se construyen a partir de declaraciones de predicado de identidad\(\eq[s][t]\) entre términos del mismo tipo, las conectivas proposicionales habituales y la cuantificación de tipo superior. Entonces se pueden tomar los axiomas del sistema como las ecuaciones básicas que rigen los términos definidos anteriormente, junto con las reglas habituales de lógica con cuantificadores y predicado de identidad.

    Si se aumenta el sistema de tipos finitos con un tipo\(\Omega\) de valores de verdad, hay que incluir axiomas que también gobiernan su uso. De hecho, si uno es inteligente, uno puede deshacerse de fórmulas complejas por completo, ¡reemplazándolas por términos de tipo\(\Omega\)! El sistema de prueba puede entonces ser modificado en consecuencia. El resultado es esencialmente la teoría simple de tipos planteada por la Iglesia Alonzo en la década de 1930.

    Como en el caso de la lógica de segundo orden, hay diferentes versiones de semántica de tipo superior que uno podría querer usar. En la versión completa, las variables de tipo\(\sigma \to \tau\) van sobre el conjunto de todas las funciones desde los objetos de tipo\(\sigma\) hasta objetos de tipo\(\tau\). Como cabría esperar, esta semántica es demasiado fuerte para admitir un sistema de pruebas completo y efectivo. Pero se puede considerar una semántica más débil, en la que una estructura consiste en conjuntos de elementos\(T_\tau\) para cada tipo\(\tau\), junto con operaciones apropiadas para aplicación, proyección, etc. Si los detalles se llevan a cabo correctamente, se pueden obtener teoremas de integridad para el tipos de sistemas de prueba descritos anteriormente.

    La lógica de tipo superior es atractiva porque proporciona un marco en el que podemos incrustar una buena cantidad de matemáticas de una manera natural: comenzando con\(\Nat\), se pueden definir números reales, funciones continuas, etc. También resulta particularmente atractivo en el contexto de la lógica intuicionista, ya que los tipos tienen claras intepretaciones “constructivas”. De hecho, se pueden desarrollar versiones constructivas de semántica de tipo superior (basadas en lógica intuicionista, más que clásica) que aclaren muy bien estas interpretaciones constructivas, y son, en muchos sentidos, más interesantes que las contrapartes clásicas.


    This page titled 11.4: Lógica de orden superior is shared under a CC BY license and was authored, remixed, and/or curated by Richard Zach et al. (Open Logic Project) .