lunes, 27 de agosto de 2012

Aplicación de la lógica proposicional

Lógica es el estudio del razonamiento, se refiere específicamente a si el razonamiento es correcto. 

Una proposición es un enunciado que puede afirmarse como verdadero o falso. 

"Lógica proposicional es la parte de la lógica que estudia la formación de proposiciones complejas a partir de proposiciones simples."


Proposiciones

Simples. Son las oraciones que se forman sin usar enlaces.
  • La casa es roja
  • Carlos es estudiante
Complejas. Son las oraciones que están formadas por dos o más proposiciones simples ligadas por un conector.
  • María es chef o es cantante
  • Si ayer llovió entonces hoy sale el sol
  • 2 es par y 9 es impar

Para validar preposiciones se necesita realizar las tablas de verdad, las cuales son diseños combinacionales dado por 2^n donde n es el número de proposiciones simples.

Los conectivos lógicos principales que son utilizados para formar proposiciones complejas son  ¬, ∨, ∧, →, ↔ ( no, o, y, si... entonces, si y sólo si ).

Las tablas de verdad de los conectivos principales son:


Conjunción.
La proposición p ^ q es verdadera solamente si p y q son verdaderas, en los demás casos es falsa.

Ejemplo:
Puedes salir cuando laves la ropa y arregles tu cuarto.



Disyunción.
La disyunción es verdadera si por lo menos una de las proposiciones es verdadera, y es falsa solamente cuando todas las preposiciones son falsas.

Por ejemplo.
Puedes ir a dormir o puedes hacer tu tarea



Implicación. 
La proposición p → q es falsa solamente si el antecedente es verdadero y el consecuente es falso. En los demás casos es verdadera.

Ejemplo.
p = Tengo dinero
q = Voy al cine
→ q = Si tengo dinero, entonces voy al cine

Doble implicación.
La proposición p ↔ q es verdadera cuando ambas preposiciones son verdaderas o ambas falsas.

Ejemplo.
r = El polígono es de cuatro lados
s = Es un cuadrilátero
↔ s = El polígono es de cuatro lados si y sólo si es un cuadrilátero.




Negación.
La negación es el conectivo lógico que permite cambiar el valor de verdad de una proposición.

Si p es verdadero, su negación ¬ es falsa y viseversa.

Por ejemplo. 
p = todos los triángulos son equiláteros
¬p = NO todos los triángulos son equiláteros



La lógica computacional puede ser aplicada al campo de la computación, su uso principal es en circuitos computacionales, programación lógica y análisis y optimización de algoritmos.

Sistema combinacional

Un sistema combinacional es un sistema digital en el que las salidas dependen de la combinación de sus entradas. Las funciones (OR, AND, NAND, XOR) son booleanas, o sea que cada función se puede representar en una tabla de verdad. 

Metodología de un sistema combinacional.

1. Especificar el sistema. En esta parte se detalla el propósito del diseño.

2. Determinar las entradas y salidas. Identificar las variables del problema, identificar entradas y salidas.

3. Construir la tabla de verdad. Trasladar el comportamiento del sistema a una tabla de verdad, indicando para cada combinación de entrada, la salida o salidas más convenientes para el diseño.

4. Minimizar. Para obtener las ecuaciones mínimas se pueden utilizar diferentes métodos como manipulación algebraica, mapas de karnaugh, entre otros.

5. Diagrama esquemático. Al obtener las ecuaciones mínimas, se representan en forma de símbolos para su análisis y comprensión.

6. Implementar. Hay dos formas de implementación, circuitos integrados de función fija (TTL) o dispositivos lógicos programables (PDLs).


Aplicación 

Para la tarea de esta semana nos pidieron lo siguiente:
"Investiguen aplicaciones de la lógica proposicional y documenten uno en su tercera tarea."

Para esta tarea explicaré una aplicación de circuitos combinatorios.

En una granja se tiene: 
  • Un granjero con una puerta muy grande y pesada en donde se requiere de varias personas para abrirla o cerrarla.
  • Un corral de ovejas.
  • Ocasionalmente llegan lobos.



El granjero necesita un sistema de alarma diseñado para lo siguiente:
  • Sea activado cuando las ovejas se encuentren fuera del corral y la puerta este abierta, para realizar una acción correctiva ya sea cerrar la puerta o poner las ovejas en el corral.
  • Sea activado cuando se encuentren los lobos cerca y las ovejas se encuentren fuera del corral, para realizar la acción correctiva de ahuyentar a los lobos.

1. Especificar el sistema
Las variables que intervienen son puerta, ovejas, lobos y alarma. Para las primeras tres variables se tienen sensores de deteccion.

Puerta
Abierta = 1 
Cerrada = 0

Ovejas
Fuera del corral = 1
Dentro del corral = 0

Lobos
Están cerca = 1 
Están lejos = 0

Para el dispositivo de alarma

Alarma
Activada = 1
Desactivada = 0


2. Determinar entradas y salidas
La puerta, las ovejas y los lobos (P, O y L) son las entradas del sistema, mientras que la Alarma (A) es la salida.

Diagrama de bloques.
3. Tabla de verdad

La alarma se activará cuando:
  • Las ovejas estén afuera y los lobos estén cerca.
  • La puerta esté abierta y las ovejas estén afuera del corral.
  • La puerta esté abierta, las ovejas estén afuera y los lobos estén cerca.


4. Minimizar

Para simplificar las ecuaciones utilizamos el método de Mapas de Karnaugh.


La ecuación quedaría de la siguiente manera:
F(A) = PO + OL 
F(A) = O (P + L)

Con esto se puede concluir que la alarma se activará cuando la puerta este abierta y las ovejas fuera del corral (PO) o cuando las ovejas estén fuera del corral y los lobos estén cerca (OL).


5. Diagrama esquemático



6. Implementación
La implementación se puede realizar con un dispositivo lógico programable (PLD) como el GAL16V8.

Referencias:
Proposiciones lógicas
Libro Matemáticas Discretas. Richard Johnsonbaugh. Sexta Edición.
Sistemas Digitales.

jueves, 23 de agosto de 2012

Grados de Libertad


En un sistema físico, el término grado de libertad se refiere a la cantidad mínima de números reales que se necesitan especificar para determinar completamente el estado físico. Este concepto lo podemos encontrar en mecánica clásica y termodinámica.

En mecánica, por cada una de las partículas libres del sistema y por cada dirección en la que se pueden moverse existen dos grados de libertad, uno se relaciona con la posición y el otro con la velocidad.

Cuando existan ligaduras entre las partículas, el número de grados de libertad será igual al número total de variables menos el número de ligaduras que las relacionan.



GRADOS DE LIBERTAD EN MECÁNICA CLÁSICA

En mecánica hamiltoniana, el número de grados de libertad de un sistema coincide con la dimensión topológica del espacio de fases del sistema.

Un conjunto de N partículas que interactúan entre sí y se mueven sin restricciones en un espacio tridimensional tiene 6N grados de libertad, o sea tres coordenadas de posición y tres velocidades.



EJEMPLO DE VARIOS GRADOS DE LIBERTAD

Considerando un sistema de 3 grados de libertad,



Hay 3 grados de libertad en este problema, para poder caracterizar el distema tenemos que tener las posiciones de las tres masas (x1, x2, y x3).

Se necesitan tres diagramas de cuerpo libre para formar las ecuaciones de movimiento. Sin embargo, es  posible formar las matrices de coeficientes directamente, ya que en cada parámetro en un sistema de masa-amortiguador-resorte tiene un papel muy importante.

Ecuaciones de movimiento para diagramas de cuerpo libre

Las ecuaciones de movimiento se pueden obtener de los diagramas de cuerpo libre, basados en la segunda ley de movimiento de Newton, F = m(a)



Las ecuaciones de movimiento se pueden expresar de la siguiente manera:



Entonces, la matriz de ecuaciones quedará así:




Ecuaciones de movimiento de la formación de la matriz directa
Si vemos las matrices de coeficientes anteriores, podemos encontrar que todos los términos de la diagonal principal son positivos y contienen términos que están directamente relacionados con los elementos correspondientes.
Los demás elementos son negativos y simétricos, son simétricos por que están unidos a dos elementos y los efectos son los mismos en esos dos elementos (condición conocida como teorema de reciprocidad de Maxwell) y son negativos debido a los desplazamientos o velocidades relativas de los dos elementos conectados.
En resumen para crear esas matrices se realizan los siguientes pasos:
1.     Determinar el número de grados de libertad del problema, estos determinan el tamaño de la masa, amortiguación y matrices de rigidez. Normalmente, un grado de libertad puede relacionarse con cada masa.
2.     Añade los valores de las masas (si están asociadas con grados de libertad) en las diagonales de la matriz de masas, el orden exacto no importa. Todos los demás valores de la matriz son ceros.







3.     Para cada masa (asociada con un grado de libertad), suma la amortiguación de todos los amortiguadores que tiene esa masa, agrega el valor en la matriz de amortiguación que corresponda a la masa en la matriz de masa.




4.     Identificar los amortiguadores que están conectados a dos masas, etiqueta las masas como m y n, Escribe el amortiguador negativo en los lugares (m,n) y (n,m) en la matriz de amortiguamiento. Repite el procedimiento para todos los amortiguadores, los términos restantes en la matriz de amortiguamiento son ceros.





5.     Para cada masa, suma la rigidez de todos los resortes unidos a la masa, añade ese valor en la matriz de rigidez en la diagonal que corresponde a la masa en la matriz de masa.




6.     Identificar los resortes que están conectados a dos masas, etiquetarlos como m y n. Escribir el resorte negativo en los lugares (m,n) y (n,m) en la matriz de rigidez. Repite el procedimiento para todos los resortes, los términos que restan en la matriz de rigidez son ceros.



7.     Suma las fuerzas externas aplicadas sobre cada masa (asociada con un grado de libertad), agrega ese valor en el vector de fuerza en el lugar de la fila correspondiente a la fila de esa masa en la matriz de masa.




8.     La matriz resultante de movimiento es:



One time pad - Python

For this introductory assignment, we have to do a one time pad program, I did it in python. 

"In cryptography, the one-time pad (OTP) is a type of encryption which has been proven to be impossible to crack if used correctly. Each bit or character from the plaintext is encrypted by a modular addition with a bit or character from a secret random key (or pad) of the same length as the plaintext, resulting in a ciphertext."

This method can be implemented as a software program, using data files as input (plaintext), output (ciphertext) and key material. The XOR operation is often used to combine the plaintext with the key. 

This is my code, it is very simple.







Screenshots:



References:

lunes, 20 de agosto de 2012

Tautología

Para esta semana, la tarea fue crear una tautología. Introduciendo un poco en el tema hablaremos del concepto de tautología.


"En lógica, una tautología es una fórmula bien formada de un sistema de lógica proposicional que resulta verdadera para cualquier interpretación; es decir, para cualquier asignación de valores de verdad que se haga a sus fórmulas atómicas"

Para esta tarea hubo algunos requerimientos:
  • Utilizar 3 variables en la expresión
  • Utilizar 4 conectivos lógicos
La expresión que inventé fue la siguiente:

((p v q) v r) -> (p^¬q), la siguiente tabla corresponde a la tabla de verdad de esta expresión, esta expresión fue mi primer intento para crear una tautología y como pueden observar no fue exitoso, pero me sirvió para verla y pensar que podría cambiar para que fuera tautología.



Hice un cambio pequeño y la nueva expresión quedo: (p^¬q) -> ((p v q) v r), con esto podemos ver que se logró crear una tautología.



Ahora veamos el árbol correspondiente a la tautología anterior.



miércoles, 8 de agosto de 2012

Automatización y Control de Sistemas Dinámicos

Proximamente..

Verificación y Validación de Software


Verificación y Validación de Software
La verificación y validación de Software sirven para valorar y mejorar la calidad de los productos de trabajo generados durante el desarrollo y modificación del software. 
Existen dos tipos de verificación, formal y del ciclo de vida. La verificación formal es una demostración matemática de la concordancia del código fuente con sus especificaciones y la del ciclo de vida es el proceso de determinar el grado de los productos de trabajo de una fase dada del ciclo de desarrollo cumplen con las especificaciones establecidas en las fases anteriores.
La validación es la evaluación del software al final del proceso de desarrollo del software para determinar su conformidad con los requisitos IEEE.
V&V implican la valoración de los productos para determinar el apego a las especificaciones, incluyen:
  • Especificaciones de requisitos
  • Documentación del diseño
  • Estándares del lenguaje de instrumentación
  • Estándares organizacionales
  • Expectativas del usuario


Fallos en Software
Existen muchísimos errores que se pueden presentar en un software, el origen de este concepto es por un fallo en el hardware. En 1968, en la primera conferencia organizada por la OTAN sobre el desarrollo de software se definió el concepto de Crisis de Software donde se dijo que desarrollar un software era algo complejo que tenía probabilidad de que aparecieran errores.
Algunos accidentes graves que se han presentado:
  • La Mariner 1 (1962). Fue la primera misión de la NASA para sobrevolar Venus. El cohete no duró más de 5 minutos en vuelo cuando se desvió de su trayectoria y fue autodestruido. El motivo de este fallo fue la omisión de un guión '-' en el programa que controlaba el cohete.

  • Therac-25 (1985-1987). La Atomic Energy of Canada Limited creó una máquina de radioterapia para uso en la medicina. Se registraron seis accidentes en los que los pacientes tuvieron alta sobredosis de radiación. En las investigaciones se responsabilizó al software por un código indocumentado y con fallos.

  • AT&T (1990): La empresa AT&T perdió unos $60 millones de dólares al dejar aproximadamente a 60.000 clientes sin comunicación en llamadas de larga distancia. El motivo de esta caída fue debido a los interruptores que se reseteaban cada pocos segundos debido a un fallo en una actualización del software. Este fallo provocaba una caida cascada entre los diferentes interruptores.

  • Chips Pentium (1994): Un error en el juego de instrucciones en los chip Pentium repercutió en la empresa $475 millones de dólares de costes en recogida y reenvío de procesadores. El error se reproducía al realizar una división con coma flotante en el que a partir del cuarto dígito decimal no daba valores correctos. Este fallo empezó a llamarse “bug de FDIV“.

Encontré también una página de Top 10 de los errores de software más costosos, está muy interesante les dejo el link.

Referencias: