Apéndice C Solución al Problema de la Igualdad Gracias a las ideas del Dr. Ranta [Ran95] y de mi coasesor, el Dr. Osorio, pudimos implementar una solución al problema de la igualdad entre los elementos de un conjunto en ALF. En esta solución se reduce significativamente la complejidad de nuestra función de identidad original, EqualSymbol, de orden cuadrático a lineal, dependiendo solamente de la complejidad de la función de igualdad entre los números naturales. Consiste en enumerar los elementos del conjunto Symbols y hacer una función que obtenga el número único correspondiente de cualquier elemento dado. De esta forma, la función de igualdad compara usando la identidad entre naturales. El conjunto de sı́mbolos permanece sin cambios: Symbols : Set [] C S : Symbols [] C NP : Symbols [] C VP : Symbols [] C NB : Symbols [] C REL : Symbols [] C PP : Symbols [] C DET : Symbols [] C NOUN : Symbols [] C WH : Symbols [] C IV : Symbols [] C TV : Symbols [] C 78 APÉNDICE C. SOLUCIÓN AL PROBLEMA DE LA IGUALDAD 79 DV : Symbols [] C SV : Symbols [] C P : Symbols [] C ate : Symbols [] C bread : Symbols [] C a : Symbols [] C the : Symbols [] C man : Symbols [] C who : Symbols [] C that : Symbols [] C he : Symbols [] C John : Symbols [] C to : Symbols [] C La función que obtiene el número del elemento es aquella que recibe un sı́mbolo como parámetro y regresa un número natural único para cada entrada SymbolNumber : (Symbols)N SymbolNumber(S) = 1 SymbolNumber(NP) = 2 SymbolNumber(VP) = 3 SymbolNumber(NB) = 4 SymbolNumber(REL) = 5 SymbolNumber(PP) = 6 SymbolNumber(DET) = 7 SymbolNumber(NOUN) = 8 SymbolNumber(WH) = 9 SymbolNumber(IV) = 10 SymbolNumber(TV) = 11 SymbolNumber(DV) = 12 SymbolNumber(SV) = 13 SymbolNumber(P) = 14 SymbolNumber(ate) = 15 SymbolNumber(bread) = 16 SymbolNumber(a) = 17 SymbolNumber(the) = 18 SymbolNumber(man) = 19 SymbolNumber(who) = 20 [] I APÉNDICE C. SOLUCIÓN AL PROBLEMA DE LA IGUALDAD SymbolNumber(that) SymbolNumber(he) = SymbolNumber(John) SymbolNumber(to) = 80 = 21 22 = 23 24 Y finalmente, nuestra función de igualdad entre sı́mbolos EqualSymbols1 recibe como parámetro dos sı́mbolos y regresa un valor de verdad booleano. Sólo consta de una ecuación que evalua la igualdad entre naturales del resultado de la aplicación de SymbolNumber a los parámetros originales h y h1 . EqualSymbols : (Symbols;Symbols)Bool [] I EqualSymbols(h,h1) = eq(SymbolNumber(h),SymbolNumber(h1)) Notar que la función SymbolNumber supone que las abreviaciones de 1, 2, 3, . . . , 24 ya se han definido. 1 Notar que ahora el nombre cambia a EqualSymbols para diferenciarlo de la primera versión de esa función ası́ llamada EqualSymbol. Índice alfabético arcos, 42 arcos activos, 29, 31, 42 arcos inactivos, 29, 31, 42 atributos, 3 árbol, 23, 26, 37 árbol “enario”, 38 árbol nulo, 38 árbol sugerido, 38 área de trabajo, 59 órdenes, 2 búsqueda en reversa, 23 backtracking, 23 biblioteca de ALF, 22 bibliotecas de ALF, 60 binaria, 2 Bool, 18 branch, 38 teorı́a de tipos polimórfica, 11 abstracción del problema, 2 acciones, 2 Ada, 6 adición, 18, 60 ALF, 58 ambiguedad, 4 análisis sintáctico, 26–28, 37 analizador sintáctico, 4, 23 analizadores chart, 29 ancestral de un nodo, 23 and, 19 Another Logical Framework, 58 apareamiento de patrones, 37, 59, 60, 62 aplicación de la regla bottom-up, 32 append, 21, 44, 48 AppendCharts, 48 arco activo, 29, 30 arco activo vacı́o, 31 arco del chart, 28 arco inactivo, 30 código, 2 código ASCII, 40 código máquina, 2 cadenas de sı́mbolos, 25 canónicos, objetos, 13 caracteres alfanuméricos, 40 categorı́a, 31, 37 categorı́a sintáctica, 29, 36, 40 categorı́as gramaticales, 3 categorı́as léxicas, 27 categorı́as sintácticas, 3 chart, 27–29, 42, 43 chart activo, 29 chart inicial, 48 Chart Parser, 23 chart parser, 23, 27 chart parser en Prolog, 37 chart parsers, 29 81 82 ÍNDICE ALFABÉTICO Chomsky, 3 codificación de las reglas punto, 29 colección de teorı́as, 60 comparación de arcos, 41 condición de salida, 32 condición de terminación, 27 conectivos de proposición, 16 conjunto, 14–16 conjunto de sı́mbolos, 40 conjunto y categorı́a, 12 conjuntos, 17 conjuntos enumerables recusrivamente, 3 constante definida implı́citamente, 60 constante explı́citamente definida, 59 constante primitiva, 59 constantes, 59 constantes definidas, 59 constantes no canónicas, 59 constantes primitivas, 59 constituyente de la oración, 28 constituyentes, 27, 28, 42 construcción de programas, 11 constructor, 59 constructor de listas, 20 constructor de tipo, 13 constructor del árbol, 38 Contributions Library, 60 Curry y Howard, 16 deducción natural de Gentzen, 17 definición abstracta, 4 definición explı́cita correcta, 60 definición inductiva, 16 definición recursiva, 60 definiciones estructurales, 32 definiendos, 60 definiendum, 60 desarrollo bottom-up, 58 desarrollo top-down, 58 determinante, 24 dotted rules, 29 edge, 42 EdgeInChart, 47 Edges, 42 efectos colaterales, 4, 10 eficiencia de ALF, 35 ejecución del chart parser, 61 elemento canónico, 14 elemento del conjunto, 15 elemento nulo, 20 elementos canónicos, 35 enteros, 59 EqualEdge, 41 EqualSymbol, 40, 41 EqualSymbolList, 41 especificación, 11 especificaciones de tareas, 12 estrategia bottom-up, 26 estructura de la oración, 26 estructura de los datos, 13 estructura del programa, 12, 13 estructura gramatical, 4 estructura inductiva, 14 estructuras de tipos, 12 evaluación floja, 10 expresión bien formada, 26 expresiones bien formadas, 3 fórmula bien formada, 16 false, 18 finish, 29, 42 foldr, 20 83 ÍNDICE ALFABÉTICO forma de objeto no canónica, 13 Forma Normal, 19 formalismos, 11 FORTRAN, 2, 5, 6 found, 29, 42 framework lógico, 59 frase nominal, 24 frase verbal, 24 función de identidad, 35, 40 función de identidad inductiva, 40 función de orden superior, 9 función filtro, 48 función sucesor, 17, 59 funciones, 59 funciones de bajo nivel, 40 funciones dependientes, 17 funciones matemáticas, 4 FundamentalRuleIV, 44 FundamentalRuleV, 48 generación de oraciones, 25 Gentzen, 17 GetCategory, 37 grafo acı́clico dirigido, 28 gramática, 3, 4, 23, 35, 43 gramática generativa, 3, 25 gramática libre del contexto, 26 gramáticas libres del contexto, 24 Grammar, 36, 43 higher-order function, 9 hipótesis a probar, 28 hipótesis probadas, 28 hojas, 38 hojas del árbol, 23 IBM-PC, 58 ICGLIB, 60 if, 19 igualdad, 14 igualdad de definición, 15 implementación del bottom-up chart parser, 34 Import, 60 inactivo, 29 inferencias, 2 inicialización, 30 inicialización del chart, 27 jerarquı́a de Chomsky, 3 jerarquı́a gramatical, 3 juicio, 14 léxico, 31 lógica constructiva, 16 lógica de predicados, 12 lógica de programación formalizada, 12 lógica intuicionı́stica, 16 label, 29, 42 lazy evaluation, 10 leaves, 38 leftHandSide, 36 lenguaje, 3 lenguaje de programación, 11 lenguaje de programación tipificado, 12 lenguaje ensamblador, 6 lenguaje funcional, 11 lenguajes artificiales, 3 lenguajes de alto nivel, 2 lenguajes de estado finito, 3 lenguajes de tipo 0, 3 lenguajes de tipo 1, 3 lenguajes de tipo 2, 3 lenguajes de tipo 3, 3 lenguajes declarativos, 2 84 ÍNDICE ALFABÉTICO lenguajes formales, 2 lenguajes funcionales tipificados, 12 lenguajes indizados, 3 lenguajes libres del contexto, 3 lenguajes naturales, 2, 3 lenguajes regulares, 3 lenguajes sensitivos al contexto, 3 Linux, 58 LISP, 1, 2 List(Edges), 42 lista de arcos, 42 listas, 20 listas de constituyentes sintácticos, 29 máquina de traducción, 2 matemáticas constructivas, 11 mecanismo declarativo, 3 mecanismo inductivo finito, 3 Micro Library, 60 ML, 2 MODULA-II, 6 mult, 21 multiplicación, 60 números naturales, 16, 59 new alf two, 58 nivel de abstracción, 17 nivel del tipo, 18 no canónicos, objetos, 13 nodo del chart, 28 nodo inicial, 28, 29 nodo terminal, 29 nombre, 24 ntCons, 38 ntNil, 38 NTree, 38 objeto de prueba, 16, 59 objeto primitivo, 13 objetos matemáticos, 59 objetos y tipos, 16 operación, 18 operador, 18 or, 19 palabra, 40 palabras, 2 parser, 3, 4 parsing, 26 Pascal, 2 pattern matching, 59 permutaciones, 40 Phrase Structure Grammar Rules, 36 plus, 21 preguntas, 2 primitivas del lenguaje, 4 principio de proposiciones como tipos, 16 principios en el uso del chart parser, 32 procesadores de números, 2 prod, 21 producto, 18 producto cartesiano, 12 programa correcto, 11 programa principal, 4 programación funcional, 4 programador, 12 programas, 11 programas correctos, 12 Prolog, 1, 2 proposición, 16 proposición verdadera, 16 proposiciones, 17 proposiciones y conjuntos, 12 85 ÍNDICE ALFABÉTICO proposiciones y verdad, 16 prueba constructiva, 16 pruebas, 11 PS Rules, 37 PSG Rules, 35 PSGRules, 43 punto, 28, 29 raiz del árbol, 23 rama, 38 razonamiento constructivo, 13 reconocedor sintáctico, 4 reconocimiento bottom-up, 27 reconocimiento sintáctico, 26 reconocimiento top-down, 27 recuperación parcial, 29 referencialmente transparentes, 5 Regla Bottom-up, 43 regla bottom-up, 27, 31, 42 regla de eliminación, 13 regla de formación, 13 regla de producción, 25 Regla Fundamental, 44 regla fundamental, 27, 30, 32, 44, 61 reglas de computación, 13 reglas de congruencia, 13 reglas de eliminación, 13 reglas de inferencia, 17 reglas de introducción, 13 reglas de producción, 24, 25, 36, 37 reglas de prueba, 11 reglas gramaticales, 27 reglas gramaticales de estructura de frase, 35 reglas PSG, 36 reglas punto, 29 RemoveRepeated, 47 RemoveRepeatedOut.txt, 61 representación del significado, 2 resúmen, 16 restricciones, 59 rightHandSide, 36 sı́mbilos no terminales, 34 sı́mbilos terminales, 34 sı́mbolo inicial, 25 sı́mbolo léxico, 37 sı́mbolo no terminal, 36 sı́mbolos, 34 sı́mbolos léxicos, 24 sı́mbolos no terminales, 24, 25 sı́mbolos terminales, 24, 25 scratch area, 59 sentencias, 2, 3 sentencias de goto, 6 SHRDLU, 2 side effects, 4 simbolismos lógicos, 12 sistema formal, 12 SmallEnglishList, 36 Solaris, 58 solución al problema, 16 start, 29, 42 StartChart, 48 StartChartOutput, 61 StartChartOutput.alf, 61 subárboles, 38 subconstituyentes, 27, 28, 42 sum, 21 SunOS, 58 SunOS 4, 62 suposiciones, 17 Symbols, 34, 40 SynCat, 34 técnica del análisis sintáctico, 23 ÍNDICE ALFABÉTICO teorı́a abierta, 59 teorı́a de categorı́as, 12 teorı́a de los números reales, 12 Teorı́a de Tipos de Martin-Löf, 11 teorı́a de tipos monomórfica, 11, 58 teorı́as, 60 terminación, 32 TestFRIVOutput, 62 TestFRIVOutput.alf, 61 TestFundamentalRuleIV, 61 TestNTree, 38 theory, 59 tipo, 14, 16 tipo de función, 18 tipo dependiente, 18 tipos de funciones, 17 tipos dependientes, 17 toFind, 29, 42 top-down, 26 true, 18 tty, 62 tuplas, 59 unificación, 59 UNIX, 61 ventana de teorı́a, 59 versión en Prolog, 34 walf, 58, 62 Welcome to ALF, 61 Winograd, 2 Word, 35, 37 86