npN ombreP roceso = Solicitud de medicamentos en medicina interna
actores[Actor] = [J ef a de piso, J ef e de area, Encargado de
f armacia, Intendente, M edico base]
nrol1N ombreRol = Solicitando medicamentos
Figura 57: RAD del proceso “Solicitar medicamentos”
nrol3N ombreRol = Recibiendo solicitud de medicamentos
nrol4N ombreRol = Surtiendo medicamentos
nomroles[N ombreRol] = [nrol1, nrol2, nrol3, nrol4]
artef actos[Artef acto] = [Solicitud de medicamentos, M edicamentos,
Hoja de control, receta]
com1Comunicacion = hSolicitando medicamentos, Autorizando solicitud de
medicamentos,[Solicitud de medicamentos]i
com2Comunicacion = hSolicitando medicamentos, Recibiendo solicitud de
medicamentos,[Solicitud de medicamentos]i
[Hoja de control, M edicamentos]i
comunicaciones[Comunicacion] = [com1, com2, com3]
procesoP roceso = hnp, actores, roles, artef actos, comunicacionesi
a1Actividad = hV erif icar medicamento existente, Llenar solicitud de medicamentosi
a2Actividad = hLlenar solicitud de medicamentos, Autorizar la solicitudi
a5Actividad = hRecibir medicamentos y copia de solicitud de medicamentos,
hF irmar hoja de control de f armaciai
a7Actividad = hV erif icar medicamento surtido con copia de la solicitud de
medicamentos, Es correcto?i
a10Actividad = hRecibir medicamento,hF indeF lujo, Esta completo?ii
a12Actividad = hRealizar lista de negativas,hF indeF lujo, F indeRolii
a3InteraccionCompuesta = hAutorizar la solicitud,hEntregar solicitud
de medicamentos,[hF irmar solicitud de
medicamentos, Autorizando solicitud de medicamentosi]ii
a4InteraccionCompuesta = hEntregar solicitud de medicamentos,hRecibir
medicamentos y copia de solicitud de medicamentos,
[hRecibir solicitud de medicamentos, Recibiendo solicitud de medicamentosi]ii
a6InteraccionCompuesta = hF irmar hoja de control de f armacia,hV erif icar medicamento
[hRecibir hoja de control f irmada de recibido, Surtiendo medicamentosi]ii
a9InteraccionCompuesta = hReclamar medicamento,hRecibir medicamento,
[hRecibir reclamo, Surtiendo medicamentosi]ii
a8Condicional = h¿Es correcto?,[hSi,hF indeF lujo,¿Est´a completo?ii,
hN o, Reclamar medicamentoii]i
a11Condicional = h¿Esta completo´ ?,[hSi,hF indeF lujo, F indeRolii,
hN o, Realizar lista de negativasi]i
actividades1[Actividad] = [a1, a2, a3, a4, a5, a6, a7, a8, a9,
a10, a11, a12]
rol1Rol = hnrol1, actividades1i
b1Actividad = hF irmar solicitud de medicamentos, F indeRoli
actividades2[Actividad] = [b1]
rol2Rol = hnrol2, actividades2i
c1Actividad = hRecibir solicitud de medicamentos, F indeRoli
actividades3[Actividad] = [c1]
rol3Rol = hnrol3, actividades3i
d1Actividad = hSurtir medicamentos, Llenar solicitudi
d2Actividad = hLlenar solicitud, Entregar medicamentosi
d4Actividad = hRecibir hoja de control f irmada de recibido,
¿Hubo errores?i
d3InteraccionCompuesta = hEntregar medicamentos,hRecibir hoja de control
f irmada de recibido,[hRecibir medicamentos y copia
de solicitud de medicamentos, Solicitando medicamentosi]ii
d7InteraccionCompuesta = hEntregar medicamento,hhF indeF lujo, F indeRoli,
[hRecibir medicamento, Solicitando medicamentoi]ii
d5Condicional = h¿Hubo errores?,[hSi, Recibir reclamoi,
hN o,hF indeF lujo, F indeRolii]i
actividades4[Actividad] = [d1, d2, d3, d4, d5, d6, d7]
rol4Rol = hnrol4, actividades4i
roles[Rol] = [rol1, rol2, rol3, rol4]
Demostraci´on de las aseveraciones
del cap´ıtulo V
En este ap´endice se presentan las demostraciones de las aseveraciones hechas en el cap´ıtulo V.
La aseveraci´on 1 establece que las funciones descripcionCond y descripcionInt est´an bien definidas, a continuaci´on se presenta la demostraci´on de dicha aseveraci´on.
Demostraci´on de la aseveraci´on 1: hay que demostrar que cada una de las ecuaciones de descripcionCond y descripcionInt regresan siempre un elemento de su codominio. Por lo que hay que analizar varios casos.
La funci´ondescripcionCondrecibe como argumentos una listaysde tipo [[Alternativa]] y una lista resto de tipo [ElementoRol], resto es de la forma x :resto1, teniendo los siguientes casos. 1. Caso 1: ys = [[]], entonces descripcionCond ys resto = (Ecuaci´on (11) de descripcionCond) descripcion resto | {z }
(Suponiendo que descripcionregresa una lista Resultado de tipo [N ombre]) = Resultado
Por lo tanto la ecuaci´on (11) est´a bien definida. 2. Caso 2: ys es de la forma
[[hRespuesta, Ref erenciai] : []] y x tiene los siguientes casos:
(a) x es de tipo Actividady es de la forma:
hN ombreActividad,hF indeAlternativa, Ref erencia1ii
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (12) dedescripcionCond)
Respuesta:descripcionInt [[]]x:resto1
| {z }
(Ecuaci´on (15) dedescripcionInt)
Respuesta:N ombreActividad :descripcionCond[[]]resto1
| {z }
= (Caso 1)
Respuesta:N ombreActitividad:Resultado
Por lo tanto la ecuaci´on (15) de descripcionInt regresa una lista de tipo [N ombre].
(b) x es de tipo InteraccionCompuesta y es de la forma:
hN ombreActividad,hhF indeAlternativa, Ref erencia1i,
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (12) dedescripcionCond)
Respuesta:descripcionInt [[]]x:resto1
| {z }
(Ecuaci´on (18) dedescripcionInt)
Respuesta:N ombreActividad :descripcionCond[[]]resto1
| {z }
= (Caso 1)
Respuesta:N ombreActitividad:Resultado
Por lo tanto la ecuaci´on (18) de descripcionInt regresa una lista de tipo [N ombre].
(c) x es de tipo Actividad: x y tiene la forma
hN ombreActividad, Ref erencia1i
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (12) dedescripcionCond)
Respuesta:descripcionInt [[]]x:resto1
| {z }
(Ecuaci´on (14) dedescripcionInt)
Respuesta:N ombreActividad descripcionInt [[]]resto1 (d) x es de tipo InteraccionSimpleentonces
= (Ecuaci´on (12) dedescripcionCond)
Respuesta:descripcionInt [[]]x:resto1
| {z }
(Ecuaci´on (16) dedescripcionInt)
Respuesta:N ombreActividad descripcionInt [[]]resto1 (e) x es de tipo InteraccionCompuesta entonces:
descripcionCond ys x:resto1 = (Ecuaci´on (12) dedescripcionCond)
Respuesta:descripcionInt [[]]x:resto1
| {z }
(Ecuaci´on (17) dedescripcionInt)
Respuesta:N ombreActividad descripcionInt [[]]resto1 (f) x es de tipo Condicional y tiene la forma
hCondicion, ai
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (12) de descripcionCond)
Respuesta:descripcionInt[[]] x:resto1
| {z }
(Ecuaci´on (19) de descripcionInt)
(g) x es de tipo P aralela y tiene la forma
hDescripcion, ai
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (12) de descripcionCond)
Respuesta:descripcionInt[[]] x:resto1
| {z }
(Ecuaci´on (20) de descripcionInt)
Respuesta:Descripcion descripcionCond a: [[]] resto1
Si se hace la suposici´on que en los casos 2c, 2d y 2e la lista resto1 no contiene elementos de tipo Condicional ni P aralela, entonces se seguir´a aplicando la funci´on descripcionIntsobre los elementos de la lista resto1, hasta que se llegue a un caso del tipo 2a o del tipo 2b que ya se demostr´o que regresan una lista de tipo N ombre. Por lo que la ecuaci´on (12) de descripcionCond regresa siempre una lista de tipo [Nombre], si ys es de la forma
[[hRespuesta, Ref erenciai] : []]
y la listax:resto1 no contiene elementos de tipoCondicional o P aralela. 3. Caso 3: ys es de la forma
[[] : [hRespuesta, Ref erenciai] : []] y x tiene los siguientes casos:
(a) x es de tipo Actividady es de la forma:
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
(Ecuaci´on (15) de descripcionInt)
N ombreActividad:
descripcionCond[[hRespuesta, Ref erenciai] : []] resto1
| {z }
= (Caso 2)
N ombreActitividad:Resultado
(b) x es de tipo InteraccionCompuesta y es de la forma:
hN ombreActividad,hhF indeAlternativa, Ref erencia1i,
hN ombreActividad, N ombreRoliii
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
= (Ecuaci´on (18) de descripcionInt)
N ombreActividad:
descripcionCond[[hRespuesta, Ref erenciai] : []] resto1
| {z }
= (Caso 2
(c) x es de tipo Actividad: x es de la forma
hN ombreActividad, Ref erencia1i
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
(Ecuaci´on (14) de descripcionInt)
N ombreActividad:descripcionInt [[hRespuesta, Ref erenciai] : []] resto1 (d) x es de tipo InteraccionSimpleentonces
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
(Ecuaci´on (16) de descripcionInt)
N ombreActividad:descripcionInt [[hRespuesta, Ref erenciai] : []] resto1 (e) x es de tipo InteraccionCompuesta entonces:
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
N ombreActividad:descripcionInt [[hRespuesta, Ref erenciai] : []] resto1 (f) x es de tipo Condicional y tiene la forma
hCondicion, ai
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
(Ecuaci´on (19) de descripcionInt)
Condicion:descripcionCond a: [[hRespuesta, Ref erenciai] : []] resto1 (g) x es de tipo P aralela y tiene la forma
hDescripcion, ai
entonces
descripcionCond ys x:resto1 = (Ecuaci´on (13) de descripcionCond)
descripcionInt[[hRespuesta, Ref erenciai] : []] x:resto1
| {z }
(Ecuaci´on (20) de descripcionInt)
Si se hace la suposici´on que en los casos 3c, 3d y 3e la lista resto1 no contiene elementos de tipo Condicional ni P aralela, entonces se seguir´a aplicando la funci´on descripcionIntsobre los elementos de la lista resto1, hasta que se llegue a un caso del tipo 2a o del tipo 2b que ya se demostr´o que regresan una lista de tipo N ombre. Por lo que la ecuaci´on (13) de descripcionCond regresa siempre una lista de tipo [Nombre], si ys es de la forma
[[] : [hRespuesta, Ref erenciai] : []]
y la listax:resto1 no contiene elementos de tipoCondicional o P aralela. 4. Hasta el momento se han demostrado solo algunos casos sobre las ecuaciones de
las funcionesdescripcionCondydescripcionInt. Para completar la demostraci´on sobre todos los casos y sobre los sub casos pendientes es necesario hacer una hip´otesis de inducci´on.
5. Hip´otesis inductiva: suponer que la funci´on descripcionCondsiempre regresa una lista Resultado de tipo [N ombre] para cualquier lista finita r1 : r2 de tipo [[Alternativa]] y una lista restode tipo ElementoRol.
descripcionCond r1 :r2 resto= Resultado de tipo [Nombre]
6. En los casos 2 y 3, quedaron pendientes los sub casos 2f, 2g, 3f y 3g, los cuales cumplen con la hip´otesis inductiva (5), adem´as de que se pueden generalizar los sub casos 2c, 2d, 2e, 3c, 3d y 2e, por lo que si en los elementos restantes de la lista
restoexisten elementos de tipo Condicional y P aralela, por la definici´on de las ecuaciones siempre se llega a la forma de la hip´otesis inductiva, y por tal hip´otesis se garantiza que la funci´ondescripcionCond en esos casos regresar´a siempre una lista de tipo [N ombre] y por lo tanto la funci´on descripcionInt tambi´en regresa siempre una listaResultado de tipo [N ombre].
7. Por demostrar: que la funci´on siempre regresa una lista de tipo [N ombre] para cualquier lista (y:r1) :r2 y una lista resto, teniendo los siguientes casos:
(a) Caso: y es de tipo Alternativa, entonces
descripcionCond (y:r1) : r2 resto
= (Ecuaci´on (12) de descripcionCond)
Respuesta:descripcionInt r1 :r2 resto
| {z }
(Por 6)
= Respuesta:Resultado
Por lo tanto la ecuaci´on 12 regresa siempre una lista de tipo [N ombre]. (b) Caso: y :r1 = [], entonces descripcionCond (y:r1) :r2resto = (Ecuaci´on (13) de descripcionCond) descripcionInt r2 resto | {z } (Por 6) = Resultado
Por lo tanto la ecuaci´on 13 regresa siempre una lista de tipo [N ombre]. Por lo tanto se puede concluir que las funciones descripcionCond y descripcionInt
regresan siempre una lista de elementos de tipo [N ombre].
La aseveraci´on 2 establece que la funci´on descripcion est´a bien definida. La demostraci´on es la siguiente:
Demostraci´on de la aseveraci´on 2: Hay que demostrar que la funci´ondescripcion
siempre da como resultado una lista de elementos de tipo N ombre. Hay que aplicar inducci´on estructural sobre una lista finita de tipo ElementoRol:
1. Caso base: [], este caso es para cuando la funci´on recibe una lista vac´ıa, entonces
descripcion []
= (Ecuaci´on (5) de descripcion) []De tipo [N ombre]
Por lo tanto la ecuaci´on (5) est´a bien definida.
2. Hip´otesis inductiva: suponer que la funci´ondescripcionest´a bien definida para cualquier lista finitaresto de tipo ElementoRol.
descripcion resto=Resultadode tipo [Nombre]
3. Por demostrar: que la funci´on est´a bien definida para toda lista x : resto, teniendo los siguientes casos:
(a) Caso: x es de tipo Actividad, entonces
descripcion x:resto
= (Ecuaci´on (6) de descripcion)
N ombreActividad: descripcion resto
| {z }
Hip´otesis inductiva
= N ombreActividad:Resultado de tipo [Nombre] Por lo tanto la ecuaci´on 6 est´a bien definida.
(b) Caso: x es de tipo InteraccionSimple, entonces
= (Ecuaci´on (7) de descripcion)
N ombreActividad: descripcion resto
| {z }
Hip´otesis inductiva
= N ombreActividad:Resultado de tipo [Nombre] Por lo tanto la ecuaci´on 7 est´a bien definida.
(c) Caso: x es de tipo InteraccionCompuesta, entonces
descripcion x:resto
= (Ecuaci´on (8) de descripcion)
N ombreActividad: descripcion resto
| {z }
Hip´otesis inductiva
= N ombreActividad:Resultado de tipo [Nombre] Por lo tanto la ecuaci´on 8 est´a bien definida.
(d) Caso: x es de tipo Condicional, x tiene la forma
hCondicion, ai
entonces
descripcion x:resto
= (Ecuaci´on (9) de descripcion)
Condicion :descripcionCond a: [] resto
| {z }
Teorema 1
= Condicion :Resultadode tipo [Nombre] Por lo tanto la ecuaci´on 9 est´a bien definida.
(e) Caso: x es de tipo P aralela, x tiene la forma
entonces
descripcion x:resto
= (Ecuaci´on (10) de descripcion)
Descripcion:descripcionCond a: [] resto
| {z }
Teorema 1
= Descripcion:Resultadode tipo [Nombre] Por lo tanto la ecuaci´on 10 est´a bien definida.
De los casos 1, 3a, 3b, 3c, 3d y 3e se concluye que la funci´on descripcion est´a bien definida.
La aseveraci´on 3 establece que la funci´on descripcionRol est´a bien definida. Su demostraci´on es la siguiente:
Demostraci´on de la aseveraci´on 3: hay que demostrar que la funci´ondescripcionRol
siempre da como resultado una lista de elementos de tipo [N ombre]. Sea rolRol, la
estructura derol es
rol =hnrN ombreRol, er[ElementoRol]i entonces al aplicar la funci´ondescripcionRol a rol se tiene:
descripcionRol rol
= (Ecuaci´on (28) de descripcionRol)
obtenerN ombreRol rol
| {z }
: (descripcion◦obtenerElementos) rol
= nr : (descripcion◦obtenerElementos) rol
| {z }
= nr :descripcion er
| {z }
(descripcion regresa una lista Resultadode tipo [N ombre] (aseveraci´on 2)) = nr :Resultado
Por lo tanto la funci´ondescripcionRol regresa siempre una lista de tipo [N ombre]. La aseveraci´on 4 establece que la funci´ondescripcionListaRolesest´a bien definida. Su demostraci´on es la siguiente:
Demostraci´on de la aseveraci´on 4: hay que demostrar que la funci´ondescripcion−
ListaRoles siempre da como resultado una lista de elementos de tipo N ombre. Hay que aplicar inducci´on estructural sobre una lista finita de tipo [Rol]:
1. Caso base: [], este caso es para cuando la funci´on recibe una lista vac´ıa, entonces
descripcionListaRoles []
= (Ecuaci´on (2) de descripcionListaRoles) []de tipo [N ombre]
Por lo tanto la ecuaci´on (2) est´a bien definida.
2. Hip´otesis inductiva: suponer que la funci´on descripcionListaRoles est´a bien definida para cualquier lista finita rolesde tipo [Rol].
descripcionListaRoles roles =Resultado de tipo [Nombre]
3. Por demostrar: que la funci´on est´a bien definida para toda lista rol : roles, d´onde rol es de tipoRol, entonces
descripcionListaRoles rol:roles
= Ecuaci´on (3) de descripcionListaRoles descripcionRol rol
| {z }
+ +descripcionListaRoles roles
Res1 + +descripcionListaRoles roles
| {z }
= (Por hip´otesis inductivadescripcionListaRoles regresa una lista
Resultadode tipo [N ombre]) = Res1 + +Resultado
| {z }
(La concatenaci´on de listas forman una sola lista) Por lo tanto la funci´ondescripcionListaRolesest´a bien definida.
La aseveraci´on 5 establece que la funci´on descripcionRAD est´a bien definida. Su demostraci´on es la siguiente:
Demostraci´on de la aseveraci´on 5: hay que demostrar que la funci´ondescripcionRAD
siempre da como resultado una lista de elementos de tipo N ombre. Sea radRad
rad=hroles[Rol], procesoP rocesoi,
entonces
descripcionRAD rad
= (obtenerN ombreP roceso◦obtenerP roceso)rad: (descripcionListaRoles◦obtenerRoles) rad
| {z }
= (obtenerN ombreP roceso◦obtenerP roceso)rad:
descripcionListaRoles roles
| {z }
= (Por aseveraci´on 4)
(obtenerN ombreP roceso◦obtenerP roceso)
| {z }
rad:Resultado
= obtenerN ombreP roceso proceso
| {z }
:Resultado
np :Resultado
Por lo tanto descripcionRAD regresa una lista de tipo [N ombre], luego entonces la funci´on est´a bien definida.
Implementaci´on de la notaci´on
propuesta
Con el fin de tener un apoyo automatizado para la especificaci´on de diagramas RAD enCλRAD, se hizo una implementaci´on del CλRAD en el lenguaje funcional Haskell.
La implementaci´on del CλRAD se realiz´o por m´odulos. Lo anterior fue con el objetivo
de tener de manera independiente las caracter´ısticas de la notaci´on: especificaci´on en alto nivel, especificaci´on en bajo nivel y el proceso de descripci´on.
La implementaci´on de la notaci´on es como sigue:
• El m´odulo AltoNivel contiene la estructura de los tipos para la especificaci´on de un diagrama RAD en alto nivel. Es decir, los tipos N ombreP roceso, P roceso,
Comunicacion, N ombreRol, Actor, Artef acto, [Comunicacion], [N ombreRol], [Actor], [Artef acto], N ombre, Respuesta, Condicion, Descripcion, [N ombre]. Adem´as contiene las funciones asociadas a esos tipos.
• El m´odulo BajoNivel utiliza al m´odulo AltoNivel, adem´as contiene los tipos para la especificaci´on de un diagrama RAD en bajo nivel: Actividad, Ref erencia,
Ref erencia1,InteraccionSimple,Ref erencia2,InteraccionCompuesta,Ref erencia3,
Condicional, Alternativa, P aralela, ElementoRol, adem´as de los tipos lista de esos mismos tipos. Tambi´en contiene las funciones asociadas a esos tipos.
• El m´odulo Descripcion utiliza los dos m´odulos anteriores. Adem´as implementa cada una de las funciones para el proceso de descripci´on de la especificaci´on. De esta misma forma, se puede implementar un m´odulo que contenga las funciones de verificaci´on.