Professional Documents
Culture Documents
CONCEPTOS GENERALES
• La IA es el estudio de como hacer que los ordenadores hagan cosas que, por
momento, los seres humanos hacemos mejor. Elaine Rich
El ser humano se dice que es inteligente por que posee intuición, inspiración, capacidad de
organizar cadenas lógicas de pensamiento, sentimiento y expresión lingüística, tiene capacidades
de aprender, razona y deduce; es decir manipula los conocimientos e información que posee,
aplicando una serie de reglas y experiencias (formales o intuitivas) para la solución de
problemas.
• Percepción.
• Asociación.
• Memoria
• Imaginación o Creatividad.
• Razonamiento
• Conciencia.
Frente a estos razonamientos negativos, los especialistas que creen en la legitimidad de la IA.
afirman que en la actualidad se ha demostrado que ello no es verdadero debido al uso de la
computadora, la cual es capaz de operar simulando la inteligencia del ser humano, realizando
con gran rapidez y precisión alguna de sus actividades, con lo cual se percibe el desarrollo de la
inteligencia artificial.
Una máquina puede considerarse como inteligente cuando cumple los siguientes requisitos:
De todas las actividades que hacen al ser humano inteligente, los investigadores en IA. centran
sus estudios en tres campos.
Comunicación y Percepción
Razonamiento Simbólico
Ingeniería del Conocimiento.
Comunicación y Percepción.
Desde los inicios de la IA. se intento construir un sistema de traducción automática mediante la
utilización del ordenador, es decir los programas que entienden el lenguaje humano, se ha
convertido en uno de los grandes retos de la informática. Lográndose una fuerte relación entre la
IA. y la lingüística. Así mismo el procesamiento y reconocimiento de imágenes es otro gran
campo de acción.
Razonamiento Simbólico
En la informática tradicional los ordenadores trabajan con programas en los cuales los datos
acceden directamente al ordenador, pero las decisiones de como procesar dichos datos están
impresas en el lenguaje del programa y almacenadas en memoria durante el proceso de
ejecución; (Ejm. Gestión Cuenta Corriente Banco, que recibe todos los días diferentes datos,
pero la forma de que se procesan es invariablemente la misma). La IA. intenta integrar el
conocimiento en el sistema, es decir un sistema inteligente que escribe su propio programa.
Los sistemas de IA. se basan en reglas heurísticas, en contraste con los programas de calculo
numéricos, basado en el uso de algoritmos. la heurística hace hincapié, dentro del programa, en
los aspectos del problema que parecen más críticos y en las partes de la base de conocimientos
que parecen mas relevantes y guía al programa en los casos particulares desechando ciertos
caminos y centrándose en otros. El resultado es que el programa sigue una línea de
razonamiento en vez de seguir una secuencia de pasos fijos en el cálculo.
Cuando los hombres se comunican entre sí por medio del lenguaje, emplean casi sin
esfuerzo, procesos extremadamente complejos. Es muy difícil desarrollar sistemas
informáticos capaces de generar y entender simples fragmentos del lenguaje natural. El
lenguaje también incluye un proceso asociado de estructura mental de un cerebro hacia otro,
que se complementan con gestos inteligentes.
Los sistemas de BD. permiten almacenar gran cantidad de hechos relativos a una materia
determinada, de tal forma que los usuarios puedan encontrar en ella, información a sus
preguntas o requerimientos.
El sistema debería saber que el Director de un Dpto. es el jefe de todas las personas
que trabajan en él.
Sistemas Expertos.
Los métodos de la IA. han sido empleados también en el desarrollo de sistemas expertos, los
cuales proporcionan a los usuarios conclusiones técnicas sobre materias especializadas..
Demostración de Teoremas
Robótica.
Programación Automática.
Muchos sistemas de programación producen una verificación del programa producido, como
un beneficio adicional. Una de las contribuciones importantes de la programación
automática ha sido la noción de depuración, como una estrategia de resolución de problemas.
Problemas de Percepción.
Se han hecho dotar a los robots o ordenadores con cámaras de televisión para permitirles
“Ver” sus alrededores o con micrófonos para permitirles “oír” el habla humana.
Son la solución a problemas de la vida diaria del ser humano, denominados de sentido
común, el cual incluye el razonamiento sobre objetos físicos y sus relaciones
Además de las tareas de la vida diaria, mucha gente puede también realizar tareas más
especializadas, en los cuales es necesario una cuidadosa adquisición de experiencia y
aplicación de un método científico.
Uno de los más rápidos y sólidos resultados que surgieron en las investigaciones de la IA. fue
que la inteligencia necesita conocimiento, el cual tiene algunas propiedades poco deseables
como:
• Es voluminoso
• Es difícil de caracterizarlo con exactitud
• Cambia constantemente.
• Debe ser comprendido por las personas que lo proporcionan.- La mayor parte
del conocimiento que se suministra, es hecho por personas, haciéndolo
siempre en términos que ellos conocen.
• Reglas de Producción
• Estructuras lógicas y
• El cálculo de predicados.
Son las técnicas para obtener el conocimiento necesario para la creación de las Bases de
conocimiento y esta determinado por las fuentes de información que se obtienen de
documentación Bibliográfica, Revistas especializadas y el conocimiento del Experto Humano.
Clasificación.
La primera tarea para procesar conocimiento consiste en clasificar todos los objetos que van
a ser manipulados por el ordenador. La clasificación es la construcción de una relación “Uno
a Uno” entre los símbolos del procesamiento y los objetos o ideas externas. Esta clasificación
de conjuntos de objetos similares, se logra asociando un nombre que los identifique.
Relaciones.
Las relaciones definen las conexiones entre los objetos que ya hemos clasificado.
Procedimientos o Reglas.
Inicialmente los Sistemas Expertos, se definían como programas capaces de realizar las
tareas propias de un experto humano, en un dominio restringido.
La clave del éxito de los SE. es la constatación de que el conocimiento que utilizan la mayor
parte de los expertos, al realizar su trabajo, puede ser representado en forma de Reglas del
tipo:
“Si se cumple tal condición, entonces se puede concluir tal cosa o ejecutar tal acción”
Por lo cual se puede descomponer la tarea del experto en un conjunto adecuado de reglas,
que hacen referencia a determinados datos o hechos, y es posibl
Los procedimientos o Reglas crean nuevas ocurrencias de relaciones y clases a partir de las
que ya existen.
Estructuras de Control.
Son los métodos que trazan una línea de razonamiento a una pregunta dada. La solución
involucra la aplicación de reglas heurísticas a los datos, para así deducir consecuencias
lógicas probables y probar que esas consecuencias satisfacen la meta o objetivo. Las metas
corresponden a propuestas acerca de características de solución a una situación futura
deseada.
Heurística.
Se define a cualquier criterio, método o principio que sirve para decidir cual entre varios
cursos de acción alternativos, promete ser el más efectivo, con el fin de alcanzar alguna meta
en forma óptima.
Solución de Problemas.
Para que un problema pueda ser resuelto aplicando las técnicas de IA. Debe poseer las
siguientes características;
Inicialmente los Sistemas Expertos, se definían como programas capaces de realizar las
tareas propias de un experto humano, en un dominio restringido.
La clave del éxito de los SE. es la constatación de que el conocimiento que utilizan la mayor
parte de los expertos, al realizar su trabajo, puede ser representado en forma de Reglas del
tipo:
“Si se cumple tal condición, entonces se puede concluir tal cosa o ejecutar tal acción”
Por lo cual se puede descomponer la tarea del experto en un conjunto adecuado de reglas,
que hacen referencia a determinados datos o hechos, y es posible codificar dicho
conocimiento de forma manejable por un ordenador. Este conjunto de reglas y hechos
constituyen lo que se llama Base de Conocimientos.
El papel de las Reglas en la Mayor parte de los Sistemas Expertos hace que en algunos casos
se hable de sistemas basados en Reglas, pero adicionalmente, también se utilizan otras
técnicas para representar el conocimiento, como las “Redes Semánticas” o “Los Marcos”
que permiten una caracterización de los hechos como entidades u objetos con determinadas
propiedades y procedimientos asociados, así como establecer relaciones entre ellos y criterios
de “herencia” de determinadas propiedades.
Los expertos humanos, no sólo utilizan razonamientos basados en el tipo de reglas lógicas
mencionadas, también pueden incorporan otro tipo de técnicas más sofisticadas, como la
lógica difusa (fuzzy), el razonamiento hipotético, el razonamiento basado en modelos .... etc.
Por otra parte, no siempre el conocimiento que se puede utilizar forma parte de la experiencia
de un profesional, a menudo se encuentra distribuido en otras fuentes, como: documentos,
manuales, leyes, bases de datos,... etc. Incluso parte del conocimiento puede estar implícito
en el contexto de grandes masas de datos, cuyo tratamiento estadístico proporciona valores
para los parámetros utilizables por un SE.
Redes Neuronales
Una tecnología que está dando resultados sorprendentes son las Redes Neuronales, que son
modelos muy simplificados de las Redes de Neuronas que constituyen el Cerebro. este
proceso consiste en las funciones que realizan las neuronas, las cuales una vez que han sido
entrenadas, mediante ejemplos, son capaces de caracterizar o reconocer nuevas entidades
muy rápidamente, ya que se pueden comportar como dispositivos de procesamiento en
paralelo.
Todo lo anterior conduce a considerar, que mientras los sistemas tradicionales manejan
Datos, rápida y eficientemente, utilizando algoritmos completamente definidos, de carácter
repetitivo y que son reconocidos por el equipo que desarrolla el sistema. En el caso de los
SE. se maneja Conocimiento, es decir, como resolver un problema o realizar una tarea, que
habitualmente requiere estudio y experiencia por parte de un experto. Este conocimiento a
diferencia de algoritmos rígidos establecidos, se basa en estrategias o heurísticas,
descubiertas por el experto, después de un cierto tiempo de enfrentarse con la tarea.
Herramientas de Desarrollo
Además de los dos lenguajes de programación ya clásicos de la IA., Prolog y Lisp, los profesionales de la
IC. disponen de un gran numero de entornos de desarrollo, que incorporan diversos métodos de
representación del conocimiento, distintos tipos de razonamiento y herramientas para la construcción de
interfaces con el usuario y con el entorno informático en que deba integrarse el SBC. Dentro de las
herramientas que existen en el mercado tenemos: ART, ADS, KGMS, TIRS, NEXPERT, EXSYS... etc.
de las cuales la mayoría generan código C y pueden ser utilizadas en la mayor parte de plataformas (DOS,
WINDOWS, OS/2 UNIX, ... etc.)
13. El Problema de Desarrollo
El problema fundamental para la consolidación de esta tecnología radica mas en aspectos estratégicos
relacionados con los hábitos de desarrollo, uso y explotación de aplicaciones. tal como ha evolucionado la
tecnología, en general no han sido los centros de proceso de datos (CPD.) de las empresas los que la han
promovido. Dada la complejidad de las técnicas de IA. y su procedencia de entornos académicos, los
primeros desarrollos fueron aplicaciones especificas aisladas del entorno informático global de la empresa
y muchas veces para departamentos tradicionalmente poco informatizados y con poca o ninguna
interacción con el CPD. Esto dio lugar a que los primeros ingenieros del conocimiento estuvieran
muchos mas dedicados a los aspectos más innovadores del SE. (Adquisición y Representación del
conocimiento) que a asegurar la implantación y explotación de los sistemas resultantes.
Esta situación inicial ha planteado dificultades para la consolidación de una metodología estandarizada y
que contemple todas y cada una de las fases que componen el ciclo de vida de un SE. Así, determinados
aspectos relacionados con los usuarios, como el desarrollo de interfaces automáticamente amigables y
ergonómicos o como el sesgo del sistema final hacia la "visión" del experto, a pesar de no ser el usuario
real, han sido relegados en algunos SE., lo que ha propiciado su fracaso. toda la problemática relacionada
con los distintos responsables que deben tomar decisiones respecto a múltiples temas, como los recursos
necesarios, el impacto previsto sobre el trabajo habitual de los departamentos implicados, o la integración
del SE. en el entorno informático general de la empresa, también ha malogrado un buen numero de
sistemas.
Bases de Conocimiento
Es una colección de hechos y reglas que representan elementos del mundo real.
Un Sistema de Conocimientos (SBC) es un conjunto de recursos, máquinas, programas y
personas. Los SBC. son convencionales en cuatro aspectos:
• Los SBC. incluyen componentes que pueden hacer inferencias. de esta manera
proporcionan medios de recuperación de información deductiva.
Los SBC. podrían utilizarse como componentes de sistemas expertos. sin embargo, su empleo
no se limita a esto. Pueden emplearse como sistemas de bases de datos sofisticados o sistemas
de datos inteligentes (DBI) y también como sistemas de reconocimiento de patrones.
Muchas de las actividades que hasta ahora resultaban difícilmente mecanizables, pueden ser
ahora abordadas si se dispone de expertos calificados y dispuestos a colaborar o también si se
tiene acceso a determinadas fuentes de conocimiento. En general todas las empresas suelen
tener necesidad de preservar el conocimiento de sus profesionales; también necesitan que ese
conocimiento, sea accesible para otros empleados no tan calificados, pero que pueden seguir
las instrucciones del experto (establecidas en el SBC.) para realizar una determinada tarea.
En este sentido, es importante resaltar la gran utilidad de los SBC. para efectuar las tareas
más rutinarias desempeñadas por el experto; dejando a este que se concentre, en los aspectos
más creativos e inteligentes de su trabajo.
Además se necesitan nuevas herramientas informáticas más potentes para hacer frente a los
nuevos enfoques de Organización y Gestión Empresarial. Así como para afrontar los retos de
productividad, flexibilidad, financiación y adaptación a la evolución de los mercados, que están
caracterizando a las economías actuales. Los SBC. pueden resultar una importante ayuda en las
tareas de gestión: Sistemas de Análisis Financiero y de apoyo a la toma de decisiones, Gestión
de personal y recursos, Simulación Inteligente de Empresas y Mercados,... etc.
También en las labores de Producción: Sistemas de Diseño de Planificación y control de
Procesos y Calidad, Gestión de Stocks y Almacenes, etc..
Otro gran bloque de necesidad se relaciona con el control Inteligente de equipos o procesos
automatizados, tanto para su optimización de trabajo o producción, como para la monitorización
y detección de contingencias, e incluso su reparación.
Representación Procedimental.
Autómatas finitos, programas que expresan explícitamente las interrelaciones entre fragmentos
de conocimiento, para que sean difícilmente modificables (Reglas y Estructuras de control).
Permiten una facilidad de utilización del metaconocimiento, lo que permite descomponer,
explícitamente, el problema.
Representación Declarativa.
Cálculo de Predicados, Reglas de Producción, y Redes Semánticas, que crean fragmentos del
conocimiento interdependientes unos de otros y que por consiguiente, son fácilmente
modificables. Estos conocimientos se combinan, después, mediante un mecanismo general de
razonamiento y deducción (Clases y Relaciones).
Representación Mixta.
Objetos Estructurados, Marcos, Grafismos, Objetos; que emplea los dos modelos de
representación precedentes.
Para resolver los complejos problemas con los que se enfrenta la IA., es necesario disponer de una gran
cantidad de conocimiento, así como una serie de mecanismos que permitan manipularlo con el fin de
obtener soluciones a nuevos problemas.
Programas
que razonan
Hechos Representaciones
Internas
Comprensión Generación
del lenguaje del lenguaje
Representaciones
en lenguaje natural
Los sistemas convencionales solucionan los problemas mediante el uso de algoritmos o procesos
repetitivos fijos, que fueron programados con anterioridad y que esperan siempre el mismo tipo
de datos a la entrada, para procesarlos y generar la respuesta.
Sin embargo cualquiera que sea su naturaleza, el conocimiento puede representarse usualmente
en términos de hechos relativos al mundo.
Una ventaja obvia de la clasificación es que facilita la memorización, pues solo necesitamos
conocer las características de una Clase en vez de tener que conocer cada objeto en forma
individual.
Regla: informa (C, A) es verdad Si bien supervisa (A, C) es verdad o supervisa (A, B) y
supervisa (B, C) son verdad
Para ello se necesita una regla más potente que contenga recursión:
Regla: informa (C, A) es verdad si bien supervisa (A, C) es verdad o supervisa (A, B) es
verdad y informa (C, B) es verdad
Si hacemos la pregunta:
Ejercicio
En un destacamento militar, El General, solicita diariamente al Mayor, los reportes de las acciones
llevadas a cabo, él Teniente y personal de tropa, son los encargados de las operaciones.
CAPITULO 2
1. Lógica Formal
El primer lógico conocido fue Aristóteles (380-392 A.C.) quien desarrolla muchas de las tesis
que hoy se conocen como lógica silogística o lógica clásica. Esencialmente trata de obtener la
verdad o falsedad a partir de un argumento filosófico. Aristóteles fue uno de los primeros que
intento codificar, “La Manera correcta de Pensar”, es decir procesos de pensamiento que son
irrefutables. Sus famosos silogismos son esquemas de argumentación mediante las cuales
siempre se llega a conclusiones correctas si se parte de premisas correctas. Dichas leyes del
pensamiento deberían gobernar la manera de operar de la mente.
2. Lógica Proposicional
La lógica simbólica empezó con G.W. Leibnitz y fue redescubierta por George Boole; Trata de
la abstracción de conceptos en símbolos y conexiones de estos símbolos por medio del uso de
ciertos operadores.
• La lógica proposicional
• El calculo de predicados.
3. Operadores Lógicos
La lógica proposicional trata de la determinación de la verdad o falsedad de varias
proposiciones. Una proposición es una sentencia correctamente formada que es verdadera o
falsa. La lógica proposicional es la forma más sencilla de la lógica simbólica. Parte del uso de
proposiciones o enunciados, los cuales pueden interrelacionarse a través de conectores u
operadores lógicos, de forma que de proposiciones simples construyamos proposiciones
compuestas.
Negación (Not).
Implicación →
Doble implicación
4. Cálculo Proposicional
Se pueden crear operaciones complejas usando estos operadores.
A ∧B ∨ C ∧∼ D
( A ∧B ) ∨ ( C ∧∼ D )
Cada una de las posibles combinaciones de valores de las proposiciones se pueden reflejar en
una tabla de verdad.
Sea G una formula con A1,A2,A3,...,An proposiciones automáticas que ocurren en G, entonces
una interpretación de G es una asignación de valores de verdad a A1, A2,...,An
en donde cada Ai ( i = 1,2,...,n) tiene un valor de verdadero o falso, pero no ambos.
Por lo tanto una formula G se dice que es valida o tautológica si y solo si es verdadera bajo las
interpretaciones de G, de lo contrario, es falsa. G se dice es inconsistente o contradictoria si y
solo si es falsa bajo todas sus interpretaciones, de lo contrario es consistente.
5. Reglas proposicionales
Implicaciones asociadas
Para demostrar la validez de un argumento o fórmula en él calculo proposicional, podemos
utilizar la tabla de verdad, lo cual en algunos casos resulta ser muy extensa, cuando los
argumentos constan de muchas proposiciones, por lo que existen otros métodos que se conocen
como directos o indirectos. Los primeros desarrollan una cadena de proposiciones tal que cada
una se deduce de su predecesora, y así logran pasar de las premisas hasta la conclusión. Los
métodos indirectos proceden demostrando que se produce una contradicción en la combinación
de las premisas con la negación de la conclusión.
6. Razonamiento deductivo
Estos métodos, para demostrar la validez de un argumento, utilizan las reglas de Inferencia.
Estas permiten convertir la información provista por las premisas, en nuevas premisas que
muestren que la conclusión fluye lógicamente de estas.
Un procedimiento de prueba de la validez de un argumento combina las reglas de inferencias en
forma algoritmica, de tal forma que se puedan generar nuevas oraciones aplicando la inferencia
lógica. Entre las principales reglas de inferencia para las proposiciones tenemos:
Modus Ponens
Modus Tollens
Argumento Cadena
Reducción por lo absurdo
Dilemas
7. Cálculo de Predicados
Los hechos constituyen una relación única, escrita a la izquierda del paréntesis y de algunos
objetos, que están relacionados dentro del paréntesis, tales estructuras conforman las sentencias
básicas del calculo de predicados.
Dentro del calculo de predicados, a los nombres de la relación se le denominan Predicados, los
objetos Argumentos y las estructuras del calculo Proposiciones.
Un Objeto puede ser expresado, como una Constante, indicando un individuo o una clase
determinada, o como una Variable que indica, que el individuo o su clase están sin especificar.
La mayor ventaja que ofrece él calculo de predicados sobre la lógica proposicional es el uso de
variables. El calculo de predicados usa variables para generalizar predicados.
Ejercicio:
Antonio es un científico en computadoras que trabaja para IBM. como supervisor. Juan y Pedro
son programadores que supervisa Antonio, y Juan tiene una responsabilidad adicional con la
documentación técnica, establezca las relaciones respectivas
Solución:
es_un (Antonio, cientifico_en_computadora),
trabaja (Antonio, IBM, supervisor),
programador (Juan) ^ documentador_técnico (Juan),
programador (Pedro),
supervisa (antonio, Juan) ^ supervisa (antonio, Pedro).
9. Inferencia Lógica
Consecuencia lógica.
Un lenguaje como el cálculo de predicados, está definido por su sintaxis. El aspecto más
atractivo de este formalismo lógico es que proporciona de manera inmediata un método muy
potente para la obtención de nuevo conocimiento a partir del antiguo. Las expresiones licitas del
cálculo de predicados reciben el nombre de “fórmulas bien formadas (fbf)”.
Los componentes elementales del cálculo de predicados son: Los símbolos de predicados,
símbolos de variables, símbolos de funciones, símbolos de constantes, aparte de los paréntesis,
corchetes y comas.
Un símbolo de predicado se usa para representar una relación en un dominio del discurso.
Por ejemplo al representar el hecho de que alguien escribió algo. Podemos utilizar el predicado
ESCRIBIO para denotar la relación entre la persona que escribió algo y la cosa escrita por él.
En esta fórmula atómica, Voltaire y Cándido son símbolos de constantes o términos, que se usan
para representar objetos o entes en un dominio del discurso.
Los símbolos de Variables, tales como X o Y, son también términos que nos permiten ser
indefinidos respecto al ente al que se refieren. escribió (X, Y)
Los símbolos de función, nos permiten denotar funciones en el dominio del discurso.
Por ejemplo, para expresar la sentencia: La madre de Juan está casada con el padre de Juan,
podemos usar la siguiente expresión: casados [ padre(Juan), madre(Juan) ].
En el cálculo de predicados, a una fbf, puede dársele una interpretación, asignando una
correspondencia entre los elementos del lenguaje y las relaciones, entes y funciones del
dominio del discurso. A cada símbolo de predicado le podemos asignar una relación
correspondiente en el dominio; a cada símbolo de constante, un ente del dominio; a cada
símbolo de función, una función del dominio. Estas asignaciones definen la semántica del
lenguaje del cálculo de predicados.
Una vez que ha sido definida una interpretación para las fórmulas atómicas, diremos que está
tiene el valor V(verdadero), si y sólo si la sentencia correspondiente sobre el dominio es
verdadera, y que tiene el valor F(falso) si y sólo si la sentencia correspondiente es falsa.
13. Juntores
Las fórmulas atómicas pueden combinarse, para formar fórmulas más complejas, que permiten
representar sentencias compuestas, tales como: “A Juan le gusta María y a Juan le gusta
Carmen”. Pero también algunas sentencias simples se pueden escribir en forma compuesta:
“Juan vive en una casa color amarillo”.
vive(Juan, casa1) ∧ color (casa1, amarillo)
Los valores de las conjunciones y disyunciones, vienen determinados por sus componentes. Una
conjunción tiene un valor Verdadero si cada una de las fórmulas unidas por el juntor (∧) tiene el
valor V; en caso contrario, tiene el valor F. Una disyunción tiene el valor V si una, al menos, de
las fórmulas unidas por el juntor (∨) tiene el valor V; en caso contrario, tiene el valor F. El
otro juntor, ⇒ , se usa para representar las sentencias “Si- entonces”, que recibe el nombre de
una implicación. La fórmula de la izquierda de la implicación se llama antecedente y la de la
derecha, consecuente.
-Una implicación tiene el valor V si o bien el consecuente tiene el valor V (cualquiera que sea el
valor del antecedente), o bien el antecedente tiene el valor F (cualquiera que sea el valor del
consecuente); en otro caso, la implicación tiene el valor F.
Por ejemplo, la sentencia (verdadera) “Voltaire no escribió Hamlet”, puede representarse como:
∼ escribió (Voltaire, Hamlet)
Es fácil determinar que ∼ F1 ∨ F2 tiene los mismos valores de verdad que F1 ⇒ F2, por lo
cual puede ser reemplazado. aunque heurísticamente se prefiere el símbolo de implicación.
14. Cuantificación
A veces, una fórmula atómica, tal como P(X), tiene el valor V (para una interpretación dada de
P), sin importar la asignación que se haga para la variable X. Otras veces, esa fórmula atómica
tiene el valor V para una asignación al menos de la variable X.
Cuantificadores Universales
En el cálculo de predicados se utilizan estás propiedades para establecer los valores de verdad de
fórmulas que contienen lo que se llaman Cuantores o Cuantificadores. Una fórmula que
consiste en el cuantor universal (∀ X) precediendo a una fórmula P(X), tiene el valor V para
una interpretación si y sólo si el valor de P(X) bajo esa interpretación es V para todas las
asignaciones de X a los entes en el dominio.
Una fórmula que consiste en el cuantor existencial (∃ X) precediendo a la fórmula P(X), tiene
el valor V para una interpretación si y sólo si el valor de P(X) bajo esa interpretación es V al
menos para una asignación de X a un ente en el dominio.
La sentencia: “Hay una persona que escribió Hamlet” puede representarse como:
Notaremos que si en una fbf aparecen cuantores, no siempre es posible usar las reglas para las
semánticas de los cuantores, para determinar los valores de verdad de la fbf. Por ejemplo, si
consideramos la fbf: ( ∀X)P(X). Dada una interpretación para P y un dominio infinito de entes,
tendríamos que comprobar si la relación correspondiente a P se cumple para cada asignación
posible de X a un ente en el dominio, para poder concluir que la fbf tiene el valor V. Tal
proceso no acabaría nunca.
La versión del calculo de predicados que utilizaremos se llama de primer orden, porque no
permite la cuantificación sobre símbolos de funciones. Así, fórmulas tales como (∀P)P(A), no
son fbf en él calculo de predicados de primer orden.
Usando las reglas semánticas, se puede construir fbf arbitrariamente complejas, tales como:
En estas expresiones se han utilizado paréntesis, corchetes y llaves, como delimitadores para
agrupar las fbf. componentes.
Los valores de verdad de las fbf pueden determinarse mediante las reglas que se han descrito.
Cuando los valores de verdad se determinan, se están haciendo uso del llamado método de la
tabla de verdad.
P Q P ∨Q P ∧Q P ⇒ Q ∼ P
V V V V V F
F V V F V V
V F V F F F
F F F F V V
16. Leyes Lógicas
Si los valores de verdad de dos fbf son los mismos cualesquiera que sea su interpretación, se
dice que estas fbf son equivalentes. Usando las tablas de verdad, se pueden establecer las
equivalencias siguientes:
∼ ( ∼ P) es equivalente a P
P ∨Q es equivalente a ∼ P ⇒ Q
La ley de contraposición:
P ⇒ Q es equivalente a ∼ Q⇒ ∼ P
A partir de los significados de los cuantores, se puede establecer también las equivalencias
siguientes:
Ejercicio:
Cada Ciudad tiene un policía que ha sido mordido por todos los perros de la Ciudad.
(∀x) { ciudad(x) ⇒ (∃ y) {policía (x, y) ∧(∀z) { [perro(z) ∧vive_en(x, z)] ⇒ mordido (y, z)}}}
Ejercicio:
Para cada conjunto x, hay un conjunto y tal que el cardinal de y es mayor que el cardinal de x.
(∀x) { conjunto(x) ⇒ (∃ y)(∃ u)(∃ v) [conjunto(y) ∧ cardinal(x, u) ∧ cardinal(y, v) ∧ mayor (u,
v) ] }
Ejercicio.
Todos los bloques que están encima de bloques que han sido movidos o que están unidos a
bloques que han sido movidos, también han sido movidos.
(∀x)(∀y) { {bloque(x) ∧bloque (y) ∧[ encima(x, y) ∨unido(x, y) ] ∧movido(y) } ⇒ movido(x)
}.
Ejercicio:
Considere las sentencias siguientes y logre su representación a través de la lógica de predicado:
1. Marco era un hombre
2. Marco era un pompeyano.
3. Todos los pompeyanos eran romanos
4. Cesar fue un gobernante.
5. Todos los romanos o eran leales a Cesar o le odiaban.
6. Todo el mundo es leal a alguien.
7. La gente sólo intenta asesinar a los gobernantes a los que no es leal.
8. Marco intento asesinar a Cesar.
Los hechos descritos en las frases anteriores se pueden representar como un conjunto de fbf. de
la lógica de predicados de la siguiente manera:
1. Marco era un hombre
hombre (Marco)
2. Marco era pompeyano
pompeyano(Marco)
3. Todos los pompeyanos eran romanos
∀x: pompeyano(x) ⇒ romano(x)
4. Cesar fue un gobernante
gobernante(Cesar)
5. Todos los romanos o eran leales a Cesar o le odiaban.
∀x: romano(x) ⇒ leal(x, Cesar) ∨odia(x, Cesar).
6. Todo el mundo es leal a alguien
∀x: ∃ y : leal (x, y).
7. La gente sólo intenta asesinar a los gobernantes a los que no es leal.
∀x: ∀y: persona(x) ∧gobernante(y) ∧intenta_asesinar(x, y) ⇒ ∼ leal(x, y).
8. Marco intento asesinar a Cesar
intenta_asesinar(Marco, Cesar).
Ahora supongamos que se desea utilizar los anteriores aciertos para responder a la siguiente
pregunta:
Utilizando 7 y 8 se puede demostrar que Marco no era leal a Cesar, intentando obtener una
prueba formal de razonamiento a la inversa desde el objetivo a alcanzar.
Para probar este objetivo, es necesario utilizar las reglas de inferencia que permiten
transformarlo en otro objetivo (o posiblemente conjunto de objetivos) que a su vez pueden ser
transformados, y así sucesivamente, hasta que no quede ningún objetivo por satisfacer.
El intento falla, ya que no se puede satisfacer el objetivo persona(Marco) con los aciertos
disponibles. El problema es que, a pesar de que se sabe que Marco era un hombre, no se puede
deducir que era una persona. Se debe añadir la representación de otro hecho al sistema:
Al instanciar una variable, queremos conocer el mínimo número de sustituciones que deben
realizarse para preservar el valor de verdad del sistema. Después de aplicar todo este
procedimiento a un conjunto de fbf, tendremos un conjunto de cláusulas, cada una de las
cuales será una disyunción de literales. Estas cláusulas serán las que utilice el procedimiento
de resolución para generar demostraciones.
Supongamos que todos los romanos que conocen a Marcos o bien odian a César o bien
piensan que cualquiera que odie a otro está loco. Esta sentencia se puede representar con la
siguiente fbf:
Paso 1.
Eliminar las implicaciones, →, usando el hecho de que a → b es equivalente a: ∼ a ∨ b.
Realizando esta transformación en la fbf. anterior tenemos:
Paso 2.
Reducir el ámbito de las negaciones, ∼ , a un único término, usando el hecho de que ∼ (∼ p)
= p, las leyes de Morgan, según las cuales:
∼ (a ∧b) = ∼ a ∨∼ b
∼ (a ∨ b) = ∼ a ∧∼ b
Paso 3.
Normalizar las variables de forma que cada cuantificador este ligado a una única variable.
puesto que las variables son sólo nombres sin un valor concreto, este proceso no puede
afectar al valor de verdad de la fbf. Por ejemplo la formula:
Paso 4.
Mover todos los cuantificadores a la izquierda de la fórmula sin cambiar su orden relativo.
Esto es posible gracias a que no existe ningún conflicto entre los nombres de las variables.
Realizando esta operación sobre la fórmula del paso 2, se obtiene:
Esta fórmula es lo que se conoce como fórmula normal prenex, consiste en un prefijo de
cuantificadores seguido por una matriz que esta libre de cuantificadores.
Paso 5.
Eliminar los Cuantificadores Existenciales.- En una fórmula donde se incluye una variable
cuantificada existencialmente se afirma que existe un valor que puede sustituir a la variable,
y que hace verdadera la fórmula. Es posible eliminar el cuantificador sustituyendo la variable
por una referencia a una función que produzca el valor deseado. Puesto que no se conoce
necesariamente la forma de producir ese valor, se debe crear un nuevo nombre de función
para cada sustitución. No se hace ninguna afirmación sobre esas funciones excepto de que
deben existir.
∃ y: Alcalde (y)
Puede transformarse en la fórmula:
Alcalde (S1)
Donde, S1 es una función sin argumentos que produce de algún modo un valor que satisface
el predicado Alcalde.
Si surgen cuantificadores existenciales dentro del ámbito de cuantificadores universales, los
valores que satisfagan el predicado pueden depender de los valores de las variables
cuantificadas universalmente, Por ejemplo en la fórmula.
∀x: ∃ y: padre_de(y, x)
El valor de y que satisface padre_de depende del valor concreto de x. Por lo tanto, se deben
generar funciones con el mismo número de argumentos que el número de cuantificadores
universales que afecten la expresión que sé esta tratando. En el ejemplo anterior se transformará
en:
∀x: padre_de(S2(x), x)
Estas funciones que generamos se llaman funciones de skolem. Aquellas que no tienen
argumentos se llaman a veces constantes de skolem.
Paso 6.
Eliminar el Prefijo.- En este punto, todas las variables que quedan están cuantificadas
universalmente, por lo que el prefijo puede ser simplemente ignorado, y cualquier
procedimiento de demostración que usemos puede suponer simplemente que cualquier
variable con la que se encuentre, está cuantificada universalmente. Ahora la fórmula
producida en el paso 4 aparece como:
Paso 7.
Convertir la Matriz en una Conjunción de Disyunciones.- Como en este ejemplo no aparece
ninguna correctiva Y, basta con utilizar la propiedad asociativa de la conectiva lógica O, es
decir, la operación: [ a ∨ (b ∨ c) = (a ∨ b) ∨ c ] y quitar simplemente los paréntesis, para
obtener:
∼ romano(x) ∨∼ conoce(x, Marco) ∨
odia(x, César) ∨∼ odia(y, z) ∨cree_loco(x, y)
Sin embargo, con frecuencia es también necesario utilizar la propiedad distributiva [ (a ∧b) ∨
c = (a ∨c) ∧(b ∨c) ].
Por ejemplo, la fórmula:
(invierno ∧usar_botas) ∨(verano ∧usar_sandalias)
Después de una segunda aplicación, que es necesaria, por que aún quedan conjunciones
unidas por la conectiva O, en:
(invierno ∨verano) ∧
(invierno ∨usar_sandalias) ∧
(usar_botas ∨verano) ∧
(usar_botas ∨usar_sandalias).
Paso 8.
Crear una cláusula por cada conjunción. Para que una fbf. Sea cierta, todas las cláusulas que
se han generado a partir de ella deben ser ciertas. Cuando se trabaja con varias fbf, es posible
combinar el conjunto de cláusulas generadas por cada una de ellas para representar los
mismos hechos que representaban las fórmulas originales.
Paso 9.
Normalizar las variables que aparecen en el conjunto de cláusulas generadas en el paso 8.
Con esto se pretende que no haya dos cláusulas que hagan referencia a la misma variable,
para lo cual es necesario renombrar a las variables adecuadamente.
Por lo que cada cláusula es una conjunción separada y todas las variables están cuantificadas
universalmente, no es necesario que haya ninguna relación entre las variables de dos
cláusulas diferentes, ni aunque se hayan generado a partir de la misma fbf.
21. Método de Resolución
Procedimiento de Resolución
El procedimiento de resolución es uno de los más utilizados, para una representación
deductiva, se basa en que utiliza una prueba por contradicción o refutación. Es decir, para
probar una proposición (demostrar su validez), se intenta demostrar que su negación lleva a
una contradicción con las proposiciones conocidas (es decir no se puede satisfacer).
Cláusula
Una cláusula se define como una fbf. consistente en una disyunción de literales, el proceso de
resolución, cuando es aplicable, se puede aplicar a un par de cláusulas padres, para producir
una cláusula derivada.
Esto significa que ambas cláusulas deben ser ciertas (es decir, aunque las cláusulas parecen
independientes, en realidad están agrupadas). Ahora vemos que siempre deberá ser cierta
una de las ellas, invierno o ∼ invierno. Sí invierno es cierto, entonces frío debe ser cierto
para garantizar la verdad de la segunda cláusula. Sí ∼ invierno es verdad, entonces verano
debe ser cierto para garantizar la verdad de la primera cláusula.
A partir de estas dos cláusulas se puede deducir: verano ∨ frío Esta es la deducción que hará
el procedimiento de resolución.
La resolución opera tomando dos cláusulas tales que cada una contenga el mismo literal ( en
el ejemplo: invierno). El literal debe estar en forma positiva en una cláusula y en forma
negativa en la otra. El Resolvente se obtiene combinando todos los literales de las dos
cláusulas padres excepto aquellos que se cancelan. Sí la cláusula producida es la cláusula
vacía, es que se ha encontrado una contradicción. Por ejemplo las dos cláusulas:
invierno
∼ invierno
producirán la cláusula vacía. Si existe una contradicción, se encontrará en algún momento.
Naturalmente, si no existe ninguna contradicción, es posible que el procedimiento nunca
termine, aunque como veremos, a menudo existen formas de detectar que no existe
contradicción.
24. Unificación
El par Ti/Vi significa que el término Ti sustituye a la variable Vi en todos los sitios donde
aparece. Se debe tener en cuenta que una sustitución debe ser tal que todas las ocurrencias de
una variable sean sustituidas por el mismo término. Además ninguna variable puede ser
reemplazada por un término que contenga esa misma variable.
Para representar una particularización por sustitución de una expresión E1, usando una
sustitución S1, escribiremos ES.
P [ z, f (w), B ] = P [ x, f (y), B ] S1
{g(x, y)/z} {A/x, B/y, C/w, D/z} = {g(A, B)/z, A/x, B/y, C/w}
Las sustituciones no son, en general conmutativas, esto es, generalmente S1S2 no es lo mismo
que S2S1.
Si aplicamos una sustitución S a cada uno de los miembros de un conjunto {Ei} de expresiones,
el conjunto de particularizaciones por sustitución lo designaremos con {Ei}S. Por lo que un
conjunto {Ei} de expresiones es unificable, si existe una sustitución S tal que:
En este caso, se dice que S es un unificador de {Ei}, ya que su aplicación convierte el conjunto
{Ei} en otro con un solo elemento. Por ejemplo. S = { A/x, B/y } aplicado a:
Por ejemplo: hombre (Juan) y ∼ hombre (Juan) es una contradicción, mientras que
hombre(Juan) y ∼ hombre(Spot) no lo es. Así para detectar las contradicciones, se necesita un
procedimiento de emparejamiento que compare dos literales y descubra si existe un conjunto de
sustituciones que los haga idénticos.
Reglas de emparejamiento
Las reglas de emparejamiento son sencillas:
P(x, y)
P(y, z)
Las dos ocurrencias de P se emparejan sin problema. A continuación comparamos: X e Y luego
decidimos que si sustituimos Y por X, se pueden emparejar, Escribiremos esta sustitución como.
Y/X Naturalmente, se podría haber sustituido X por Y, puesto que ambos son nombres de
variables sin más significado. El algoritmo simplemente elegirá una de las dos sustituciones.
Pero ahora si continuamos y emparejamos y comparamos X con Z, obtendremos la sustitución
de Z/X. Pero no es posible sustituir, a la vez, Y y Z por X, por lo que la sustitución no es
consistente.
Una vez encontrada la primera sustitución Y/X es necesario realizar dicha sustitución en el resto
de las literales, para obtener:
P(X, Y)
P(Y, Z)
(Z/Y)(Y/X)
odia(x, y)
odia(Marco, César)
Las dos primeras son equivalentes, excepto por la diferencia léxica. Pero las dos segundas,
aunque producen un emparejamiento, producen también una sustitución que es más restrictiva
de lo que sería estrictamente necesario para el emparejamiento. Puesto que la sustitución final
producida por el proceso de unificación será usada por el procedimiento de resolución, sería
conveniente generar el unificador más general posible.
Así podemos describir un procedimiento llamado unificar (L1,L2), que devuelve una lista que
representa la composición de las sustituciones que se han realizado en el proceso de
emparejamiento. La lista vacía, NUL, indica que se ha encontrado un emparejamiento sin
ninguna sustitución. El valor FALLO indica que el procedimiento de unificación ha concluido
sin éxito.
La única parte de este algoritmo que aún no se ha discutido es la comprobación, en los pasos
1(b) y 1(c), de que no se unifica una expresión que contiene una variable dada con esa misma
variable.
f ( x, y)
f (g(x), g(x))
Sí se aceptase la sustitución de g(x) por x, entonces se debería realizar esa misma sustitución en
el resto de las expresiones. Pero esto conduciría a una recursión infinita, puesto que nunca será
posible eliminar x.
El proceso de unificación tiene unas profundas raíces matemáticas y es de utilidad en muchos
programas de IA., como por ejemplo en los demostradores de teoremas y en los analizadores del
lenguaje natural. Es por ello que se han desarrollado algoritmos y estructuras de datos que
optimizan su eficiencia.
Una forma sencilla para determinar si dos literales son contradictorios, es determinar si uno
de ellos puede unificarse con la negación del otro. Así por ejemplo:
hombre(x) y ∼ hombre(x)
Estrategias de selección
Existen estrategias de selección que permiten acelerar el proceso considerablemente:
• Siempre que sea posible, resolver, con una de las cláusulas que forma parte de la
sentencia que estamos intentando refutar, o con una cláusula generada mediante una
resolución con dicha cláusula. Esta es la denominada estrategia de conjunto de apoyo,
y corresponde a la idea intuitiva de que la contradicción que estamos buscando debe
involucrar la sentencia que estamos intentando demostrar. Cualquier otra
contradicción sólo nos diría que eran inconsistentes las sentencias que previamente
creíamos verdaderas.
• Siempre que sea posible, resolver con cláusulas que contengan un único literal. Tales
soluciones generan nuevas cláusulas con menos literales que las más grandes de sus
cláusulas padres, por lo que probablemente estén más cerca de la meta de un
resolvente con cero términos. Este método se denomina estrategia de unidad
preferente.
∼ odia(Marco, César) 5
Marco/x
3 ∼ romano(Marco) v leal(Marco, César)
Marco/x
∼ pompeyano(Marco) v leal(Marco, César) 2
7 leal(Marco, César)
Marco/x4 , César/y1
1
∼ hombre(Marco)∨∼ gobernante(César) ∨
∼ intenta_asesinar(Marco, César)
∼ gobernante(César) ∨
∼ intenta_asesinar(Marco, César) 4
∼ intenta_asesinar(Marco, César) 8
Problemas principales
La parte de control del motor de inferencia ha de resolver dos problemas principales:
1.- Debe existir una manera de decidir por donde empezar. las reglas y los hechos
residen en una base de conocimiento estático. Tiene que haber una forma de
iniciar el proceso de razonamiento.
2.- El motor de inferencias debe resolver conflictos que aparecen cuando surgen
líneas de razonamiento alternativas. podría ocurrir, por ejemplo, que el sistema
llegase a una situación en que estuvieran dispuestas para varias reglas, el motor
de inferencias tiene que elegir cual de entre ellas aplica primero.
Los mecanismos de razonamiento que utilizan reglas de producción; son los de lógica formal:
Modus Ponens
Modus Tollens
A (A→ B) → B
(B (A → B)) → -A
Sin embargo cual fuere el modo de razonamiento utilizado, el ciclo de base de un motor de
inferencia comprende 4 fases:
1° Fase de Selección
De un subconjunto de la base de hechos y de la base de reglas, la elección es una expresión de
una estrategia que hace que el motor de inferencias privilegie un grupo de reglas y no otro.
2° Fase de Filtrado
Durante esta etapa el motor de inferencia compara la parte premisa de las reglas seleccionadas
con la base de hechos para determinar el conjunto de reglas aplicables.
Ejemplo: Si x e y son ambos mayores que cero, también lo es, el producto de x por y.
Una transcripción inmediata de esta sentencia al cálculo de predicados es:
Implicaciones generales
Gran parte del conocimiento utilizado por los sistemas de IA. Se pueden expresar
directamente mediante expresiones que son implicaciones generales:
Todas las personas del departamento de ventas mayores de 30 años son casados.
Los sistemas de deducción basados en reglas no convierten las fbf en cláusulas; las utilizan
en una forma parecida a la dada originalmente. Las fbf que representan conocimientos
afirmativos sobre el problema, se separan en dos categorías:
Reglas y Hechos
Las Reglas
Los Hechos
Una de las distintas estrategias de control que regulan el orden en que se ejecutan las
inferencias, es un sistema basado en reglas, con el encadenamiento hacia adelante, que "empieza
afirmando las conclusiones de todas las reglas cuyas cláusulas si son verdaderas", y luego
comprueba, que nuevas reglas pueden aplicarse dados los nuevos hechos establecidos, el
proceso continua hasta que se alcanza un objetivo o se agotan las posibilidades.
El razonamiento con un encadenamiento hacia adelante, puede describirse como un ciclo de
"reconocimiento-acción", donde primero se reconocen las reglas que pueden aplicarse, dado el
contenido de la memoria de trabajo, se seleccionan una de esas reglas y entonces se introduce en
la memoria de trabajo la acción o conclusión, luego el sistema, pasa al siguiente ciclo y vuelve a
comprobar que reglas son aplicables.
Es una de las estrategias de control para regular el orden en que se realizan las inferencias. en un
sistema basado en reglas, el encadenamiento hacia atrás lo "Inicia una regla objetivo", el
sistema trata de determinar si la regla o objetivo es correcto, para ello, retrocede a las cláusulas
de la parte Si de la regla e intenta determinar si son correctas, esto, a su vez, conduce al sistema
a considerar otras reglas que podrían confirmar las cláusulas Si; De esta manera el sistema va
retrocediendo a lo largo de sus reglas. Al final, la secuencia termina, cuando el sistema tiene
que hacer una pregunta o se encuentra un resultado previamente almacenado en memoria.
Encadenamiento Mixto.
hombre(MarcoAntonio)
hombre(César)
persona(Cleopatra)
∀x: hombre(x) → persona(x)
∃ y: persona(y)
Si se desea ligar “y” con un valor particular para el cual persona es verdadero. la BC.
justifica alguna de las siguientes respuestas:
y = Marco Antonio
y = César
y =- Cleopatra
Ya que existe más de un valor que satisface el predicado, y que sólo se necesita un valor, la
respuesta a la pregunta dependerá del orden en que se examinen las diferentes aserciones
durante la búsqueda de una respuesta.
Si consideramos a las aserciones como declarativas, éstas no dirán, por sí mismas, nada
acerca de cómo van a ser examinadas.
En el ejemplo, se puede especificar que las aserciones serán examinadas en el orden en que
aparecen y que la búsqueda se realizará primero en profundidad, lo cual quiere decir que si se
establece un nuevo subobjetivo, se convertirá en el objetivo prioritario inmediato, mientras
que otros caminos serán examinados si el nuevo objetivo falla. Al hacer esto, las aserciones
que se dieron en el ejemplo darán como respuesta:
y = Cleopatra
Si queremos determinar las diferencia entre las representaciones declarativas y
procedimentales, considérense las siguientes aserciones:
hombre(MarcoAntonio)
hombre(César)
∀x: hombre(x) → persona(x)
persona(x)
Esta regla establece un subobjetivo que consiste en encontrar un hombre. De nuevo, las
afirmaciones son examinadas desde el principio, pero ahora MarcoAntonio, satisface el
subobjetivo, y por tanto también el objetivo principal. Así que Marco Antonio será la
respuesta emitida.
CAPITULO 3
ESTRUCTURAS DE BUSQUEDA
Y METODOS DE RAZONAMIENTO
1. Arboles de búsqueda
Ejemplo: Grafo del camino solución para encontrar las llaves perdidas
Nodos
Al igual que un árbol de búsqueda, un árbol de decisiones tiene un nodo raíz, nodos
intermedios, arcos de conexión y objetivos. Cada nodo representa un punto de decisión. Se
puede considerar cada nodo, como una pregunta con una o más respuestas, una de las formas
más simples del árbol de decisión tiene dos caminos para cada nodo: si y no, verdadero y falso.
En cada momento el estado del problema vendrá definido por la posición de la persona que
cruza el laberinto, partiendo del punto (1,1) estado inicial, debiendo alcanzar el estado (4,4)
estado final. Para lo cual pasará por una serie de estados intermedios, con puntos de cruce y
puntos muertos.
Los nodos representan las posiciones o estados posibles del problema, los arcos los
desplazamientos o transiciones entre estados. El valor o costo de los desplazamientos viene
indicado por un numero en la mitad del arco. Él grafo representa lo que se denomina. espacio
de búsqueda.
En general nos interesa buscar el camino de mínimo costo o camino óptimo valor = 8
Generalmente nos interesamos en grafos Y/O más que en el caso particular de árboles, ello
debido a que diferentes secuencias de reglas pueden generar bases de datos idénticas. Por
ejemplo, un nodo podría resultar etiquetado con una base de datos componente que se
obtuviese tanto de la descomposición de una regla compuesta como de la aplicación de
alguna regla a otra. En este caso, tendría que considerarse como un nodo O respecto a un
antecesor y como un nodo Y respecto al otro.
Definiremos a los grafos Y/O, como la representación del camino solución desde el nodo
inicial (llamado nodo raíz), hacia un conjunto de nodos sucesores que representen los estados
solución. Los arcos que conectan un nodo antecesor con un conjunto de nodos sucesores, son
también llamados conectores.
Tanto en los arboles como en los grafos, llamaremos nodo raíz a uno que no tiene antecesor,
nodo hoja a uno que no posea sucesores.
n1 Ο
n2
Ο Ο n4
n3 Ο Ο n5
n6 Ο Ο n8
n7 Ο
En los siguientes ejemplos, se asume por simplicidad, que cada operación tiene un costo
uniforme, de forma que cada arco con un solo sucesor tiene un coste igual a 1, y cada arco Y
con múltiples sucesores también tiene un coste 1 por cada uno de sus componentes.
A A
B C D B C D
(5) (3) (4)
(17) (9) (27)
GH
E F G H I J
Supongamos ahora que queremos probar que existe alguien que o no es un terrier o es
ruidoso. La fbf de objetivo que representa la sentencia que ha de ser probada será:
∼ terrier(z) ∨ruidoso(z)
Ejemplo:
Directorio(D-C, John_Jones)
Jhon jones es el director del Departamento de Compras.
Trabaja_en(D-C, Joe_Smith)
Joe Smith trabaja en el Departamento de Compras.
Trabaja_en(D-C, Sally_jones)
Trabaja_en(D-C, Pete_Swanson)
Director(D-V, Harry_Turner)
Harry Turner es el Director del Departamento de Ventas.
Trabaja_en(D-V, Mary_jones)
Trabaja_en(D-V, Bill_white)
Casados(John_jones, Mary_jones)
Con estos hechos y reglas, un sistema de producción hacia atrás puede responder a diferentes
cuestiones. Para este ejemplo, supondremos que la estrategia de control guía la generación
del grafo Y/O mediante una exploración en profundidad en busca de un grafo solución
consistente.
6. Métodos de Búsqueda
1. Búsqueda en profundidad
2. Búsqueda en anchura
3. Búsqueda exhaustiva
4. Búsqueda heurística.
Una buena representación, acompañado de un método de búsqueda eficaz, originan una rápida
solución. A la hora de resolver un problema se representa la necesidad de elegir entre varias
alternativas, las cuales, a su vez, pueden representar mas alternativas. Buscar el camino óptimo
entre todas las alternativas, en el menor tiempo posible, da origen a los “ métodos de búsqueda
“.
7. Búsqueda en profundidad
La búsqueda en profundidad, depth-fisrt search, es una estrategia en la que se examina una
regla u objeto del nivel mas alto y a continuación se examinan, las del nivel inmediatamente
inferior; procediendo de este modo, el sistema ira siguiendo una rama única del árbol jerárquico
hasta que se acabe.
Desventajas:
• Podríamos perseguir indefinidamente una rama infinita y nunca volver al resto
del árbol n divisible por 5 n es divisible por 5
Características:
Profundidad 1
1 2
Profundidad 2
3 4 5 6 7
Profundidad 3
8 9
En esta búsqueda se desarrollan en primer lugar a la profundidad 1 todos los nodos del árbol
del espacio problema; después a profundidad 2 y así sucesivamente.
Búsqueda heurística
Anteriormente se ha utilizado él termino heurístico para describir una regla que ayuda a
expresar el conocimiento. Este termino también se puede emplear para describir las reglas que
se emplean para limitar la amplitud de las búsquedas. las técnicas heurísticas se emplean para
centrar la atención de la búsqueda en las que es más probable que se encuentre la solución”. Las
técnicas heurísticas pueden eliminar gran parte de árbol de búsqueda, acelerando notablemente
el proceso de solución del problema.
Técnicas heurísticas
Existen técnicas heurísticas de propósito especial y general. ejemplo de propósito general son
las técnicas de búsqueda en profundidad limitada. Esta técnica se usa en la búsqueda en
profundidad para evitar que la búsqueda tenga lugar en algunas bifurcaciones muy bajas y en las
que no existe posibilidad de encontrar una solución.
Las búsquedas heurísticas de propósito específico sólo son aplicables a ciertos tipos de
problemas.
Metarreglas
A través del uso de reglas especiales denominadas metarreglas, que establecen la forma de
utilizar las reglas de conocimiento, a partir de una serie de datos, una metarregla limita la
búsqueda, al subconjunto de la BC. que tiene mayor probabilidad de llevar a una solución.
Las personas en general utilizan metarreglas para determinar que nodo es el que tiene que
desarrollarse a continuación.
Como ejemplo en una búsqueda podríamos dar pesos ponderativos a las reglas para indicar
su utilidad demostrada en problemas anteriores. Entonces se podría utilizar una metarregla
que declare que, si existe una elección, deberá aplicarse la regla de valor más alto.
Supongamos que en un enfoque guiado por los datos, a las reglas se le dan los siguientes
pesos:
R1 7
R2 10
R3 5
R4 20
El enfoque desarrollaría el árbol de búsqueda en el orden indicado por los números de los
nodos.
R1 R2
3 1
R2 R3 R1 R4
63 9 4 2
R3 R4 R R2 R3 R4
8 7 13 10 5
R4 R4 R4
11 14 12
En el primer paso R1 y R2 serían las únicas reglas aplicables. Puesto que R2 tiene un peso
superior a R1, se aplica primero. En el paso siguiente se puede aplicar R1 o R4. R1 quedo
descartado desde el primer paso y R4 se hizo aplicable utilizando la regla R2. Puesto que R4
tiene un peso superior a R1, se aplica. Como se encontró una solución, R1 es la única regla
que ahora puede aplicarse, y de aquí las opciones R3 y R4, y así sucesivamente.
La IA. permite tratar los conocimientos ambiguos e inciertos, mientras que el software
algorítmico no lo hace, un algoritmo al igual que una fórmula, necesita valores específicos como
datos de entrada, para así calcular un resultado. Sí se suministran valores apropiados se generará
un resultado correcto en caso contrario los resultados serán incorrectos.
La IA. , sin embargo, no necesita de datos de entrada perfectos, para ser capaz de producir
resultados coherentes. Cuando un SE. hace una pregunta, Usted puede no ser capaz de
proporcionar las respuestas adecuadas y en algunos casos desconocerá totalmente las respuestas;
en otras ocasiones tendrá respuestas cuya validez, no está totalmente seguro. La mayoría de los
SE. puede manejar estas situaciones.
Resolver o manejar la incertidumbre es crucial para la IA. por que es necesaria para interactuar
con el mundo real. En su mayoría, los humanos tratamos la incertidumbre de la observación sin
mucho problema, por que estamos acostumbrados a ello. Sin embargo, hacer que una
computadora trate con la incertidumbre, requiere algún esfuerzo.
Enlazar la lógica con la incertidumbre es una tarea no trivial, por que son opuestas. Cuando se
logra la unión, el resultado es llamado Lógica difusa o Borrosa (Fuzzy), por que el valor de la
verdad se basa en verosimilitudes más que en hechos. El intentar resolver situaciones donde
alguna información es desconocida, llegamos a dos áreas importantes de investigación:
Lógica Difusa
Sistemas Probabilisticos
Factores de Certidumbre.
Uno de los métodos diseñados para tratar las situaciones inciertas son los factores de
certidumbre (FC) y consiste en una medida numérica de la confianza que se tiene en la validez
de un hecho o regla. Los factores de certidumbre permiten a los programas de inferencia
trabajar con informaciones imprecisas.
0 al 10, 0 a 100, - 1 a + 1.
Uno de los problemas más difíciles que han enfrentado las ciencias exactas como la
matemática, la lógica, etc. Es el cálculo de lo que no es exacto, es decir como manejar datos
sin perder su carácter rígido aceptando las variables naturales de la realidad. En el medio en
que vivimos, se presentan sistemas que es difícil definirlos con modelos matemáticos exactos
o convencionales. Para analizar estos tipos de sistemas se recurre a la Lógica difusa, Borrosa
o Fuzzy.
La lógica formal es la lógica Aristotélica, que dice que una cosa es verdadera o falsa estando
excluida una tercera acepción para el valor de verdad de una proposición. La lógica difusa
nace con Platón y en tiempos recientes con Lukasiewics quien plantea el espectro entre lo
verdadero y lo falso y explora una lógica 3,4,5 y más elementos, llamada lógica multi-nivel.
1.0 1.0
0 18 22 26 30 0 18 22 26 30
Lógica Convencional Lógica Fuzzy
El grado de pertenencia a un conjunto generalmente de asocia a la letra griega µ y puede
tomar valores entre 0 y 1 inclusive. Esto de denota como:
µA(x) → [0,1] donde a µ también se le conoce como el valor de verdad porque representa el
grado en que una proposición es verdadera.
Los Sistemas basados en la lógica difusa pueden controlar más adecuadamente procesos que
estén gobernados por reglas intuitivas que difícilmente pueden expresarse matemáticamente.
Emplea infinitos matices entre lo Verdadero o Falso, entre un SI y un NO pues nuestro
lenguaje es vago, difuso y eminentemente subjetivo. Así tenemos expresiones dentro de este
conjunto como: ( rico, muy.., más o menos ..., algo..., más bien ..., una especie de ..., cerca
de ....).
La forma de expresar las reglas de operación mediante palabras permite controlar procesos
sencillos con una decena de reglas, y procesos complejos con unas 30 o 40, reduciendo
considerablemente la cantidad de código de programación, el tiempo de diseño del prototipo,
la cantidad de memoria etc.
Otra ventaja del control difuso es la fácil modificación que puede llevarse a cabo cambiando
algunas premisas y operaciones, o adicionando reglas (El criterio de comportamiento del
sistema va implícito en las Reglas), mientras que en un sistema convencional, un pequeño
cambio requiere de la derivación completa de nuevas ecuaciones. El control difuso no
necesita de la etapa de obtención del modelo matemático del proceso.
A = [5,8]
Ahora veremos la función característica del conjunto A. Esta función asigna un número entre
1 y 0 para cada elemento en X, y depende de sí el elemento es un subconjunto de A o no.
1 • •
⊕ ⊕
0 5 8 X
Podemos ver que cada elemento tiene asignado un valor (0 o 1) Los elementos del conjunto
A tienen asignados el valor de 1 porque pertenecen a ese conjunto, y cada elemento que tiene
asignado el número 0 es un elemento que no está en el conjunto A.
Entonces, en general, se toma como limite inferior las edades que arrancan en 0 años. El
rango más alto o mayor es más difícil de definir. Por lo tanto para un primer caso se puede
considerar el rango superior como 20 años. B tendrá entonces el intervalo:
B = [ 0, 20 ]
La pregunta a resolver sería, ¿ Por qué una persona en su cumpleaños 20 es considerada
joven y al día siguiente ya no? Obviamente esto es un problema estructural. Pues así
variemos el rango superior el problema seguirá.
Una forma más natural de construir el conjunto B sería hacer menos drástica él limite entre
gente joven y no joven.
Para solucionar el problema, se cambiara las frases radicales como “SI ÉL/Ella están en el
grupo de gente joven”, por una frase más flexible como “medio joven, algo joven, poco
joven ..etc.
.
µ B
0.5
0 20 25 30 50
Si tengo 25 años de edad soy 50 % Joven. edad
Con los conjuntos difusos se pueden realizar operaciones básicas como la intersección,
unificación y negación de conjuntos. Así se tiene el conjunto A es un intervalo fuzzy entre 5
y 8 y el conjunto B es un número fuzzy alrededor de 4. Sobre estos dos conjuntos
efectuaremos las operaciones respectivas:
µ A
0 5 8 X
µB
0 4 X
µA
0 5 8 X
La línea más oscura representa la negación: µ (x) = 1 - µ(x)
El especialista asigna un valor del Factor de certidumbre entre 0 y 1 para indicar el grado de
confianza, de que un evento se encuentre en el intervalo dado.
Supongamos que se desea definir lo rápido que es un carro. Aunque se puede utilizar la
velocidad limite como referencia, pocos carros alcanzan su velocidad límite en alguna ocasión,
de modo que una referencia mejor puede ser utilizar la aceleración de 0 a 100 Km/hora. Podría
afirmarse entonces que cualquier carro con una aceleración de 0 a 100 km/h. en menos de 8
segundos, es rápido y los demás son lentos.
Lo cual podemos representarlo gráficamente:
Evaluación
Rápido
0 4 8 Tiempo
La escala vertical representa la opinión de los especialistas sobre lo que es rápido. El valor 1
significa que el 100 % opina que una aceleración por debajo de los 8 segundos supone un carro
rápido. El 0 indica que por encima de los 8 segundos de aceleración, nadie cree que un carro sea
rápido.
Pero desde luego, raramente existe un consenso de este tipo. En la vida real, la opinión de los
especialistas diferirá, por lo que una curva más real es la que se representa en la siguiente figura:
Evaluación
1.0
0.5
0.0 4 8 Tiempo
En ella se muestra que sólo el 50 % de los especialistas considerará que un tiempo por debajo de
los 8 segundos es rápido. En cualquier caso, él numero entre 0 y 1 da un valor que indica
rapidez de un carro, medida en una cierta escala. Los factores de certidumbre pueden emplearse
también para representar conceptos como: grande, verdadero, rico, pecaminoso. etc. Este
método de representar la información imprecisa es útil para algunos tipos de problemas. Permite
asignar valores numéricos a conocimientos cuya validez se desconoce.
20. Razonamiento No Monótono
Los sistemas de razonamiento no monótono, por otro lado, se diseñan para que puedan resolver
problemas en los que quizá no aparezca alguna de estas propiedades. Para poder lograrlo, se
deben tratar varios aspectos clave, entre los cuales se encuentran:
Por ejemplo, sería bueno decir cosas como: “Si no tienes razones para sospechar que una
persona ha cometido un crimen, entonces asuma que él no lo cometió”. Específicamente,
es necesario tener clara la distinción entre:
Se sabe que ∼ P.
No se sabe si P.
Los sistemas de razonamiento no monótono derivan su nombre del hecho de que como
las inferencias dependen de la falta de conocimiento. Los sistemas de lógica de
predicados de primer orden, son monótonos. Conforme se añaden nuevos axiomas,
aparecen nuevas fbf, pero nunca se vuelven inválidos los resultados anteriores.
La solución más usual consiste en tomar nota de las demostraciones, que con frecuencia
se denominan Justificaciones. Esto permite encontrar todas las justificaciones que
dependen de la ausencia de un nuevo hecho y, por lo tanto pueden marcarse como
inválidas.
3°. ¿ Cómo puede usarse el conocimiento para ayudar a resolver los conflictos que
surgen cuando se pueden usar varias inferencias no monótonas inconsistentes?
Resulta que cuando las inferencias se basan tanto en la falta de conocimiento como en su
presencia, las contradicciones surgen con mucho más frecuencia que en los sistemas
lógicos convencionales, en los que las únicas posibles contradicciones son aquellas que
dependen de hechos que se afirmaron explícitamente como ciertos.
El lenguaje Prolog es un lenguaje declarativo. esto significa que dados los hechos y reglas
necesarios puede usar razonamientos deductivos para resolver problemas en donde el
programador solo debe dar una descripción del problema y las reglas básicas para resolverlo,
luego Prolog determinara como encontrar la solución.
Prolog tiene sintaxis muy simple y corta, siendo más fácil de aprender que la mayoría de
lenguajes tradicionales de programación. Tiene incorporado un sistema de menúes y ventanas
que le ayudan a escribir, guardar compilar y depurar programas.
En la pantalla principal se visualizan cuatro ventanas separadas por una línea de menú de
opciones al principio y una línea de información al final.
• Ventana de edición
• Ventana de dialogo
• Ventana de traza
• Ventana de mensajes.
Cada ventana puede ser trasladada, reducida o agrandada según la comodidad del programador.
• dominios (domains)
• predicados (predicates)
• cláusulas (clauses)
1° Dominios
En el Prolog, usted debe especificar los dominios de los objetivos de una relación, es decir se
necesita conocer de antemano que tipo de cosas pueden ser un argumento (numero, símbolo,
entero, real,....).
2° Predicados
Son las relaciones que afectan uno o más objetos. Consta de:
Objetivos.- esta sección indica la meta, es decir lo que la computadora hará con la
información que se le ha suministrado. el objetivo puede ser interno o externo.
Goal interno.- No emite respuesta, es decir no da ningún mensaje de falso o verdadero, por
lo cual utiliza un predicado de escritura ( write ) para imprimir el mensaje de respuesta.
3° Cláusulas
Constituyen la base de datos, es donde se almacenan los datos. Los hechos con los que se
formulan los objetivos y relaciones se listan en esta sección, además de las reglas y otras
estructuras. Todas las cláusulas terminan en un punto o conectores lógicos and y or.
Es decir en vez de especificar una serie de pasos para que el computador resuelva el problema,
se hace tan solo una descripción del problema. Esta descripción es hecha en tres partes.
domains
persona, actividad = symbol
predicates
le_gusta (persona, actividad)
clauses
le_gusta(ellen, tenis).
le_gusta(juan, fútbol).
le_gusta(tom, béisbol).
le_gusta(erick, natación).
le_gusta(marcos, tenis).
le_gusta(bill, X) if le_gusta(tom, X).
Como se puede apreciar la sección cláusulas contiene una colección de hechos y reglas.
Los hechos: le_gusta(ellen, tenis). corresponde: ellen le gusta el tenis.
Para que el prolog determine si a bill le gusta el béisbol, debemos indicar al programa.
le_gusta(bill, béisbol). como nuestra meta
Por lo tanto el prolog intenta satisfacer esta meta, el sistema usara la regla
le_gusta(bill, X) if le_gusta(tom, X).
Prolog contestara:
True (verdad). y esperara que ingrese otra meta.
Con el hecho:
le_gusta (tom, béisbol).
En el Prolog se debe especificar los dominios a los cuales pertenecen los objetos de una
relación.
domains
persona, actividad = symbol
predicates
le_gusta(persona, actividad)
Dominios Estándar:
Ejemplos de símbolos:
numero_telefono "pasaje_de_ tren" "Sociedad_ Mercantil"
Caracteres especiales :
Los objetos que pertenecen a dominios de carácter o de símbolos y contienen un \ (backslash) tienen
un significado especial:
Escribir un programa que establezca la relación del estudio de cursos por alumno según los
siguientes predicados:
8. Los Predicados
Cada hecho dado en la sección de cláusulas de un programa, consiste de una relación que afecta
uno o más objetos.
• Los nombres de los objetos deben empezar con una letra minúscula seguida de
letras, caracteres, dígitos o “_”.
Similarmente la expresión:
dará un error a pesar que a bill y tom le gusta el béisbol, ello se debe a que la relación: le_gusta
ha sido definida como un predicado de dos argumento y no tres como se intenta.
le_gusta(individuo, tenis).
Prolog responderá:
individuo = ellen
individuo = marcos
2 soluciones
goal:
La meta será resuelta de dos maneras, asignando la variable individuo con ellen y marcos.
9. Aridad de un predicado
Ejemplo:
/* Programa con hechos de aridad cero */
predicates
uno dos tres cinco siete
goal
cinco, write ("lo encontró").
clauses
uno.
dos. tres.
cinco.
siete.
Respuesta: lo encontró
Ejemplo:
/* programa de aridad 1 */
domains
marca = symbol
predicates
carro (marca)
goal:
carro(toyota) and write("lo encontró") or write ("no lo encontró").
clauses
carro (ford).
carro (toyota).
carro (chevrolet).
carro (lada).
carro (datsun).
El goal interno utiliza un predicado write para dar una respuesta el cual siempre es verdadero.
Ejercicio:
Desarrolle un programa que establezca el siguiente predicado:
Predicado
observa (persona, persona)
Solución:
/* programas de aridad 2 */
domains
persona = symbol
predicates
observa(persona, persona)
clauses
observa (guillermo, roberto).
observa (juan, juana).
observa (federico, alicia).
observa (miguel, guillermo).
observa (brenda, gregorio).
observa (Roberto, Roberto).
observa (federico, gregorio).
observa (gregorio, felipe).
• Busca de arriba-abajo a lo largo de la lista de hechos, para encontrar un hecho que coincida con el
objetivo.
• Al ser correcto él numero de argumentos, intenta hacer coincidir el primer argumento del hecho e
intenta nuevamente de hacerlo coincidir, realizando todo el proceso anterior, hasta encontrar un
hecho igual al del objetivo.
Puede observarse que ninguna regla impide que un objeto aparezca en ambas posiciones:
El cual producirá una lista de todos los hechos de la Base de Datos, si hubiera otros hechos distintos a
"observar", esta operación seria útil para determinar cuantos hechos del mismo objetivo existen en la base
de datos:
N soluciones
/* programa de aridad 3 */
domains
marca, color = symbol
antigüedad, precio = integer
kilometraje = real
predicates
carro (marca, kilometraje, antigüedad, color, precio)
clauses
carro(fíat, 130000, 3, rojo, 12000).
carro(ford, 90000, 4, plomo, 9000).
carro(datsun, 800, 1, negro, 15000).
En este programa el predicado carro establece el molde para todas las relaciones y tiene objetos que
pertenece al dominio de los enteros los cuales están comprendidos en un rango -32768 .. +32767 , el
dominio del kilometraje es del tipo real y puede contener el punto decimal.
1 solución.
El Prolog utiliza operadores lógicos y de relación, para validar los objetivos individuales, formulando
metas compuestas.
Ambas relacionadas con el operador lógico "and" y la relación "menor que" < , esta ultima es similar
a una relación normal que involucra a dos objetos numéricos.
Pero es preferible por comodidad anteponer el operador < entre los dos objetivos.
predicates
alumno (niño, edad)
clauses
alumno (pedro, 9).
alumno (pablo, 10).
alumno (chis, 9).
alumno (susana, 9).
alumno (juan, 10).
Se desea establecer:
¿ Qué, Persona1 y Persona2 tengan ambos 9 años de edad y a la vez sean diferentes ?
Metas Compuestas :
El Prolog tratara de encontrar una solución para la primera submeta y solo continuara con la siguiente
submeta, una vez que la primera submeta es lograda. la cual es satisfecha al ser la Persona1 igual a Pedro.
Luego trata de satisfacer la siguiente submeta.
alumno(Persona2, 9)
El cual también tomara como primer valor a pedro. Continuando con la tercera submeta final
Dado que ambos Persona1 y Persona2 ambas son pedro, esta submeta falla.
Entonces el Prolog retrocede ( Backtraks ) a la meta anterior, luego busca otra solución para la segunda
submeta, lo que se logra haciendo que Persona2 tome el valor de Chris, por lo que la tercera submeta:
Persona1 <> Persona2
Es satisfecha dado que Pedro y Chris son diferentes, con lo cual se satisface toda la meta.
Sin embargo el goal externo debe encontrar todas las posibles soluciones para una meta, y una vez mas
retrocede a la meta previa, esperando acertar nuevamente por lo tanto
alumno (Persona2, 9)
Puede ser satisfecha tomando a Persona2 como Susana, luego intenta la tercera submeta, la que se cumple
dado que pedro y susana son diferentes, de manera que otra solución ha sido encontrada para toda la
meta. el prolog buscara más soluciones y nuevamente retrocede a la segunda submeta. pero todas las
posibilidades han sido agotadas para esta submeta, entonces el retroceso ( Backtracking ) continua hasta la
primera submeta.
alumno(Persona1, 9)
La cual puede ser satisfecha tomando a Persona1 = chris para luego continuar con la siguiente submeta en
donde Persona2 sé instancia con pedro, de manera que la tercera submeta es satisfecha, completando toda
la meta. Luego sé continua en forma similar al proceso anterior hasta llegar a la solución final.
6 Soluciones
Ejercicio:
Metas:
♦ Cursos aprobados por alumnos
♦ Profesores por curso
♦ Horario de clases
♦ Promedio final por cursos
♦ Control del cruce de horario
Operador AND
Si tenemos el objetivo:
Este objetivo compuesto será juzgado verdad solo si son verdad ambos objetivos en forma individual.
Es decir el Prolog intenta inicialmente identificar el primer objetivo y una vez que lo encuentra, intenta
satisfacer el segundo objetivo.
El resultado será falso por que ambos objetivos individuales necesitan ser verdad, para que se cumpla
el objetivo compuesto.
Operador OR
Se puede construir objetivos compuestos llamados Disyunciones, con el operador lógico or, que indica
que será verdad, si alguno de los objetivos individuales es verdad. Se escribe también como un
carácter “;”. El otro objetivo puede ser verdadero o falso, lo cual no afectara el cumplimiento del
objetivo compuesto.
Existen otros operadores, que también pueden escribirse en los objetivos compuestos y son los
operadores de relación:
Prolog responde:
Quien = felipe
debido a que hay alguien a quien guillermo observa y cuyo nombre viene alfabéticamente antes que
roberto.
Ejercicio:
/* Programa - Sofía busca un hombre que sea vegetariano y que no fume */
domains
persona = symbol
predicates
hombre (persona)
fumador (persona)
vegetariano (persona)
pareja_elegida (persona)
goal: pareja_elegida(X) and write ("la posible pareja de Sofía es", X), nl.
clauses
hombre (josé).
hombre (mario).
hombre (tomas).
hombre (antonio).
fumador (tomas).
vegetariano (josé).
vegetariano (tomas).
pareja_elegida (X) ∧hombre (X), not (fumador (X)).
pareja_elegida (X) ∧hombre (X), vegetariano (X).
Aparte del uso de dos reglas (es permitido el usar muchas mas) se observa el uso del operador not (no)
que es usado para indicar la condición de no fumador. Vemos también el uso del predicado write:
write (......)
Que es un predicado que siempre es verdadero y en este caso mostrara en pantalla el valor de la
variable X que satisfaga el goal interno.
Normalmente el goal interno da como resultado un solo elemento de la solución, mientras que el goal
externo, busca todos los elementos y presenta sus respuestas, asignando los valores de las variables o el
mensaje true (yes) o false (no).
Para que el goal interno pueda imprimir todos los elementos de la base de datos; se coloca un
predicado falso para forzar la búsqueda o se utiliza un predicado que siempre es falso llamado "fail".
/* programa ejemplo */
domains
color, marca = symbol
predicates
carro(marca, color) moto(symbol)
clauses
carro(ford, amarillo). carro (toyota, negro).
carro(chevrolet, rojo). carro(nissan,plomo).
moto(susuki). moto(fiat). moto(honda).
Solución:
goal: carro (X, Y)
goal: carro (X, Y), moto (M)
Una variable anónima o blanca, se escribe como un carácter subrayado y se utiliza en los mismos
lugares de las variables estándares, pero nunca se le asigna un valor particular (es decir se ignora el
valor de la variable).
Respuesta:
Edad = 3 Precio = 12000
Edad = 4 Precio = 9000
Edad = 1 Precio = 15000
19. Instanciación
Instanciación:
if (X EQ 4) .... Comparación
X = 4 .... Asigna valor variable
El Prolog tiene ambas cosas juntas, lo cual se denomina instanciación, que significa que a una variable
libre se le mueve un valor y luego se efectúa la comparación.
Regla:
Los hechos no son los únicos elementos de la sección cláusulas, se pueden tambien introducir reglas a
las bases de datos. Una regla nos indica que algo es verdad (un objetivo se cumplirá) si alguna otra
cosa es verdad.
Las reglas hacen que el prolog pase de ser solo un: "Diccionario o Base de Datos", en el que
se busca o verifica un hecho, a ser una máquina lógica pensante".
A if B, C, D, E.
Diagrama de árbol:
B B B
C C C C C C C C
D D D
E E E
if “ :- “ ........... si
and “, “ ........... "y"
or “ ; “ ............ "o"
domains
persona = symbol
predicates
observa (persona, persona)
feliz (persona)
clauses
observa (guillermo, roberto).
observa (juan, juana).
observa (federico, felicita).
observa (miguel, guillermo).
observa (brenda, gregorio).
observa (roberto, roberto).
observa (federico, gregorio).
observa (guillermo, felipe).
Es un predicado incorporado que siempre es falso y ocasiona una vuelta hacia atrás, liberando a las
variables, puede ubicarse en un objetivo como una regla.
Con el fail se buscan todos los elementos, dependiendo donde se ubique.
A if B, C, D, fail.
domains
cosa = symbol
predicates
busca (cosa)
es_un_pato (cosa)
camina_como_pato (cosa)
suena_como_pato (cosa)
tiene_dos_patas (cosa)
clauses
camina_como_pato (juan).
camina_como_pato (pedro).
camina_como_pato (pato).
suena_como_pato (juan).
suena_como_pato (pedro).
suena_como_pato (pedro).
tiene_dos_patas (juan).
tiene_dos_patas (pato).
es_un_pato (pato).
es_un_pato (juan).
El prolog intentará satisfacer B y C, luego se mueve hacia la cláusula "!", la cual se cumple
automáticamente quedando las variables vinculadas a "B" y "C" atrapadas en su estado actual. Ahora
buscaran todas las posibilidades para "D", si lo encuentra, la regla se cumplirá, sino, fallara la regla
entera, porque él "!" detiene la vuelta atrás que se produciría para encontrar otros valores de "B" y "C".
Ejemplo. En el programa anterior le permitirá determinar que "es_un_pato" ...... Cuando utilice el
objetivo, es_un_pato(Animal)
Buscando en su base de datos para satisfacer las condiciones compuestas de la regla "es_un_pato".
Sólo se obtendrá el primer nombre de pato. La regla no permitirá volver atrás al primer subobjetivo
"suena_como_pato", después que haya llegado al corte.
23. Estructuras
En la mayoría de las aplicaciones se necesita emplear tipos de datos más complejos, que los que se han
usado hasta este momento. la habilidad de construir estructuras de datos es fundamental, el Prolog
permite el manejo de estas estructuras:
♦ Functores
♦ Listas
♦ Cadenas
Con la relación precediendo a los objetos encerrados entre paréntesis. El prolog permite crear objetos
que tengan otros objetos que son llamados objetos compuestos, lo que le permite añadir mas detalles a
las cláusulas.
Que puede ser interpretado como, juan posee un perro que se llama lassie. lo cual escrito de otra
forma.
Los objetos compuestos consisten de un operador (functor) y el subobjeto perteneciente a este. cuando
un argumento es a su vez un predicado se llama functor. los objetos de un functor se llaman
componentes y tienen la forma:
No se debe esto indefinidamente, por que demasiados niveles de paréntesis, harían al programa
demasiado difícil de leer. sin embargo, utilizado con moderación los objetos compuestos pueden
hacer, un programa más fácil de organizar.
los objetos compuestos deben declarar en forma adecuada los dominios y predicados. Escogiendo el
lenguaje de los functores y sus componentes, se puede obtener una buena estructura. es necesario
declarar cada functor y los dominios de todos los componentes, cada functor debe ser único, pero la
parte derecha de una declaración de dominio, puede tener varias alternativas de definición expresadas
por el conector or (;)
En resumen las declaraciones de dominios para los objetos compuestos pueden ser escritos:
domains
dominio = alternativa1(d,d,...); alternatina2(d,d,..); alternativa3(d,d,...);...
En donde alternativa1; alternativa2; ... son functores arbitrarios pero diferentes y las notaciones (d,
d,...) representa una lista de nombres de dominio que se declaran en otra parte o son uno de los
dominios standard.
Ejemplo. domains
artículos = libro (titulo, autor)
autor = autor (nombre, apellido)
título, nombre, apellido = symbol
Arbol
Lo cual podemos representar en una estructura de árbol.
libro
titulo autor
nombre apellido
predicates
tiene (nombre, artículos)
En este caso artículos pueden ser definidos como un libro que tiene los argumentos, titulo y autor con
autor como un functor.
predicates
escrito_por (autor, publicación)
novela_extensa(titulo)
clauses
escrito_por(fleming, libro("Dr.N.",210)).
escrito_por(melville, libro("Moby Dick", 600)).
novela_extensa(Titulo):-
escrito_por(_,libro(Título, Extensión)),
Extensión >300.
predicates
personal (nombre, reporte)
cathy
michael melody
domains
árbol = rama(string, árbol, árbol); vacío( )
predicates
imprime (árbol)
clauses
imprime (vacío).
imprime(rama (X, Y, Z)) :- write(X), nl,
imprime(Y), imprime(Z).
26. Recursividad
1. Cuando las relaciones son descritas con la ayuda de las mismas relaciones
2. Cuando los objetos son compuestos son parte de otros objetos compuestos (objetos
recursivos).
En el primer caso analizaremos el predicado factorial a través de un hecho y una regla, de manera
cuando se ingrese el objetivo: factorial (N, F )
/* programa factorial */
domains
n, f = integer
predicates
factorial (n, f)
clauses
factorial (1,1).
factorial (N, Res) :- N > 0,
N1 = N-1, factorial (N1, Facn1),
Res = N * Facn1.
goal
factorial (4, Respuesta)
Secuencia de ejecución
Se tiene la siguiente secuencia de ejecución:
factorial de 4 → es 24
El comportamiento será :
Goal : factorial(4, Respuesta) llama a: factorial(4, Res) que llama: factorial(4-1, Facn1), 4 * facn1
que llama: factorial(4-1-1, Facn1), (4-1) * Facn1 que llama: factorial(1, 1).
Otra forma de construcción del programa se representa:
predicates
factorial (integer, real)
factorial_aux (integer, real, integer, real)
clauses
factorial (N, Factn) :- factorial_aux(N, Factn, 1,1).
factorial_aux(N, Factn, I, P) :- I <= N,
Newp = P * I, Newi = I + 1,
factorial_aux(N, Factn, Newi, Newp).
factorial_aux(N, Factn, I, Factn) :- I > N.
La recursión puede ser usada describir objetos donde él numero de elementos no es conocido hacia
adelante. considerando el siguiente caso:
Ejemplo: Que objeto puede describir los nombres de todos los alumnos en un salón de clase, sin
conocer él numero de personas en adelante?
Para solucionar este problema se hará una declaración de dominio denominada lista_clase que
describe una clase vacía sin estudiantes.
listas_clase = vacía
clase(pedro, X)
Que simboliza una lista_clase con pedro como primer miembro y X simboliza una lista_clase
pequeña. (sin pedro).
clase(nombre, lista_clase)
Esto nos permite visualizar como un objeto compuesto es parte de otro objeto compuesto efectuando
un proceso recursivo.
28. Listas
Una lista es otra forma de un objeto compuesto, es una importante estructura de datos, una colección
de elementos separados por comas y colocados entre corchetes y corresponde en forma similar al uso
de los arreglos.
Ejemplo:
lista de enteros ....... [1, 2, 3, 4, 5, 8, 13]
lista de símbolos ....... [mamífero, reptil, aves]
lista de cadenas ....... ["mamífero", "reptil", "aves"]
lista vacia ....... []
Declaración de dominios.
Las declaraciones de dominios para las listas no son muy diferentes de las declaraciones de otros tipos
de objetos. En su forma general es como sigue.
domains
lista_cosas = cosas *
cosas = symbol
El asterisco indica que hay cero o más elementos en la lista. la primera línea de la declaración significa
que cada objeto de la lista lista_cosas pertenece al tipo cosas.
Todos los objetos de una lista pueden ser de cualquier tipo incluyendo otras listas, sin embargo, todos
los elementos de la lista, deben pertenecer al mismo dominio. La segunda línea define a "cosas" en
términos de las declaraciones de dominios estándares.
La declaración de la lista podría ser mas sencilla si se utiliza uno de los tipos estándares de dominio en
la primera línea.
Ejemplo:
domains
listanumeros = integer *
Declara que todos los objetos de "listanumeros" son enteros, no se necesita una segunda línea.
El Prolog procesa las listas dividiéndola en dos partes Cabeza y Cola. La cabeza de una lista es el
primer elemento de la izquierda, la cola es el resto de los elementos.
Cabeza es el elemento 1
Cola será la lista [2, 3, 4, 5]
El Prolog utiliza una barra vertical ( | ) para separar la cabeza de la cola en una lista.
[Cabeza | Cola]
Debido a que una lista es solo otro tipo de objeto, deberá encerrarse entre paréntesis, cuando se utilice
en una cláusula.
predicado ( [Lista] )
predicado ( [Cabeza | Cola] )
El Prolog responde: La variable X toma el valor de la cabeza X= 0 el valor de Y será la cola Y = [1, 2,
3, 4, 5, 6 ]
Las variables libres serán ligadas con los valores de cabeza y cola de la lista.
predicates
ciudades (letras)
cantidad (numero, letras, real)
clauses
ciudades ( [a, b, c, d, hola]).
ciudades ( [lima, tacna, ica] ).
cantidades ( [3.8, 6.5, 3.2, e-5, 0.5], [h, h, h], 0.50)
goal: ciudades ( [X | Y] ), nl
X = [a]
Y = [b, c, d, hola]
X = [lima]
Y = [tacna, ica]
2 soluciones
A= a , B= b , C= c , D= d , E= hola
1 solución
True
/* programa de listas */
domains
lista_letras = symbol*
predicates
letras_griegas (lista_letras)
clauses
letras_griegas ([alfa, beta, gamma, delta, epsilon, etc]).
Se pueden hacer estructuras tan complejas como se quiera, es decir se pueden poner listas
dentro de listas.
Ejemplo: la lista:
animales ([mamíferos, reptiles, pajaros, peces])
Pueden darse con mayor profundidad, donde cada elemento podría a su vez ser una lista.
También cada elemento puede tener un functor y una lista como el objeto del functor.
Las operaciones típicas que se realizan con listas incluyen las siguientes operaciones.
1. Verificar si un objeto esta dentro de una lista, es decir encontrar el miembro de una
lista.
2. Concatenar dos listas, obteniendo una tercera lista, que corresponde a la unión de
ambas listas.
3. Adicionar con nuevo objeto a la lista o borrarlo de ella.
miembro (X, L)
X es miembro de L si se cumple:
(1) X es la cabeza de L
(2) X es miembro de la cola de L.
[X | Y]
┌──────┬──────────────┐
│ X │ Y │
└──────┴──────────────┘
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌
┌ X' ┌ Y' ┌
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌
predicates
miembro (nombre,nombrelist)
clauses
miembro(Nombre,[Nombre |_].
miembro(Nombre,[_|Cola]) if miembro(Nombre, Cola).
Los predicados especificados en la cláusula se pueden analizar desde dos puntos de vista:
- El primero desde un punto de vista declarativo que especifica que, dada una lista,
nombre es miembro de la lista si es cabeza de la lista; si no nombre es miembro de la
lista si es miembro de la cola.
- Desde un punto de vista procedural, las dos cláusulas pueden ser interpretadas como:
encontrar un miembro de una lista, buscar en la cabeza, de otra forma buscar
en la cola.
Lo cual nos muestra que si nosotros construimos una cláusula desde un punto de vista,
trabajara, tambien para el otro punto de vista.
predicates
busca(integer)
lee(integer, lista)
clauses
busca (X) if lee (X, [1, 2, 3, 4, 5, 6]).
lee (X [X | Cola]).
lee (X, [_ | Cola]) if lee( X, Cola).
Respuesta: True
Para mostrar los elementos de una lista podemos definir los siguientes predicados:
escribir_lista ([ ]).
escribir_lista ([Cabeza | Cola] if write(Cabeza),nl,
escribir_lista(Cola).
- La primera cláusula indica que debe parar cuando no encuentre elementos en una lista (la
lista vacía).
- La segunda es una regla que indica: escribir la cabeza de la lista, luego pasar a una nueva
línea, luego escribir la cola de la lista.
Ejercicio: Escribir un programa que use listas y permita identificar la capital de 10 Países.
predicates
capitales(ciudad, lista_ciudad) pais(nombre, ciudad) busca(ciudad)
clauses
busca(Ciudad) if capitales(Ciudad,[santiago, lima, quito]).
capitales (Ciudad,[Ciudad|_]).
capitales (Ciudad,[_|Cola] if capitales(Ciudad,Cola).
pais (perú, lima). pais (chile, santiago).
pais (ecuador, quito). paies (argentina, buenos aires).
--
goal: país(M, A), busca(A), write(A, "Es la capital de ", M), nl, fail.
35. Recursividad con Listas
Muchas de las operaciones que se ejecutan sobre listas, se escriben fácilmente como
operaciones recursivas, es decir, operaciones que se llaman así mismas.
predicates
ciudad_peru (ciudad)
ciudad_chile (ciudad)
miembro (ciudad, lista_ciudad)
clauses
ciudad_perú( Ciudad ) if
miembro(Ciudad, [lima, tacna, trujillo]).
ciudad_chile( Ciudad ) if
miembro(Ciudad, [arica, santiago, iquique]).
miembro (Ciudad, [Ciudad | _ ] ).
miembro (Ciudad, [ _ | Cola] ) if miembro (ciudad,cola).
goal: ciudad_perú(lima)
Respuesta: True.
Las listas y las definiciones recursivas de miembros hacen lo mismo en menos espacio que
un programa sin listas. Su uso también permite añadir mas ciudades y estados a los hechos
sin tener que hacer una carga lista de todos los predicados para cada uno.
/* Programa de Listas */
domains
lista_nombre = nombre*
nombre = symbol
predicates
miembro(nombre, lista_nombre)
clauses
miembro (Nombre, [Nombre| _ ] ).
miembro (Nombre, [ _ | Cola] ) if miembro(Nombre,Cola).
Lo cual se interpreta como encontrar un miembro de una lista, encontrar su cabeza, de otra
manera encontrar un miembro en su cola.
predicates
lista_profesores (string, lista) lista_cursos (string, lista) ubica_profesor (string)
ubica_curso (string) profesores cursos
clauses
profesores if write("Relación de Profesores"), nl,
write("================"),nl,
ubica_profesor (P), write("\t", P), nl, fail.
ubica_profesor (Profesor) if
lista_profesores (Profesor,["Mejia",
"Cárdenas","López", “Neyra"]).
lista_profesores (Profesor, [Profesor | _ ] ).
lista_profesores(Profesor, [ _ | Cola] ) if
lista_profesores (Profesor, Cola).
ubica_curso (Curso) if
lista_cursos (Curso,["Análisis",
"MBI", "MBII", "PCP"]).
lista_cursos(Curso,[Curso|_]).
lista_cursos(Curso,[_|Cola) if
lista_cursos(Curso, Cola).
Prolog responde:
Relación de Profesores
=================
Mejia
Cárdenas
López
Neyra
Relación de Cursos
==============
Análisis
MBI
MBII
PCP
El prolog a menudo constituye cláusulas para un predicado, los cuales a su vez pueden
anexar o añadir listas a otra lista.
Concatenar Listas.
Así para concatenar una lista L2 a una lista L1 para formar una lista L3, la cabeza de L1
deberá ser la cabeza de las dos listas, lo que significa que la primera y segunda lista se
combinan para producir una nueva lista, y la segunda lista es añadida por el final a la
primera lista, así, se trata de concatenar la primera lista con una lista vacía, resulta en la
misma lista.
[X | L1]
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌ ┌┌┌┌┌┌┌┌
┌ X ┌ L1 ┌ ┌ L2 ┌
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌ ┌┌┌┌┌┌┌┌
|_______________________|
L3
[X|L3]
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌
┌X ┌ L3 ┌
┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌┌
concatenar ([ ], L, L ).
concatenar ([ X | L1], L2, [X | L3]) if concatenar(L1, L2, L3).
Con lo cual lograra concatenar las listas dadas.
Ejemplo:
goal: concatenar([a, b, c],[d, e, f], L). lo cual resultará en:
L = [ a, b, c, d, e, f ]
L1 = [ ]
L2 = [a, b, c]
L1 = [a]
L2 = [b, c]
L1 = [a, b]
L2 = [c]
L1 = [a, b, c]
L2 = [ ]
Ejemplo:
goal:
concatenar (Antes,[mayo|Despues],[ene,feb,mar,abr,
may, jun, jul,ago,set, oct, nov, dic]).
obteniendose:
Antes = abr
Despues = jun
Ejemplo:
Un predicado (miembro de lista) puede ser definido utilizando el predicado de concatenar.
miembro (X, L) if
concatenar (L1, [X, L2] ,L).
Lo cual significa que X es miembro de una lista L si L puede ser descompuesto en dos listas
de manera que la segunda lista tiene a X como cabeza.
Dividir Listas.
También se puede utilizar el manejo de listas para dividir una lista.
Ejemplo:
goal: append ([a, b], Lista, [a, b, c, d, e, f])
Lista = [c, d, e, f]
1 solucion
/* programa para anexar listas */
domains
lista_enteros = integer*
predicates
anexar (lista_enteros,lista_enteros,lista_enteros)
escribe_lista (lista_enteros)
clauses
anexar ([ ], Lista, Lista).
anexar ([X | L1], Lista2, [X | L3] ) if anexar (L1,lista2, L3).
escribe_lista ([ ]).
escribe_lista ([Cabeza | Cola]) if write(Cabeza), nl, escribe_lista(Cola).
Agregando un elemento:
Para agregar un elemento a una lista, lo mas sencillo es colocar el elemento al comienzo de la
lista de manera que este se vuelva cabeza de la lista.
Ejemplo.
adiciona_elem (X, L, [ X | L ] ).
Borrando un elemento:
Para borrar un elemento de la lista se puede establecer la relación
Ejemplo:
Para establecer las permutaciones en una lista se realizara con dos argumentos, que serán dos
listas, de manera que una es la permutación de la otra.
P = [a, b, c]
P = [a, c, d]
P = [b, a, c]
predicates
intersecta( lista, lista, lista )
miembro (integer, lista)
clauses
miembro ( X, [X | _ ] ).
miembro ( X, [_Y| _] ) if miembro(X, Y).
intersecta ( [ ] , _ , [ ] ).
intersecta ( [H | L1], Y, [H | L3] ) if miembro (H, Y) , ! ,
intersecta ( L1, Y, L3 ).
intersecta ( [_ | L1], Y, Z ) if intersecta( L1, Y, Z).
goal:
intersecta ( [1,2,3,4,6,7,8], [4,3,6,7,9,5], L ).
Respuesta:
L= [3, 4, 6, 7]
Predicados de escritura:
Ejemplo:
write (Alumno, "esta en el", Grado, "grado"),
nl, write ("_____________________________").
Resultado:
juan esta en el quinto grado
---------------------------------
Ejemplo
write ("\n, Saludos"), busca (X),
write ("\t", X ), nl, fail.
2. Writedevice (nombre_archivo_simbólico).-
Este predicado indica a que dispositivo enviara el predicado write la información,
puede trabajar con un archivo simbólico predefinido (Pantalla o Impresora) o
un archivo que haya abierto.
Dispositivos standares:
Dispositvo Dispositivo
Predefinido Salida
Ejemplo
write ("\n saludos"),busca (X),
write ("\t", X), nl,
writedevice (printer), fail.
3 Formato Cadena.-
Escribir una salida formateada de un determinado numero de argumentos, los
cuales pueden ser constantes o variables instanciadas.
los caracteres que van después del % son opcionales e indican: "-"
Este carácter indica justificación a la izquierda, por defecto es justificación a la
derecha.
┌────┬───┬────┬───┬──┬───┐
│ 4 │ 2 │ . │ 8 │b │ b │
└────┴───┴────┴───┴──┴───┘
% 6.1
┌────┬───┬───┬───┬───┬───┐
│ │ │4│2│.│8│
└────┴───┴───┴───┴───┴───┘
“f” Especifica el tipo de formato a utilizar, los cuales se indican por los
siguientes caracteres:
(c ) Representación de un carácter
(d ) Representación de un número decimal
(e ) Escribe números reales en notación exponencial.
(f ) Números reales en notación decimal fija (tambien por
defecto).
(g ) Escribe usando un formato corto
(s ) Representación de un string
(u ) Representación de un entero no signado.
(x ) Representación en un número hexadecimal.
Ejemplo.
writef("valor de X = % 6.1f ", "es el resultado obtenido", X)
writef("A>%-5.1, Coste=$%3.2f \n ", P, B,)
writef("valor de X = \n% 15", "es el resultado obtenido", X)
writeln("char: %c, decimal: %d, unsigned: %u", 'a', 55, -1)
Respuesta.
A = `one'
B = `330.12'
A = `one'
B = `3.30012e+02'
C = `4.3333375'
D = `one two'
C = `4 '
D = `one two tree'
char: a, decimal: 97, hex:21, unsigned:65535
Predicados de Lectura
El turbo Prolog tambien puede leer información desde el teclado o desde un archivo en
disco, desde un carácter hasta una línea entera de caracteres.
4. readln (cadena) lee una cadena, hasta que encuentre un caracter ASCII de
retorno de carro.
/* predicado de lectura */
domains
persona = p (nombre, edad, teléfono, ocupación)
edad = integer
nombre, teléfono, ocupación = string.
predicates
leer_persona (persona)
ejecutar
goal ejecutar
Predicados de Lectura
clauses
leer_persona (p (Nombre, Edad, Teléfono, Ocupación)) if
write ("Que Nombre?"), readln (Nombre),
write ("Ocupación?"), readln(Ocupación), write("Edad?"),
readent(Edad),write("Teléfono Nro. ?"),readln(Teléfono).
ejecutar if leer_persona (P),nl,write(P),nl, nl,
write("información OK (S/N)"),readchar(Ch), Ch = 's'.
ejecutar if nl, nl write("Trate otra vez"), nl, nl, ejecutar.
Manejo de Ventanas
El turbo prolog cuenta con predicados, que le permiten crear sus propias ventanas, para
ello utiliza el predicado makewindow, el cual tiene una serie de argumentos, que serán
instalados en el momento en que se llama el predicado.
Vídeo monocromático
Vídeo color:
Manejo de Ventanas.
Ejemplo
1er plano azul
fondo rojo 1 + 64 = 65 atributo
Manejo de Ventanas.
Atributo cuadro: determina la existencia del cuadro en la ventana. si es 0 no se tendrá
cuadro, puede ser tambien igual al atributo de pantalla o vídeo inverso 112.
Ejemplo
numventana → "menu"
Manejo de Ventanas.
cursor:- realiza dos tareas; mueve el cursor a la posición especificada en la ventana, o ligE
estos argumentos a la actual posición del cursor, su formato es:
/* programa de ventanas */
predicates
ventanas
goal ventana
clauses
ventana if makewindow (1,112,112,"USMP",5,10,10,30),
cursor (2,3),write ("CURSO: PROLOG"),nl,
write ("PRACTICAS DE LABORATORIO").
Manejo de Ventanas.
┌───────── U S M P ─────────┐
│ │
│ │
│ CURSO : PROLOG │
│ │
│ PRACTICAS DE LABORATORIO │
│ │
│ │
└───────────────────────────────┘
/* manejo de ventanas */
predicates
ventana1
ventana2
ventana3
goal
ventana1,makewindow(1, 35, ,150, "Sistemas Expertos", 2, 6, 22, 60), ventana2,
makewindow(2, 35, 150, "Procesando Información", 4,10,16,50), cursor (2,7), write("\t Por
favor espere ? "), Ventana3, makewindow(3, 35, 150, " Resultados ", 8, 18, 10, 30),
cursor(4, 10), write("\n curso: Prolog \n Alumno: Juan Pérez \n Sección: 102 \n Nota : 13"),
nl, nl.
Manejo de Ventanas.
clauses
ventana1.
ventana2.
ventana3.
Manejo de Ventanas.
Toda la pantalla completa o una ventana puede ser accesada y manipulada en tres
formas:
Manejo de Ventanas.