Introducción a la lingüística computacional y a Prolog.

ATENCIÓN: Si bien no es estrictamente necesario leer la lección anterior, es altísimamente recomendable conocer y manejar teóricamente los principales conceptos de la lingüística formal para poder comprender mejor la presente publicación.

Teoría

La lingüística computacional (en adelante "LC") nace como una rama dentro de la lingüística formal, su objetivo de estudio es poder emular/simular lenguajes naturales (es decir los lenguajes de nosotros los humanos) de manera digital. En otras palabras, busca que las computadoras puedan reproducir los lenguajes naturales. Leer el artículo de Wikipedia sobre LC.

Estudiar lingüística, al menos en este país, nos condenará a la pobreza porque los sueldos de los lingüístas son bajísimos. No obstante, la LC es la rama que hoy en día logra los sueldos más aceptables dentro del mercado. Esto se debe a que empresas como Google, Apple, WhatsApp, etc. tienen sus asistentes de voz (como Siri en el caso de los iPhones o Alexa en Google) que son programados por lingüístas computacionales e informáticos. En la actualidad, estos tipos de lingüístas trabajan en los bots de WhatsApp, por mencionar un ejemplo.

Obviamente, uno de los mayores desafíos es más lo oral que lo escrito debido a que es mucho más fácil para una computadora decodificar texto que decodificar sonido, porque el sonido es mucho más multiforme (cada individuo pronuncia a su manera, mientras que la escritura es más rígida y estructurada).

Complementando lo anterior, es menester resaltar que la LC es deudora teórica de Aspects of the Theory of Syntax (comunmente conocido como "El modelo de Aspectos"), libro en el cual Chomsky amplía la teoría de Syntactic Structures. En otras palabras, la LC toma muchos conceptos teóricos del Modelo de Aspectos, el cual proponía las "Reglas de rescritura de frases" (por ejemplo "Oración" se reescribe como "Sujeto" y "Predicado", o más técnicamente "O" se rescribe como "Sn" y "Sv").

Antecedentes históricos y relación con la lingüística estadística

En los tiempos previos al advenimiento de la publicación de Syntactic Structures (y por consiguiente la consagración de Chomsky al estrellato de la lingüística), el gramático de moda era Charles Hockett 🇺🇸. Cuenta la leyenda que Hockett estuvo ¡10 años! escribiendo lo que él pensaba que sería su obra maestra, el Curso de lingüística moderna (1961). El problema fue que se tardó tanto que en 1957 Chomsky publicó su primer libro… y claro, la teoría de Chomsky era mejor que la de Hockett. Lo lindo de esto es que incluso luego de leer Syntactic Structures, Hockett admitió (en el prólogo de su libro) que la teoría de Chomsky era superadora de la suya, pero que él, de todos modos, publicaría el suyo, en homenaje al esfuerzo de tantos años.

Ahora bien, ¿de qué trataba la teoría de Hockett, la cual se conocía como "lingüística estadística"? No profundizaremos mucho en ella, porque como hemos visto terminó siendo una teoría que no funcionaría epistemológicamente de la mejor manera. No obstante, la podríamos resumir muy pero muy sucintamente (lo cual, debemos admitir, es bastante inexacto y no muy honesto intelectualmente) en sostener que las "construcciones" sintácticas (vean que Hockett no solía llamarles "sintagmas", pero básicamente podemos entender estos dos conceptos como sinónimos) ambiguas podrían dilucidarse vía estadística. Veamos la siguiendo oracion, "El vecino mató al ladrón con un arma". ¿Quién tenía el arma, el vecino o el ladrón? No sabemos. Por lo cual Hockett proponía hacer encuestas o ver estadísticas y en base a eso decidir la opción correspondiente.

Lo curioso es que hoy en día, con la llegada del poder de las computadoras, en cierto modo la lingüística estadística fundada por Hockett regresa a la vida, cual ave Fénix. En este sentido la LC, retoma conceptos de la lingüística estadística. En base a algoritmos, contabilización de palabras y sus posiciones en las oraciones (por ejemplo, frío puede ser tanto adjetivo como sustantivo, habría que contabilizar en qué porcentaje de veces aparece como adjetivo y en que porcentaje como sustantivo) puede llegar a conclusiones y proponer hipótesis.

Retomando la teoría chomskyana, uno de sus objetivos principales es dar cuenta del proceso de adquisición del lenguaje. Lo que la teoría computacional propone es que los cerebros niños pequeñitos que están desarrollando su facultad del lenguaje hacen "estadísticas" mentales. Y que así es como van construyendo las categorías sintácticas de las palabras. Ejemplo: "La ____ noche ____", en ese sintagma las dos palabras vacías sabemos que serán adjetivos. Entonces, una vez que el niño identifica la posición del sustantivo, ya es mucho más sencillo identificar el resto. Es pura estadística.

¿Qué es entonces un lingüista computacional y cuáles son sus diferencias y similitudes con un lingüista formal?

El lingüista computacional es un profesional especializado en el estudio de los lenguajes naturales desde una perspectiva computacional. Su objetivo principal es desarrollar y aplicar técnicas informáticas para analizar y comprender la estructura y el funcionamiento de los lenguajes humanos. Esta disciplina combina la lingüística, la informática y la inteligencia artificial para abordar diversos aspectos del lenguaje, como la gramática, la semántica, la sintaxis y el procesamiento del lenguaje natural.

Una de las principales tareas del lingüista computacional es diseñar algoritmos y programas informáticos que permitan procesar y analizar grandes cantidades de texto en diferentes idiomas. Estos programas pueden utilizarse para tareas como la traducción automática, la generación de resúmenes, el análisis de sentimientos, la detección de spam, entre otras aplicaciones relacionadas con el procesamiento del lenguaje natural.

Aunque tanto el lingüista computacional como el lingüista formal general comparten un interés en el estudio del lenguaje, existen algunas diferencias en sus enfoques y áreas de especialización. El lingüista formal general se centra principalmente en el análisis y la descripción de la estructura gramatical y las reglas lingüísticas de un idioma en particular. Su objetivo es comprender las propiedades formales del lenguaje humano, como la fonología, la morfología y la sintaxis.

Por otro lado, el lingüista computacional se enfoca en el desarrollo de herramientas y técnicas informáticas para el análisis y procesamiento del lenguaje. Su trabajo implica utilizar métodos computacionales y algoritmos para extraer información útil de grandes volúmenes de texto y desarrollar sistemas inteligentes capaces de interactuar con el lenguaje humano.

¿Qué es un lenguaje de programación?

Así como los lenguajes humanos nos permiten comunicarnos entre humanos, un lenguaje de programación es un conjunto de reglas y estructuras que permiten a los programadores comunicarse con las computadoras y darles instrucciones para realizar tareas específicas. Es como un idioma especializado que las máquinas entienden y pueden ejecutar.

Comparar un lenguaje de programación con un lenguaje natural puede ayudar a comprender su función y características. Al igual que un lenguaje natural, un lenguaje de programación tiene su propia gramática y sintaxis. Está compuesto por palabras y reglas que deben seguirse para crear programas de computadora.

Sin embargo, a diferencia de los lenguajes naturales, un lenguaje de programación es mucho más preciso y estructurado. Cada palabra y símbolo en el lenguaje de programación tiene un significado específico y preciso, y cualquier desviación de las reglas gramaticales puede generar errores.

Un lenguaje de programación también es un lenguaje "formal" en el sentido de que está diseñado con una sintaxis y semántica bien definidas. Esto permite que las instrucciones se interpreten de manera consistente y que los programas se ejecuten de manera predecible. Fíjense que cuando interactuamos entre humanos en castellano podemos cometer errores como pronunciar mal una palabra (por ejemplo, "pam" en lugar de "pan") o un anacoluto del tipo "yo… me gusta la playa" y probablemente nuestro interlocutor nos entienda perfectamente. Sin embargo, si nosotros cometemos errores de sintaxis la computadora no responderá.

Al igual que un lenguaje natural, un lenguaje de programación también puede evolucionar con el tiempo. Se crean nuevas versiones y se introducen características adicionales para hacerlo más potente y fácil de usar. Además, al igual que los dialectos y las variaciones regionales existen en los lenguajes naturales, existen diferentes lenguajes de programación con diferentes enfoques y características. Es decir, se puede lograr un mismo resultado utilizando lenguajes de programación diferentes, los cuales obviamente tendrán una sintaxis diferente, es decir un código diferente (aunque posiblemente muy parecido) para lograr el mismo resultado.

Desde una perspectiva semiológica, un lenguaje de programación se puede analizar como un sistema de signos y reglas que permiten la comunicación entre el programador y la computadora. Los elementos constitutivos del lenguaje, su sintaxis y su significado forman un sistema estructurado y coherente que permite expresar instrucciones precisas y controlar el comportamiento de la máquina. Como sabemos, las lenguas naturales tienen signos (si un niño pide "agua", su interlocutor -posiblemente alguno de sus padres- sabe que lo que el niño desea es 🥤). En los lenguajes de programación ocurre exactamente lo mismo, sus signos tienen significados como en cualquier lenguaje.

En resumen, un lenguaje de programación es un medio de comunicación entre los programadores y las computadoras. Al igual que un lenguaje natural, tiene su propia gramática y reglas, pero es más preciso y estructurado para permitir la creación de programas de computadora de manera coherente y predecible.

Podemos observar que los lenguajes de programación tienen enormes similitudes estructurales con los ítems léxicos. A ciencia cierta, los objetos de los lenguajes tienen rasgos, los cuales están formados por atributos con valores. Lo veremos en instantes. Uno de los lenguajes de computación actual más importante y estudiado es CSS (siglas en inglés de Cascading Style Sheets, en castellano 'Hojas de estilo en cascada'), el lenguaje que se utiliza para diseñar (es decir, darles estilo) los sitios webs. Veamos un ejemplo de la sintaxis en CSS de este mismo párrafo que usted, estimado lector, está leyendo en este preciso momento:

p {

background-color: blue;

color: white;

font: 400 16px Merriweather, Georgia, serif;

font-size: medium;

text-align: justify;

}

A continuación explicaremos en qué consiste esto de: "Objeto {atributo: valor}"

En nuestro ejemplo "p" (de párrafo) es el objeto. P en su interior tiene atributos, como el color de fondo (background-color), el color (de la letra), la fuente (font), etc. Y cada uno de estos atributos debe tener un valor, por ejemplo el atributo "background-color" tiene como valor "blue", por eso nuestro párrafo tiene el azul como color de fondo, al igual que el atributo de "color" es "white" (y por eso las letras de este párrafo están en blanco).

Ahora observemos qué ocurre en un ítem léxico de las lenguas naturales (si hasta ahora no les resultó claro, esto lo aclarará). Elijamos una palabra al azar, supongamos "libro". Observemos la estructura de este ítem léxico:

libro {

categoría: sustantivo;

género: masc;

número: singular;

}

En este ejemplo, apreciamos que el objeto libro tiene como atributos "categoría" (que tiene como valor "sustantivo"), género (masculino) y número (singular). En general, los ítems léxicos tendrán estos atributos, con la salvedad de que podrán diferir los valores de estos atributos (por ejemplo, el ítem léxico "libros" tendrá los mismos atributos, pero "número" tendrá como valor "plural").

Podemos concluir entonces que los ítems léxicos también son objetos que tienen atributos, que a su vez deben tener un valor asignado. ¿Esto último qué implica? Que los atributos respetan la "condición de unicidad", condición que indica que cada atributo tiene un único valor (piénsese que un sustantivo no puede tener como atributo de número ser plural y singular al mismo tiempo. Incluso en un objeto de la vida real, el atributo "marca" de un auto no puede ser Toyota y Ford al mismo tiempo. Los valores posibles siempre son disyunciones, nunca conjunciones. Los atributos siempre tienen un valor A o B, pero nunca pueden tener como valor A y B. Es uno u otro). En consecuencia, podemos hipotetizar entonces que estructuralmente los objetos lingüísticos de las lenguas naturales se pueden comportar de manera muy similar a los objetos de los lenguajes de computación.

Veamos cómo podemos relacionar la computación con el paradigma chomskyano: ¿Cuál es la semántica la palabra "computación"? Este término refiere al proceso de realizar cálculos o resolver problemas utilizando un conjunto definido de reglas o algoritmos. Es decir que las computadoras operan en base al seguimiento de reglas.

(Fíjense que cuando estamos esperando resultados electorales, se suele mencionar "el centro de cómputos"; es decir el "centro de cálculos". Los cómputos son cálculos. También se suele decir en ambientes laborales "¿computaste los nuevos productos?", con una semántica de "¿sumaste/agregaste/tomaste en consideración la cantidad de los nuevos productos?"). ¡Esto es Chomsky puro y duro! La gramática mental chomskyana es un sistema que combina elementos en base a reglas.

La teoría saussureana aplicada a un lenguaje de programación

Vamos a ver un ejemplo concreto en el cual podemos ver aplicada (con los reparos y cuidados teóricos que conlleva la interdisciplinariedad epistemológica) la teoría saussureana en Python 3, uno de los lenguajes de programación más estudiados y utilizados en la actualidad (debido a su simpleza sintáctica), por ejemplo:

Python 3

X = 10

En ese código podemos observar un significante (es decir "X") que tiene un significado asociado (en nuestro caso "10"). Los signos de los lenguajes de programación tienen también, como todo lenguaje (por supuesto), significantes y significados.

Ahora bien, también Saussure hablaba de la mutabilidad del signo (las palabras a través de las décadas y los siglos pueden cambiar su significado). Vean que el signo X que pusimos, que en el lenguaje Python 3 se llama "variable", puede modificarse. Supongamos que X es nuestra edad. A nosotros todos los años se nos modifica ese valor, es decir que varía. Bueno ahora:

        

Python 3

X = 10 X = 11 // Ahora X ya no vale 10, ahora vale 11 porque su valor se sobrescribió

Como afirmaba Saussure, hay mutabilidad en el signo: los signos pueden mutar su significado. X ya no vale 10, ahora vale 11.

Ahora veamos un ejemplo del valor saussureano. Según el maestro suizo los signos están relacionados con los demás signos del sistema, es decir que su valor depende de la totalidad del sistema.

Python 3

Y = 2 Z = 3 X = Y + Z

Hasta ahí todo normal. El significado del significante Y es 2, el significado del significante Z es 3 y el significado del significante X es 5.

Pero vean esto: yo puedo modificar a X sin tocarlo.

        

Python 3

Y = 2 Z = 3 X = Y + Z Y = 4

Ahora X, sin haber sufrido modificaciones, significa 7.

Veamos ejemplos concretos menos abstractos.

        

Python 3

añoDeNacimiento = 1988 añoActual = 2023 edad = añoActual - añoDeNacimiento

La variable "edad" hoy significa 35. Lo curioso es que el año próximo esa variable seguirá siendo la misma.

        

Python 3

edad = añoActual - añoDeNacimiento

Pero por otro lado añoActual cambiará. Por lo cual incluso siendo la misma variable, "edad" cambiará su significado. Esto confirma la teoría de Saussure. Es posible modificar un signo sin modificarlo directamente.

Inteligencia Artificial

¿Para qué sirven programas tipo Prolog? En principio nos mostrará cómo respoderán determinados programas ante diferentes estímulos. Las grandes computadoras de las gigantes multinacionales que hemos mencionado anteriormente poseen memorias inmensas. Piensen que hace menos de 25 años los "enormes" almacenamientos eran los disquetes, que tenían 1,44 MB de capacidad, luego hace tal vez 20 años se popularizaron los cds (que contenían 700 mb), luego las tarjetas de memoria, luego pendrives de 2 GB (es decir 2048 MB), hoy en día tenemos unidades de mínimo 1 TB (es decir 1024 GB). A medida que la capacidad de memoria avanza los ordenadores pueden guardar más datos.

Las inteligencias artificiales (en adelante IIAA) se manejan con similud a Prolog (aunque con una enorme mayor capacidad, comparable a la diferencia entre una tortuga y un yet supersónico). Así como Prolog recibe datos, los cuales al ensamblarlos mediante reglas devuelve un resultado (por ejemplo, una oración), las IIAA recopilan, con la ayuda de los humanos, una enorme cantidad de datos. Por ejemplo, recopilan miles (o cientos de miles, o directamente millones) de fotos de perritos y de gatitos. Luego, el usuario le muestra una nueva foto de un gatito y la IA ya sabe reconocer si es un perrito o un gatito, basado en comparaciones con su base de datos. Obviamente tienen un porcentaje de fallo promedio del 3%, también algunas IIAA tienen la libertad de sacar conclusiones sobre sus acciones, por ejemplo una IA de ajedrez, al tener una capacidad de memoria enorme, no sólo guarda las jugadas que ha hecho, sino que anota el resultados de sus partidas, entonces usando la lógica saca conclusiones "Si con la jugada X perdí más de lo que gané, entonces es preferible no utilizarla" o "Si con la jugada Y gané más de lo que perdí, entonces es una buena jugada y debo seguir usándola". La IA va recopilando sus propias estadísticas. Esto nos lleva a concluir que es un sistema que intenta imitar el pensamiento humano, utilizando algoritmos y técnicas de aprendizaje automático para procesar grandes cantidades de datos y tomar decisiones o realizar tareas complejas. La ventaja de la IA es que puede procesar datos mucho más rápido y con mayor precisión que los humanos, imaginense el caso de un médico que tiene que, a través de una imagen, descubrir si una paciente tiene una enfermedad o no. Para lograrlo, tuvo que previamente (durante sus estudios universitarios) haber visto cientos de imágenes de ese tipo para aprender a reconocerlas. Las IIAA tienen la enorme ventaja de tener acceso no a miles, sino a millones de imágenes, por lo cual su fuente de datos y por consiguiente su precisión será enormemente mayor. ¡Y en una cantidad de tiempo extremadamente menor!

Los algoritmos matemáticos son la clave de las IIAA, así funcionan Netflix, Amazon, Mercado Libre, el celular, etc. Si yo miro la película X y la película Y, busca en su base de datos a otros usuarios que hayan hecho lo mismo, y luego estudia qué película vieron después ellos, suponiendo que vieron la película Z, me la recomendará a mí. Y luego hará una estadística general de las preferencias de los usuarios. Es menester agregar que el lenguaje de computación más popular hoy en día para el desarrollo de IA es Python 3, con esto los usuarios podrán enseñarles reglas y restricciones a las computadoras, también Python acepta la construcción de gramáticas y trabaja con sistemas lógicos.

Obsérvese que las iiaa comienzan a operar de manera similar a los bebés/niños pequeños. Los niños recopilan datos lingüísticos de los adultos (fundamentalmente de sus padres) que van almacenando en su mente. Una vez que ya han recolectado los suficientes, comienzan a generar ellos mismos sus oraciones. Algo similar ocurre con las iiaa, quienes necesitan acceder a datos externos para luego operar.

En lo que respecta a los lenguajes de computación, puede observarse en los siguientes ejemplos cómo los sistemas lógicos son su fundamento estructural. Los programas y las aplicaciones se manejan con lenguajes de computación, vean el siguiente ejemplo: en lógica tenemos una conjunción del tipo "p → q", 'si P, entonces Q'. Supongamos que Microsoft Word tenga como configuración "P = El usuario aprieta la barra espaciadora", "Q = dejar un espacio". Esto le lleva al Word a que cuando ocurra P, él debe contestar con Q. Entonces cuando el usuario aprieta la barra espaciadora, Word inmediatamente deja un espacio. Lo mismo ocurre con videojuegos, supongamos un videojuego en el cual apretando la barra espaciadora el personaje jugable haga un salto. En ese caso, el juego estaría programado para que "P = El usuario aprieta la barra espaciadora", "Q = saltar", entonces (al igual que Word) ante un determinado input (en este caso P), devuelva un output (Q, es decir que el personaje del juego dé un salto).

¿Cómo es la relación entre programador e inteligencia artificial? ¿Puede ChatGPT reemplazar a los programadores? Hasta el momento la respuesta es un rotundo "no". ChatGPT, al menos en su versión gratuita, tiene muchísimas dificultades para hacer correctamente una página en base a lo que se le pida. El programador sigue siendo fundamental para diseñar un sitio web. Lo que sí puede ocurrir es que el desarrollador vaya pidiéndole a la IA que vaya haciendo códigos de a pedacitos. Eso sí la AI lo puede hacer con bastante eficiencia, códigos cortos y concisos. Posteriormente, es recomendable que el programador vaya solicitando otros códigos y los vaya uniendo en un código general. Ciertamente, con las indicaciones del programador, la AI puede lograr sí un bello sitio web yendo pasito a pasito. Caso contrario, es prácticamente imposible (al menos por ahora). Por ahora, el programador sigue siendo fundamental e irremplazable, si bien sus tareas se han visto enormemente facilitadas con la ayuda de las AAII (por ejemplo, ChatGPT puede encontrar errores de sintaxis en cuestión de segundos. Esta es una ayuda indescriptible para un programador, quien antes debía encontrar manualmente el error buscándolo línea por línea. También en caso de no entender un código ajeno de otra persona, el programador puede pedirle a la AI que lo ayude a interpretar qué quiso hacer el otro programador o que hace ese determinado código).

¿Qué cambios podríamos ver en el futuro con el advenimiento de las IIAA? En principio, podemos estar seguros de que habrá un cambio muy grande en las actividades humanas. Las máquinas suelen servir para las tareas repetitivas y automáticas. ChatGPT es una tecnología que tiene la capacidad de escribir textos. Si el ser humano tiene una máquina que escriba por él, es probable que aproveche ese tiempo para otras actividades que la máquina no haga. Por ejemplo, ¿la máquina puede escribir por nosotros? Sí. ¿Puede leer por nosotros? No. Es probable que entonces en el futuro destinemos más tiempo a la lectura y la investigación que a la producción escrita. Pensemos en un periodista. La máquina puede escribir por él los artículos. El problema que surge entonces es: ¿sobre qué debería la máquina escribir? Probablemente el periodista pueda destinar más tiempo a investigar y buscar información relevante para hacer un punteo de ideas general, el cual llegará a la inteligencia artificial para que produzca el texto final. O viceversa, tal vez el periodista no pierda el tiempo en escribir un texto excelso gramaticalmente, sino un borrador desprolijo al que posteriormente la IA le de la forma correcta. Aquí tenemos entonces la distinción entre forma y contenido. Tal vez el hombre deba, a partir de ahora, enfocarse en el contenido, mientras que la IA se encargue de la forma.

En este sentido la IA podría convertirse en una herramienta totalmente igualadora que achique la brecha entre grandes escritores y personas cuyas habilidades de escritura no son su fuerte. En este sentido, sabiendo utilizar ChatGPT cuando escribiente de poco nivel podrá presentar muy buenos textos, incluso de nivel académico. Tal vez alguie sin grandes habilidades de escritura pueda en un futuro conseguir buenos trabajos como secretario o como persona que deba responder mails, incluso en lengua extranjera. Si las sabemos utilizar, las IIAA son herramientas tecnológicas que nos podrían abrir enormes posiblidades tanto culturales como laborales.

¿Cómo podríamos hacer una investigación académica hoy en día? Vamos a suponer que debemos estudiar y hacer una presentacion sobre la filosofía del lenguaje (o sobre el tema que usted desee). Una buena estrategia podría ser centrarse principal y fundamentalmente en la investigación en sí y en el aprendizaje: leer libros del tema (incluso la IA podría recomendarnos lecturas y hacernos pequeños resúmenes introductorios para ponernos en tema), mirar videos en YouTube. Eso nos permitirá ir tomando notas generales de los contenidos que vamos conociendo y de los que nos interesa que forme parte del trabajo final. Una vez que nosotros decidamos qué contenido es el que consideramos pertinente, será la IA quien nos ayude con la forma, siempre supervisados por nosotros, obviamente, quienes por supuesto seremos los que indefectiblemente tengan la palabra final. Lo bueno de esto es que el humano destina más tiempo al contenido, nuestras investigaciones (o notas periodísticas en el caso de los jornalistas), estos productos podrán ser mucho más eficientes y valiosos.

Para quienes les guste el ajedrez, este video es increíble: un humano común y corriente de nivel 1500 de elo (el "elo" es un método matemático, basado en cálculo estadístico, para calcular la habilidad relativa de los jugadores de disciplinas como el ajedrez) derrota a Stockfish, una IA de 3000 de elo (una IA que le gana fácil al pentacampeón del mundo Magnus Carlsen, cuyo elo es 2859 en 2022. Magnus es, probablemente, el mejor jugador de la historia).


INTRODUCCIÓN a PROLOG

1ro) Leer el siguiente artículo de la Wikipedia: Prolog.

2do) Ver este video

Una de las cuestiones que debemos tener en cuenta es el Principio de Endocentricidad formulado por Chomsky en 1981. El prefijo del griego antiguo endo significa 'adentro' (en oposición a exo, que significa 'afuera', de ahí "ex novio", es decir el novio que está afuera; así como palabras como "endógeno" y "exógeno"). Este principio indica que el núcleo del sintagma está en su interior: es su centro (de ahí que el núcleo sea el elemento que proyecta el sintagma y que, a su vez, el sintagma sea la máxima proyección de un núcleo). En otras palabras, un sigtagma como "el perro contento" será un SN (sintagma nominal) porque su núcleo es un N (un sustantivo, en inglés noum); un sintagma como "muy contento" es un SA, porque su núcleo es un A. Esto implica que todo SX, deberá indefectiblemente tener un X en su interior.

3ro) Ver este otro video (es muy cortito)

Debemos tener en cuenta las siguientes instrucciones:
  • Los símbolos no terminales (es decir los símbolos que deben ser reescritos) deben ir en minúscula.
  • Los símbolos terminales van entre corchetes: Ej: [una] [mujer].
  • Cada símbolo debe ir separado por una coma.
  • Las flechas se representan --> La disyunción se expresa con;
  • Cada regla de reescritura debe terminar en punto.
  • Pueden crear un archivo Prolog desde el editor cliqueando en archivo y luego en nuevo, o creando cualquier .txt y cambiándole luego la extensión .txt por la extensión .pl.

EJERCITACIÓN. HACER UNA GRAMÁTICA .pl QUE GENERE LAS SIGUIENTES ORACIONES:

  1. the stones shone.
  2. the stones shone yesterday.
  3. the stones shone at the stadium yesterday.
  4. the rolling stones shone today.
  5. the rolling stones played the song.
  6. the rolling stones played the song at the stadium.
  7. the rolling stones played the song at the stadium yesterday.
  8. the rolling stones shone the song at the stadium yesterday. ❌ (es decir, tiene que dar "false").
  9. the stones shone the song at the stadium yesterday. ❌.
  10. my old stones disappeared at the theater today.
  11. my old stones froze yesterday.
  12. the great stones sang the song.
  13. the rolling stones played my favorite playlist.
  14. the rolling stones froze my favorite playlist.❌
  15. the rolling stones played my favorite playlist at the theater today.
  16. the rolling stones played my favorite playlist at the old theater today.
  17. my old stones slept at the park today.
  18. the rolling stones recibed yesterday.❌
  19. the rolling stones disappeared the stones.❌
  20. my favorite park recibed the rolling stones yesterday.
  21. my favorite park recibed the recital of the rolling stones yesterday.
  22. the great public acclaimed the rolling stones at the recital of the stadium yesterday.

Haz click aquí para conocer la gramática para generar estas oraciones

s --> sn, sv.
sn --> det, (sa ; []), n, (sp ; []).
det --> [the]; [my].
sa --> a.
a --> [rolling]; [old]; [favorite]; [great].
n --> [stones]; [song]; [stadium]; [park]; [recital]; [theater]; [playlist]; [public].
sv --> vi, (sp ; []), (sadv ; []); vt, sn, (sp ; []), (sadv ; []).
vi --> [shone]; [slept]; [disappeared]; [froze].
vt --> [played]; [sang]; [recibed]; [acclaimed].
sp --> p, sn.
p --> [at]; [of].
sadv --> [yesterday]; [today].

%Otra opción para el sv, podría ser la siguiente:
%sv --> v, (sp ; []), (sadv ; []).
%v --> vi ; vt , sn.

Ahora, vean los siguientes 3 videos:

Ese primer video les puede servir muchísimo para resolver los ejercicios de las oraciones de "The Rolling Stones...". Les dejo una copia de la gramática que se utiliza en el video:

s --> sn, sv.
sn --> (det ; []), (sa ; []), n, (sc ; []).
det --> [the].
sa --> [beautiful].
sc --> c , sv ; c , sn , vt.
c --> [that].
n --> [girl] ; [exam] ; [book] ; [romeo].
sv --> vt , sn.
vt --> [passed] ; [studied] ; [loved].

GRAMÁTICA:

A(n) (elevado a potencia "n") (esto quiere decir que “a” puede aparecer n cantidad de veces, es decir, puede aparecer cualquier cantidad de veces, incluso infinitas). Ejemplos: a, aa, aaa, aaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaa, etc.


s --> [a] ; a.
a --> [a] ; [a] , a.

Ahora bien, lo que quiero es A(n)B(n), es decir que aparezcan la misma cantidad de veces tanto A como B. Ejemplos: ab, aabb, aaabbb, a(100)b(100), a(un millón)b(un millón), etc.

s --> [a] , [b] ; [a] , s , [b].

Ahora lo que voy a querer es que "a" aparezca el doble de veces que "b", es decir A(n),B(n:2) -donde n siempre tiene que ser par-.

s--> [a] , [a] , [b] ; aab.
aab --> [a] , [a] , [b] ; [a] , [a] , [b] , aab.

Ahora lo que voy a querer es que "a" aparezca únicamente una vez al principio de la oración y una única vez al final de la oración, con "b" (n) cantidad de veces (en el medio, obviamente). Es decir, AB(n)A. Bastante fácil.

s --> [a] , b , [a].
b --> [b] ; [b] , b.


Ejercitación

  1. Mis mejores alumnos estudian muchísimo.
  2. Los viejos problemas inflacionarios debilitaron la economía nacional.
  3. Estos problemas de la Argentina destruyeron su economía.
  4. Los políticos siempre mienten sobre la situación económica.
  5. Los chicos no mienten.
  6. Los saiyajines mienten los enemigos de su planeta. ❌
  7. Aquellos profesores de los alumnos nacieron la economía. ❌
  8. Esos super saiyajines no combaten tristes.
  9. Aquellos super saiyajines combaten muy contentos.
  10. Los alumnos más inteligentes usan prolog con asombrosa facilidad.

Haz click aquí para conocer la solución:

s → sn, sv.
sn → (det ; []), (sa ; []), n, (sp ; []), (sa ; []).
det → [mis]; [los]; [estos]; [la]; [muy]; [aquellos]; [esos]; [su].
sa → (sadv ; []), a.
a → [mejores]; [inflacionarios]; [economica]; [asombrosa]; [inteligentes]; [super]; [tristes]; [contentos]; [viejos]; [nacional].
n → [alumnos]; [problemas]; [argentina]; [economia]; [chicos]; [profesores]; [saiyajines]; [prolog]; [facilidad].
sv → (sadv ; []), vi, (sp ; []), (sadv ; []), (sa ; []); (sadv ; []), vt, sn, (sp ; []), (sadv ; []).
vi → [mienten]; [combaten]; [estudian]; [nacieron].
vt → [debilitaron]; [destruyeron]; [usan].
sp → p, sn.
p → [con]; [de].
sadv → [muchisimo]; [no]; [muy]; [mas].


Comentarios

  1. https://docs.google.com/document/d/1UpxX0fdv3RXrSKZ5lv98c8Kx_krKDcu-VwEmfrGX59o/edit?usp=sharing

    ResponderBorrar
  2. https://www.bbc.com/mundo/noticias/2016/01/160106_monolinguismo_analfabetismo_siglo_xxi_ch

    ResponderBorrar
  3. Pensamiento computacional

    https://www.youtube.com/playlist?list=PLRdNlTa2lFzAoXg8_sYeSreEaT30zWJtB

    ResponderBorrar

Publicar un comentario