martes, 13 de noviembre de 2012

Tarea 11

Logica Temporal Lineal:
La lógica temporal es una extensión de la lógica modal, la cual es prácticamente usada en sistema de reglas, donde esta presente el tiempo.Wikipedia

Connectives and Temporal Operators


Como ejemplo tomaré los enunciados:

1.-At some point, i will hold forever
Solucion


2.-If a student forgets a coin in the coin slot, she (or another student) will use this coin to get a drink before any professor can do this.
Solucion:
(sfc(¬pct R eac))
sfc : student forgets a coin
eac: Student uses coin
pct :professor uses coin

Referencias:
Enlace 1
Enlace 2

sábado, 3 de noviembre de 2012

Tarea 10 Propiedades de modelos de verificacion

Para esta semana se nos pide Inventar una expresion w-regular y crear un NBA(Non-deterministic Buchi Automata)

En ciencias de la computación y la teoría de autómatas , un autómata Büchi es un tipo de autómata , que se extiende un autómata finito a los insumos infinitas. Acepta una infinita secuencia de entrada si y sólo si existe una ejecución del autómata que visita (al menos) uno de los estados finales infinitas veces. 
  • Contener por lo menos 2 Simbolos
  • Contener por lo menos 2 operadores
Solucion:

Expresion:




Representacion NBA :
Donde
Q = {q0.q1,q2,q3} Conjunto de Estados
S={q0} Estado Inicial
F={q0,q1,q3}Estados Finales
Σ = {a,b} Alfabeto de Entrada



Nota:
* Es para encontrar algo que se encuentra repetido 0 o mas veces
+ se encuentra repetido 1 o mas veces
.  cualquier caracter individual solo el salto de linea

Referencias:
http://web.ing.puc.cl/~marenas/iic3800/clases/automata-1-imp.pdf

lunes, 29 de octubre de 2012

Sistema de Transiciones

  •  La tarea consiste en :
  • Inventar un ejemplo simple.
  • Modélar  un sistema de transiciones o un grafo de programa.
Solucion:

Inventar ejemplo Simple:
Se me ocurrio un ejemplo simple de transferencia de archivos por ejemplo NFS con Login:

Modélar  un sistema de transiciones:

Sistema simple de transferencia de archivos por ejemplo NFS con Login



Estado
Transicion
Proximo Estado
login
Error Login
login
Login Exitoso
Transferencia Archivo
Transferencia
Archivo
/dir
Transferencia Archivo
get
Transferencia Archivo
salir
quitar
logout
login


Otro sistema  seria el de una terminal de recarga de un sistema de prepago :












martes, 23 de octubre de 2012

Red Petri

La tarea consiste en :
  • Investigar un poco sobre Redes Petri
  • Inventar un pequeño sistema concurrente
  • Modelar la Red Petri en Python, utilizando python-snakes

Para esto usaremos  python y el paquete snakes-python lo puedes descargar en el siguiente enlace:

Tutorial:

Definicion Red Petri:
Es una representación matemática o gráfica de un sistema a eventos discretos en el cual se puede describir la topología de un sistema distribuido, paralelo o concurrente. Son una generalización de la teoría de autómatas que permite expresar un sistema a eventos concurrentes. 

Una red de Petri es un grafo orientado con dos tipos de nodos: lugares (representados mediante circunferencias) y transiciones (representadas por segmentos rectos verticales).

Para esta tarea hice una red petri sencilla en donde se modela :
sistema de entrada y salida de vehiculos con una tarjeta RFID

http://wabingenieria.com/usos-rfid/


Codigo python
Resultado:




Referencias:
http://code.google.com/p/python-snakes/source/browse/doc/tutorial.txt?spec=svn.abcd.b7e58afd5c1b845899816065fff49d782e02a56b&repo=abcd&r=b7e58afd5c1b845899816065fff49d782e02a56b
http://www.uhu.es/diego.lopez/AI/auto_trans-tema3.PDF
http://www.ibisc.univ-evry.fr/~fpommereau/snakes-api/snakes.plugins.gv-module.html

sábado, 6 de octubre de 2012

Aplicaciones de la lógica predicativa

Esta tarea es  investigar una aplicación de la logica predicativa escogí el tema de Agentes Inteligentes



Un agente puede considerarse como aquel objeto que percibe su ambiente y que responde o actúa en dicho ambiente. Percibe por medio de sensores; en los humanos, los sensores son: ojos, oídos, olfato, tacto,... Respondemos por medio de efectores como: manos, pierna, boca. En una máquina, estos efectores son motores; en un programa son acciones. Un agente robótico tiene como sensores cámaras , infrarrojos, y los motores 

un agente racional deberá emprender todas aquellas acciones que favorezcan obtener el máximo de su medida de rendimiento, basándose en el conocimiento y en las percepciones. El concepto de agente permite pensar en él como herramienta para el análisis de sistemas inteligentes.  
Una vez que se ha visualizado que el comportamiento de un agente depende exclusivamente de la secuencia de percepciones en un momento dado, podemos elaborar una tabla de acciones que podría realizar un agente a partir de un conjunto de percepciones. Especificar qué tipo de acción deberá emprender un agente como respuesta a una determinada secuencia de percepciones es el diseño de un agente. 

El agente debe basarse exclusivamente en el conocimiento integrado. se dice que el agente no tiene autonomía, pero podemos decir que un sistema será autónomo en la medida en que su conducta está definida por su propia experiencia. como la evolución nos ha de eventos que facilitan sobrevivir hasta aprender correctamente, también se crearán agentes inteligentes (artificiales) con cierto conocimiento inicial y de capacidad para aprender.

La intención de la IA es diseñar agentes "(programas) con autonomía, ejecutándose en algún hardware (arquitectura). En general, el hardware pone al alcance del agente percepciones obtenidas mediante los sensores; lo ejecuta y alimenta con las acciones seleccionadas

El ambiente plantea tantos desafíos que algunas veces resulta muy difícil para un software desempeñarse adecuadamente.

función agente(percepciones) retornar acción memoria:
    memoria <- actualizar_memoria(memoria, percepciones) 
    acción <- escojer_mejor_acción(memoria)
    memoria <- actualizar_memoria(memoria, acción)

    retornar acción 


ejemplo se construye agentes teniendo como base la función agente Sea un agente conducido por una tabla:

función agente_conducido_por_ tabla(percepciones) retornar acción percepciones:
   añadir percepción al final de la percepciones
   acción <- consulta(percepciones, tabla) retornar acción

el agente es un taxista requiere saber cómo es el recorrido, quién más circula en la vía, a qué velocidad puede desplazarse. Claro que esta información la obtiene de percepciones que ofrecen: cámaras, velocímetro, contador. Sin olvidar que debe conocer el estado del vehículo, lo cual lo logra por medio de sensores. También contará con dispositivos que le permiten comunicarse con los pasajeros, quienes le informaran cuál es el destino. las acciones deben de ser las mismas frenar,acelerar

¿Cuál sería la medida de desempeño? Entre las medidas deseables es llegar al destino correcto, no realizar violaciones de tránsito ni molestias a otros conductores, ofrecer seguridad y comodidad a los pasajeros,...

Sin embargo, es necesario definir el ambiente en el cual se ha de movilizar. ¿Calles con huecos?, ¿vía circunvalar?, ¿autopista del norte?, ¿poco o mucho tránsito?, ¿con semáforos o sin semáforos?

se selecciona para ejemplo :
* Agentes de reflejo simple.

Agentes de reflejo simple

Estara estructurado por un conjunto de reglas de condición-acción, tal como se hacen los choferes

SI semáforo en amarillo ENTONCES empezar a frenar.
SI carro adelante prende stop ENTONCES empezar a frenar.
SI calle cerrada ENTONCES gire en dirección permitida.
SI dirección permitida es derecha ENTONCES girar derecha.
SI ambas direcciones permitidas ENTONCES girar lado inmediato.


función agente_reflejo_simple(percepciones) retornar acción 
     percepciones:
     reglas:
     estado <- interpretar_entrada(percepciones) 

     regla <- regla_coincidencia(estado, reglas) 
     acción <- regla_acción(regla)
retornar acción 


Referencias.
http://www.uv.es/~jkliment/Documentos/TeoMod.pc.pdf
http://www.depi.itch.edu.mx/apacheco/expo/html/ai12/
http://www.aic.uniovi.es/ssii/SSII-T1-Introduccion.pdf


domingo, 9 de septiembre de 2012

Lógica Predicativa



Se selecciono  un ejercicio del libro  Lean Symbolic Logic de Lewis Carroll
Los enunciados  son los siguientes:



Texto 
Bores are dreaded;
No bore is ever begged to prolong his visit.
    No one, who is dreaded, is ever begged to prolong his visit.



El Universo son las personas. las siguientes expresiones donde la x es una variable que tendra valores en un cuantificador.

A(x): Bores
B(X):Dreaded
C(X):Begged to prolong his visits

Cuantores:
: Cuantificador Universal Todos, para todos
: Cuantificador Existencial Por lo menos uno, algunos, algunas

Se sustituira los enunciados con cuantores lógicos y usando las expresiones.
  • Bores are dreaded = A(x)→B(x)
  • No bore is ever begged to prolong his visit .=¬A(x)→C(x)
  • No one, who is dreaded, is ever begged to prolong his visit. =: ¬B(x)→C(x)


Conclusion:
Some  dreaded  persons are not begged to prolong their visits.


∃(x)B(x)¬C(x)



martes, 4 de septiembre de 2012

BDD

Para la Tarea 4 se pidió lo siguiente:
  • Inventen una expresión Booleana.
  • Construyan y dibujen su BDD.
  • Reduzcan el BDD resultante a un ROBDD.
  • Dibujen el ROBDD resultante.


La expresión booleana que uso es la siguiente:


¬(a ^¬ b) => ¬ c


Tabla de verdad

Binary decision tree

[Binary decision tree]

BDD Y ROBDD
BDD
ROBD



Referencias:
http://www.cs.unb.ca/~gdueck/courses/cs4835/bdd97.pdf



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