La complejidad computacional implícita ( ICC ) es un subcampo de la teoría de la complejidad computacional que caracteriza los programas mediante restricciones en la forma en que se construyen, sin referencia a un modelo de máquina subyacente específico o a límites explícitos en los recursos computacionales, a diferencia de la teoría de la complejidad convencional. [ 1 ] [ 2 ] [ 3 ] El objetivo central de la ICC es identificar formalismos de programación —como lenguajes formales restringidos , sistemas de tipos o esquemas de recursión— cuyo poder expresivo coincide exactamente con una clase de complejidad dada , de modo que la pertenencia a la clase se convierte en una consecuencia de la buena formación sintáctica en lugar de un argumento computacional separado. La ICC se desarrolló en la década de 1990 y emplea técnicas de teoría de la prueba , lógica subestructural , lógica lineal , teoría de modelos y teoría de la recursión para demostrar límites en el poder expresivo de lenguajes formales de alto nivel . [ 4 ] [ 5 ] Entre sus contribuciones fundacionales se encuentran la lógica lineal acotada de Girard , Scedrov y Scott (1992), [ 4 ] el álgebra de funciones de Bellantoni y Cook basada en la recursión predicativa (1992), [ 6 ] y la caracterización del tiempo polinomial del lenguaje de programación sin cons de Jones (1999). [ 7 ] ICC también se ocupa de la realización práctica de lenguajes de programación funcionales , herramientas de lenguaje y teoría de tipos que pueden controlar el uso de recursos de los programas en un sentido formalmente verificable. [ 8 ] [ 9 ]
Dos enfoques principales para la certificación de recursos han sido el Análisis Estático (AE) y la Complejidad Computacional Implícita (CCI). El AE es de naturaleza algorítmica: se centra en un lenguaje de programación amplio y busca determinar, mediante métodos sintácticos, si determinados programas en ese lenguaje son factibles. En cambio, la CCI intenta crear desde el principio lenguajes o métodos de programación especializados que delimiten una clase de complejidad. Por lo tanto, el AE se centra en el tiempo de compilación , sin exigir nada al programador; mientras que la CCI es una disciplina de diseño de lenguajes. [ 10 ]
Antecedentes y motivación
En la teoría clásica de la complejidad, un problema se clasifica dentro de una clase de complejidad —como P o PSPACE— analizando el consumo de recursos (tiempo, espacio) de una máquina de Turing que lo resuelve. Este análisis es extrínseco: el programa y su límite de complejidad son objetos separados, y dicho límite debe verificarse de forma independiente.
ICC busca caracterizaciones intrínsecas: lenguajes de programación o sistemas lógicos en los que todo programa bien formado sea, por construcción, factible, y en los que todo algoritmo factible pueda expresarse. Dichas caracterizaciones son de interés teórico porque revelan las razones combinatorias o lógicas que justifican la extensión de una clase de complejidad, y de interés práctico porque pueden servir de base para sistemas de tipos y herramientas de análisis de programas que imponen límites de recursos de forma estática.
Este campo se basa en gran medida en la lógica lineal , introducida por Girard (1987) [ 11 ] , en la que se controlan las reglas estructurales de debilitamiento y contracción. Restringir estas reglas limita la capacidad de un programa para duplicar o descartar datos, lo que a su vez limita los recursos computacionales que el programa puede consumir.
Representaciones implícitas del tiempo polinomial
Las importantes clases de complejidad de conjuntos decidibles en tiempo polinomial (la clase P ) y funciones computables en tiempo polinomial ( FP ) han recibido mucha atención y poseen varias representaciones implícitas.
Programas sin desventajas
Jones [ 7 ] [ 12 ] definió un lenguaje de programación que puede resolver problemas de decisión donde la entrada es una cadena binaria, y demostró que un problema puede resolverse en este lenguaje si y solo si está en P. El lenguaje puede describirse brevemente de la siguiente manera. Recibe la entrada como una lista de bits. Tiene variables que pueden apuntar a la lista y cambiar mediante la aplicación de la operación "tail" para que puedan avanzar en la lista. Puede definir funciones recursivas , pero no tiene funciones de orden superior . Fundamentalmente, no tiene constructores de tipos de datos (de ahí el nombre cons-free ): la lista de entrada es la única estructura de datos en todo el programa. La ausencia de constructores limita el poder expresivo, impidiendo la construcción de estructuras de datos auxiliares cuyo tamaño podría aumentar durante el cálculo. Cabe destacar que esta restricción no reduce la clase de problemas decidibles a un subconjunto propio de P: todo problema en P puede resolverse dentro del lenguaje. Además, los programas en este lenguaje pueden ejecutarse en tiempo exponencial, pero solo resuelven problemas de tiempo polinomial, por lo que la caracterización implícita es independiente del tiempo de ejecución real de cada programa. Jones también ha demostrado que si se añade no determinismo al lenguaje (como en una máquina de Turing no determinista ), la clase de problemas que se pueden aceptar sigue siendo P. [ 12 ]
Álgebras de funciones con recursión en la notación
Bellantoni y Cook [ 6 ] demostraron que cierta clase de funciones coincide con la programación funcional (PF). Estas son funciones que se definen, al igual que las funciones recursivas primitivas , mediante un conjunto de funciones base y operadores para construir nuevas funciones a partir de las existentes. Se utiliza un esquema de recursión especial en lugar del esquema de recursión primitivo, como se verá más adelante, y además, las funciones tienen sus argumentos divididos en dos "tipos". Esto se indica separando los argumentos con un punto y coma:Los argumentos que siguen al punto y coma se denominan seguros (un nombre más intuitivo podría ser "protegidos"). Cuando se pasa un valor en una posición segura, no se permite que crezca demasiado; observe la diferencia entre las cláusulas (3) y (4) a continuación. Otra diferencia importante con respecto a la definición de funciones recursivas primitivas es que aquí los argumentos se consideran cadenas binarias y podemos incrementar un valor añadiendo un bit ( x 0 o x 1) en contraste con la función sucesora numérica ( x' ).
Aquí está la lista de funciones básicas:
- cadena vacía :(una función cero-aria)
- proyecciones :para cada
- sucesores binarios normales :
- sucesores binarios seguros y limitados :
- predecesor binario :
- predecesor numérico :
- condicional :
- producto de recuento :.
Podemos combinar funciones para formar otras nuevas utilizando un esquema de composición y un esquema de recursión. Dado, su composición predicativa ,se define por Dado, la recursión predicativa en el esquema de notación define una funciónpor Se denomina "recursión en notación" porque en cada llamada recursiva eliminamos un poco del argumento de recursión, a diferencia de la recursión "en valor", que va de z a z -1.
Ejemplo. Definimos una funciónque recibe una cadena binaria x y devuelve una cadena de 0 de la misma longitud que x . Para mayor legibilidad, omitimos las invocaciones de las funciones de proyección que son técnicamente necesarias para recuperar el argumento de la función, por ejemplo,para obtener x en la función. Nótese cómo necesitamos mantener inicialmente una copia de x para poder aplicar el operador de sucesor binario acotado en la recursión.
Recursión escalonada
Leivant [ 10 ] desarrolló un enfoque alternativo basado en la estratificación de datos: los números naturales (u otros datos) se clasifican en niveles, y la recursión solo se permite respetando el orden de los niveles. Las funciones definibles mediante recursión limitada por niveles coinciden con funciones computables en tiempo polinomial. El marco de Leivant es sintácticamente más flexible que el álgebra de Bellantoni-Cook y se extiende naturalmente a lenguajes imperativos.
Enfoques de lógica lineal
Girard, Scedrov y Scott [ 4 ] introdujeron la lógica lineal acotada , una variante de la lógica lineal en la que el uso de la regla de contracción está limitado por términos polinomiales. Las demostraciones en este sistema corresponden, a través de la correspondencia de Curry-Howard , a funciones computables en tiempo polinomial. El trabajo posterior sobre lógica lineal ligera de Girard [ 13 ] y su desarrollo en teoría de tipos por Baillot y Terui [ 14 ] , y la lógica lineal suave de Lafont [ 15 ] dieron lugar a sistemas relacionados con una teoría de demostración más limpia , que caracterizan la computación en tiempo polinomial mediante restricciones estructurales en la modalidad exponencial.
Otras clases
Se han encontrado representaciones implícitas para muchas clases de complejidad, incluyendo la jerarquía de clases de tiempo P, EXPTIME , 2-EXPTIME ,… y las clases de espacio L , PSPACE , EXPSPACE ,…; [ 12 ] así como las clases de la jerarquía DTIME ( O ( n )), DSPACE ( O ( n )), DTIME (), DSPACE (),… [ 16 ] Para la mayoría de las clases, se conocen varias representaciones alternativas, lo que sugiere que las clases tienen descripciones intrínsecas robustas en lugar de ser artefactos de un único formalismo.
La jerarquía de Grzegorczyk de funciones recursivas elementales y primitivas también se ha estudiado desde una perspectiva ICC: los niveles de la jerarquía corresponden a restricciones en la profundidad de anidamiento de esquemas de recursión acotados. [ 17 ] [ 18 ]
Aplicaciones
Los resultados del CCI se han aplicado en varias direcciones prácticas:
- Análisis de recursos basado en tipos. Se han implementado sistemas de tipos inspirados en la lógica lineal ligera y flexible en lenguajes funcionales para certificar que los programas bien tipados se ejecutan en tiempo polinomial o en espacio polinomial. [ 9 ]
- Complejidad implícita del cálculo de números reales. Los métodos ICC se han extendido para caracterizar el cálculo factible sobre los números reales, yendo más allá del entorno discreto. [ 5 ]
- Seguridad y flujo de información. Las propiedades de limitación de recursos de los sistemas tipo ICC se han adaptado para controlar el flujo de información en programas, con aplicaciones a la seguridad basada en lenguaje. [ 19 ]
Véase también
Notas
- ↑ Dal Lago 2012 .
- ↑ Universidad de Edimburgo 2001 .
- ↑ Escuela normal superior de Lyon 2017 .
- 1 2 3 Girard, Scedrov y Scott 1992 .
- 1 2 Instituto Nacional de Informática 2013 .
- 1 2 Bellantoni y Cook 1992 .
- 1 2 Jones 1999 .
- ↑ DICE 2014 .
- 1 2 Aubert et al. 2022 .
- 1 2 Leivant 2020 .
- ↑ Girard 1987 .
- 1 2 3 Jones 2001 .
- ↑ Girard 1998 .
- ↑ Baillot y Terui 2004 .
- ↑ Lafont 2004 .
- ↑ Kristiansen y Voda 2005 .
- ↑ Rosa 1984 .
- ↑ Clote 1999 .
- ↑ Marion 2011 .
Referencias
- Aubert, Clément; Rubiano, Thomas; Rusch, Neea; Seiller, Thomas (2022). "Realizando la complejidad computacional implícita" (PDF) . 7.ª Conferencia Internacional sobre Estructuras Formales para la Computación y la Deducción (FSCD), 2022. LIPIcs. 228 : 26:1–26:33.
- Baillot, Patrick; Terui, Kazushige (2004). "Tipos ligeros para computación en tiempo polinomial en cálculo lambda". Actas del 19.º Simposio Anual de la IEEE sobre Lógica en Ciencias de la Computación (LICS 2004) . IEEE Computer Society Press. pp. 266–275 . doi : 10.1109/LICS.2004.1319621 .
- Bellantoni, Stephen; Cook, Stephen (1992). "Una nueva caracterización teórica de la recursión de las funciones politemporales". Computational Complexity . 2 (2): 97– 110. doi : 10.1007/BF01201998 .
- Clote, Peter (1999). «Modelos de computación y álgebras de funciones». En Griffor, Edward R. (ed.). Manual de teoría de la computabilidad . Estudios en lógica y fundamentos de las matemáticas. Vol. 140. Ámsterdam: North-Holland. pp. 589–681 . ISBN 978-0-444-89882-1.
- Dal Lago, Ugo (2012). «Una breve introducción a la complejidad computacional implícita» (PDF) . En Bezhanishvili, N.; Goranko, V. (eds.). Lecture Notes in Computer Science (LNCS) . Vol. 7388. Berlín, Heidelberg: Springer . pp. 89–109 . doi : 10.1007/978-3-642-31485-8_3 . ISBN 978-3-642-31485-8Consultado el 22 de abril de 2026 .
- DICE (2014). "DICE 2014 – Desarrollos en complejidad computacional implícita" . dice14.tcs.ifi.lmu.de . Consultado el 22 de abril de 2026 .
- Escuela normal superior de Lyon (2017). "Complejidad computacional implícita" . perso.ens-lyon.fr . Consultado el 22 de abril de 2026 .
- Girard, Jean-Yves (1987). "Lógica lineal" (PDF) . Theoretical Computer Science . 50 (1): 1– 102. doi : 10.1016/0304-3975(87)90045-4 . hdl : 10338.dmlcz/120513 .
- Girard, Jean-Yves ; Scedrov, Andre; Scott, Philip (1992). "Lógica lineal acotada: un enfoque modular para la computabilidad en tiempo polinomial". Theoretical Computer Science . 97 (1): 1– 66. doi : 10.1016/0304-3975(92)90386-T .
- Girard, Jean-Yves (1998). "Lógica lineal ligera". Información y computación . 143 (2): 175– 204. doi : 10.1006/inco.1998.2700 .
- Jones, Neil D. (1999). "LOGSPACE y PTIME caracterizados por lenguajes de programación". Theoretical Computer Science . 228 ( 1– 2): 151– 174. doi : 10.1016/S0304-3975(98)00357-0 .
- Jones, Neil D. (2001). "El poder expresivo de los tipos de orden superior o, la vida sin CONS" . Journal of Functional Programming . 11 (1): 55– 94. doi : 10.1017/S0956796800003889 .
- Kristiansen, Lars; Voda, Paul J. (2005). "Lenguajes de programación que capturan clases de complejidad". Nordic Journal of Computing . 12 : 89–115 .
- Lafont, Yves (2004). "Lógica lineal suave y tiempo polinomial". Theoretical Computer Science . 318 ( 1– 2): 163– 180. doi : 10.1016/j.tcs.2003.10.018 .
- Leivant, Daniel (2020). "Un lenguaje imperativo genérico para tiempo polinomial". arXiv : 1911.04026 [ cs.CC ].
- Marion, Jean-Yves (2011). "Un sistema de tipos para el análisis del flujo de complejidad". Actas del 26.º Simposio Anual de la IEEE sobre Lógica en Ciencias de la Computación (LICS 2011) . IEEE Computer Society Press. pp. 123–132 . doi : 10.1109/LICS.2011.41 .
- Instituto Nacional de Informática (2013). "N.º 033 Complejidad computacional implícita y aplicaciones: control de recursos, seguridad, computación con números reales | Seminarios Reunión NII Shonan" . Reunión NII Shonan . Consultado el 22 de abril de 2026 .
- Rose, HE (1984). Subrecursión: funciones y jerarquías . Oxford Logic Guides. Vol. 9. Oxford: Clarendon Press. ISBN 0198531893.
- Universidad de Edimburgo (2001). "ICC'01 - Complejidad Computacional Implícita" . www.dcs.ed.ac.uk. Consultado el 22 de abril de 2026 .
Enlaces externos
- Rusch, Neea (20 de agosto de 2024). "Complejidad computacional implícita: de la teoría a la práctica" . Blog personal . Augusta, Georgia (Estados Unidos): Universidad de Augusta . Recuperado el 22 de abril de 2026 .
- Teoría de la complejidad computacional
- Teoría de la demostración
- teoría de tipos
- teoría de lenguajes de programación