• No se han encontrado resultados

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.