sábado, 25 de agosto de 2012

Aplicaciones de Logica Propocional

Principalmente vamos a definir Logica Proposicional :
La lógica proposicional  lenguaje formal que permite decidir sobre la validez o invalidez de los razonamientos deductivos en base en la representación simbólica de las proposiciones que intervienen en el razonamiento y en las conexiones entre ellas.



http://www.chu.com.es/images/logica.jpg




La lógica proposicional tiene una gran importancia un ejemplo es su uso en  los circuitos logicos de  uso en la electrónica 
La lógica proposicional es la más antigua y simple  de las formas de lógica. Utilizando una representación del lenguaje nos permite  representar y manipular sentencias sobre el mundo que nos rodea permite el razonamiento a través de un mecanismo que evalúa sentencias simples y sentencias complejas formadas mediante el uso de conectivos proposicionales 

Ejemplo:
Cuando queremos que la computadora realice por  razonamientos  es parte de la  inteligencia  artificial  para esto necesitamos formalizar los razonamientos, y de esto se  ocupa la Lógica. un punto importante a tomar es que la  logica y programación  se relacionan los programas  cada vez son mas complejos menos fiables y mas difíciles de mantener para solucionarlo se pretende que los programas mismos determinen las acciones  necesarias para resolver un problema y no que estos programas  constituyan  instrucciones que le digan la computador de como  resolver un problema.

Es por eso que decidi analizar la aplicacion de la inteligencia artificial :

http://movistarelsalvador.files.wordpress.com/2011/05/inteligencia-artificial.jpg

Ingeligencia Artificial y Sistemas Expertos

A John McCarthy se le atribuye el término "Inteligencia Artificial", concepto que acuñó en la Conferencia de Dartmouth en 1956, que describió como la "ciencia y la ingeniería de hacer inteligentes a las máquinas".

Despues de un tiempo se dijo que que la inteligencia artificial era dificil y que la inteligencia humana no sólo era complicada, sino mucho más complicada de lo que se había pensado y por eso se clasifican en diferentes categorias

Ejemplo:
  • visión por computadora
  • sistemas expertos
  • reconocimiento de patrones
  • redes neuronal

Los sistemas expertos, el cual se basa en escribir software que fuese tan bueno como un experto humano en un tema particular por ejemplo un programa de ajedrez como los actuales que le ganan ala mayoria de los jugadores humanos es un sistema experto muy exitoso pero las técnicas de programación para jugar tan bien están lejos de la teoría tradicional de los sistemas expertos

Un sistema experto se clasifica:
  • Interfaz con el usuario: Interacción entre el Sistema experto y el usuario se realiza mediante el lenguaje natural
  • Base de conocimientos: contiene conocimiento modelado extraído del diálogo con un experto.
  • Base de hechos : contiene los hechos sobre un problema que se ha descubierto durante el análisis
  • Motor de inferencias
cuando se trabaja con un sistema experto hay que saber cómo se diseñará cada elemento en el caso de la interfaz del usuario, aunque hay muchas alternativas, la más común es responder "sí" o "no" a las preguntas que hace el sistema esto desde luego no es tan poderoso como aquellos sistemas que además de responder a preguntas con sí o no también puedes darle un valor de confiabilidad a la respuesta. Por ejemplo, 

Pregunta: "¿Te duele la cabeza" 
Respuesta: "sí"
Pregunta: Del 1 al 10, ¿Cuanto te duele?

El ejemplo anterior usan sistemas de probabilidad para decidir el margen de confiabilidad de las respuestas que entrega el sistema experto, basado en la confiabilidad que se dieron en las diferentes respuestas por parte del usuario

Para ello se usa el teorema de Bayes Sin embargo, para poner las cosas de la manera más simple, muchos sistemas expertos solamente permiten responder "sí" o "no".

El motor de inferencias es quien pregunta al usuario basándose en cláusulas causa - efecto. 

Motores de inferencia : modela el proceso de razonamiento humano.:
  • backward chaining
  • forward chaining
  • blackboard system

Algunas ventajas son :

  • A diferencia de un experto humano un sistema experto no envejece no pierde facultades con el paso del tiempo
  • Una vez programado un Sistema experto lo podemos replicar demasiada de veces.
  • Un Sistema experto puede obtener información de una base de datos 
  • Puede trabajar en entornos peligrosos o dañinos para el ser humano.
  • No se ven afectados por condiciones externa ejemplo cansancio, presión, aburrimiento cualquier factor
Desventajas

  • Sentido común ejemplo para un sistema experto no hay nada obvio
  • Tenemos que mantener una conversación Formal
  • Capacidad de aprendizaje
  • No cuenta con sentidos
  • No es flexible

Otra aplicacion de Logica prosicional Famosa es la Algebra Booleana:

http://3.bp.blogspot.com/-Y1KJrFBKKqY/T5X9eib3RaI/AAAAAAAAAQQ/eel7I77UuPw/s1600/Image477.gif

El álgebra booleana es un sistema matemático deductivo centrado en los valores cero y uno (falso y verdadero). Un operador binario " º " definido en éste juego de valores acepta un par de entradas y produce un solo valor booleano, por ejemplo, el operador booleano AND acepta dos entradas booleanas y produce una sola salida booleana.

La herramienta fundamental para el análisis y diseño de circuitos digitales es un conjunto de reglas matemáticas (similares en algunos aspectos al álgebra convencional), pero que tienen la virtud de corresponder al comportamiento de circuitos basados en  dispositivos de conmutación (interruptores, relevadores, transistores, etc). En este capítulo se presentan los postulados que definen el álgebra booleana, se presentan en forma de teoremas los resultados más importantes, se presentan también los tres ejemplos clásicos de álgebras boolenas (lógica proposicional, álgebra de conjuntos, álgebra de switches) y herramientas básicas como tablas  de verdad y diagramas de Venn.
[el párrafo es un Extracto del la publicación http://lc.fie.umich.mx/~jrincon/elec3-cap4.pdf ]


Referencias:

http://lc.fie.umich.mx/~jrincon/elec3-cap4.pdf
http://www.cs.us.es/cursos/sia-2005/temas/tema-02.pdf
http://elvex.ugr.es/decsai/intelligent/slides/ai/A5%20Logic.pdf
http://bvs.sld.cu/revistas/san/vol2_2_98/san15298.htm



lunes, 20 de agosto de 2012

Tautologia

Fuente Wikipedia.com
En lógica, una tautología (del griego ταυτολογία, "decir lo mismo") es una fórmula  formada de un sistema de lógica proposicional que resulta verdadera para cualquier interpretación en pocas palabras para cualquier asignación de valores de verdad que se haga a sus fórmulas atómicas.

La construcción de una tabla de verdad es un método efectivo para determinar si una fórmula cualquiera es una tautología 
En un sistema de lógica proposicional, una interpretación no es más que una función que asigna un único valor de verdad a todas las fórmulas atómicas bajo consideración.
Diferentes interpretaciones, por lo tanto, difieren sólo en las asignaciones de valores de verdad que hacen. 
Una tautología es una fórmula bien formada que bajo cualquier interpretación de sus componentes atómicos, tiene valor de verdad 1 (verdadero). Por lo tanto, para determinar si una fórmula cualquiera es una tautología, basta con considerar todas las posibles interpretaciones de las fórmulas atómicas, y calcular el valor de verdad del todo. Esto se logra mediante una tabla de verdad. 
Por ejemplo, considérese la fórmula p ∧ q. 
Como a cada fórmula atómica puede asignársele uno de dos posibles valores de verdad, hay en  total 
22 = 4 posibles combinaciones de valores de verdad. Es decir, cuatro interpretaciones posibles: o ambas son verdaderas; o p es verdadera y q falsa; o p es falsa y q verdadera; o ambas son falsas. 
Esto puede presentarse mediante una simple tabla:

Para cada una de estas interpretaciones, puede calcularse el valor de verdad de la fórmula p ∧ q. 
Los resultados pueden presentarse nuevamente mediante una tabla:

Esta es la tabla de verdad de la fórmula p ∧ q. Como se ve, esta fórmula sólo es verdadera bajo una interpretación: aquella en la que ambas fórmulas atómicas son verdaderas. Una tautología es una fórmula cuyo valor de verdad es 1 para todas las interpretaciones posibles de las fórmulas atómicas. 
Por lo tanto, p ∧ q no es una tautología. En cambio, la siguiente tabla de verdad muestra una fórmula que sí lo es:

Si una fórmula tiene n fórmulas atómicas, entonces tiene 2n interpretaciones posibles. En muchos casos, por lo tanto, las tablas de verdad pueden ser muy grandes.

Ejemplo:


Mapa






Bibliografia:
http://www.ticalc.org/archives/files/fileinfo/113/11397.html
http://es.wikipedia.org/wiki/Tautología
http://matedisunidad3.wordpress.com/tag/tautologias/
http://www.scribd.com/doc/51511558/15/Contingencias-tautologias-y-contradicciones



martes, 7 de agosto de 2012

La Verificación y Validación de Software


Definición

La verificación y validación es el nombre que se da a los procesos de comprobación y análisis que aseguran que el software que se desarrolla está acorde a su especificación y cumple las necesidades de los clientes. La verificacion y validacion es un proceso de ciclo de vida completo. Inicia con las revisiones  de los requerimientos y continúa con las revisiones del diseño y las inspecciones del código hasta la  prueba del producto. Existen actividades de en cada etapa del proceso de desarrollo del software.

Metas de V&V
•La verificación y la validación deberían establecer la confianza de que el software es adecuado al propósito.
•Esto NO significa que esté completamente libre de defectos.
•Sino que debe ser lo suficientemente bueno para su uso previsto y el tipo de uso determinará el grado de confianza que se necesita.

La verificación y la validación no son la misma cosa 

Verificación: ¿Estamos construyendo el producto correctamente? 
El papel de la verificación comprende comprobar que el software está de acuerdo con su especificación. Se comprueba que el sistema cumple los requerimientos funcionales y no funcionales que se le han especificado.

Validación: ¿Estamos construyendo el producto concreto?
La validación es un proceso mas general. Se debe asegurar que el software cumple las expectativas del cliente. Va mas allá de comprobar si el  sistema está acorde con su especificación, para probar que el software  hace lo que el usuario espera a diferencia de lo que se ha especificado

Dentro del proceso de Verificación y validación se utilizan dos técnicas de comprobación y análisis de sistemas:

1. Las inspecciones del software analizan y comprueban las representaciones del sistema como el documento de requerimientos, los diagramas de diseño y y el código fuente del programa. Se aplica a todas las etapas del proceso de desarrollo. Las inspecciones se complementan  con algún tipo de análisis automático del texto fuente o de los  documentos asociados. Las inspecciones del software y los análisis automatizados son técnicas de verificación y validación estáticas puesto que no requieren que el sistema se ejecute.

2. Las pruebas del software consiste en contrastar las respuestas de una implementación del software a series de datos de prueba y examinar las respuestas del software y su comportamiento operacional, para comprobar que se desempeñe conforme a lo requerido. Llevar a cabo las pruebas es una técnica dinámica de la verificación y validación ya que requiere disponer de un prototipo ejecutable del sistema



Pruebas (test):
Es una actividad en la cual un sistema o uno de sus componentes se ejecutan para verificar el funcionamiento de un proceso, los resultados se observan y registran para realizar una evolución de dicho proceso.
Referente a la programación una prueba de software, en inglés testing son los procesos que permiten verificar y revelar la calidad de un producto software. Son utilizadas para identificar posibles fallos de implementación.

Caso de prueba (test case):
Un conjunto de entradas, condiciones de ejecución y resultados esperados desarrollados para un objetivo particular, un caso de prueba es utilizado por el analista para determinar si el requisito de una aplicación es parcial o completamente satisfactorio.

Defecto (defect, fault, bug):
Un defecto de software, es el resultado de un fallo o deficiencia durante el proceso de creación de programas de ordenador o computadora u otro dispositivo.  Por ejemplo, un proceso, una definición de datos o un paso de procesamiento incorrectos en un programa.

Error (error):
 Es una equivocación cometida por un desarrollador. Algunos ejemplos de errores son: un error de tipeo, una malinterpretación de un requerimiento o de la funcionalidad de un método, una acción humana que conduce a un resultado incorrecto. Por ejemplo: Divisiones entre cero. Es una tipo de manifestación del defecto en el sistema que se ejecuta.

Falla (failure):
Puede presentarse en cualquiera de las etapas del ciclo de vida del software aunque los más evidentes se dan en la etapa de desarrollo y programación. Es la incapacidad de un sistema o de alguno de sus componentes para realizar las funciones requeridas dentro de los requisitos de rendimiento especificados.

Errores de software 
. Marinero sin rumbo (1962) 
 

Coste: 18,5 millones de dólares. 

Desastre: El cohete Mariner 1, en una investigación espacial destinada a Venus, se desvió de su trayectoria de vuelo poco después de su lanzamiento. El control de la misión destruyó el cohete pasados 293 segundos desde el despegue. 

Causa: Un programador codificó incorrectamente en el software una fórmula manuscrita, saltándose un simple sobre una expresión. Sin la función de suavizado indicada por este símbolo, el software interpretó como serias las variaciones normales de velocidad y causó correcciones erróneas en el rumbo que hicieron que el cohete saliera de su trayectoria. 

2. El hundimiento del Hartford Coliseum (1978) 

 

Coste: 70 millones de dólares, más otros 20 millones en daños a la economía local. 

Desastre: Sólo unas horas después de que miles de aficionados al hockey abandonaran el Hartford Coliseum, la estructura de acero de su techo se desplomaba debido al peso de la nieve. 

Causa: El desarrollador del software de diseño asistido (CAD) utilizado para diseñar el coliseo asumió incorrectamente que los soportes de acero del techo sólo debían aguantar la compresión de la propia estructura. Sin embargo, cuando uno de estos soportes se dobló debido al peso de la nieve, inició una reacción en cadena que hizo caer a las demás secciones del techo como si se tratara de piezas de dominó. 

La CIA le da gas a los soviéticos (1982) 

 

Coste: Millones de dólares, daño significativo a la economía soviética. 

Desastre: El software de control se volvió loco y produjo una presión excesiva en la tubería de gas transsiberiana, provocando la mayor explosión no nuclear, causada por el hombre, de la historia de la tierra. 

Causa: los agentes de la CIA supuestamente introdujeron un error en el sistema informático canadiense adquirido por los soviéticos para controlar sus tuberías de gas. La compra era parte de un estratégico plan soviético para robar u obtener de forma encubierta tecnología secreta de los Estados Unidos. Cuando la CIA descubrió la compra, sabotearon el software de forma que éste superara la inspección soviética pero fallara una vez operativo. 


 Y2K (1999) 
 

Coste: 500.000 millones de dólares. 

Desastre: El desastre para unos es la suerte de otros, como demostró el tristemente célebre error del año 2000 (Y2K). Las compañías gastaron millones en programadores para arreglar un problema en las aplicaciones antiguas. Mientras no se produjeron fallos informáticos significativos, la preparación para el bug Y2K tuvo un importante impacto en coste y tiempo en todas las industrias que utilizaban tecnología informática. 

Causa: Para ahorrar espacio de almacenamiento, los sistemas antiguos solían guardar los años de las fechas como un número de dos dígitos, como "99" para "1999". al llegar el año 2000, las aplicaciones iban a interpretar "00" como 1900. 


Bibliografia
http://www.taringa.net/posts/info/1890933/Los-20-desastres-mas-famosos-relacionados-con-el-Software.html
http://www.ctr.unican.es/asignaturas/Ingenieria_Software_4_F/Doc/M7_09_VerificacionValidacion-2011.pdf
http://es.wikipedia.org/wiki/Pruebas_de_validaci%C3%B3n