9
Programación imperativa Programación funcional Concurrencia ANÁLISIS LÓGICO LENGUAJES DE PROGRAMACIÓN Francisco Hernández Quiroz Departamento de Matemáticas Facultad de Ciencias, UNAM E-mail: [email protected] Página Web: www.matematicas.unam.mx/fhq Facultad de Ciencias Francisco Hernández Quiroz Análisis Lógico 1 / 36 Programación imperativa Programación funcional Concurrencia Lenguajes de programación Con el fin de ilustrar algunas aplicaciones de la lógica a la computación, presentaremos tres tipos de lenguajes: Dos lenguajes imperativos: IMP y el lenguaje de comandos custodiados de Dijkstra. Dos lenguajes funcionales. La sintaxis de los dos es igual y se distinguen únicamente por su semántica. Un lenguaje de descripción de procesos concurrentes: Calculus of Concurrent Systems, el cual más abstracto que un lenguaje de programación en sentido estricto. Francisco Hernández Quiroz Análisis Lógico 2 / 36 Programación imperativa Programación funcional Concurrencia Sintaxis y semántica formales La notación de Backus-Naur ( BNF) es ya un estándar para la presentación de la sintaxis de lenguajes de programación. Sin embargo, en el terreno de la semántica siguen predominando las explicaciones informales. Aquí se usará una notación formal: la semántica operacional estructural. Aunque no es el único formalismo para describir los lenguajes de programación (por ejemplo, la semántica denotacional es una opción matemáticamente más elegante) sí es el más cercano a las intuiciones del programador típico. Francisco Hernández Quiroz Análisis Lógico 3 / 36 Programación imperativa Programación funcional Concurrencia Semántica operacional estructural No determinismo Lenguaje IMP La sintaxis del lenguaje IMP se describe a continuación en la notación de Backus-Naur. Empezaremos con las expresiones aritméticas EA: A ::= n | X | (A + A 0 ) | (A - A 0 ) | (A × A 0 ) donde n Z, X Loc y A, A 0 EA. Tenemos ahora las expresiones booleanas EB: B ::= V | F | (A = A 0 ) | (A A 0 ) B | (B B 0 ) | (B B 0 ) donde A, A 0 EA y B, B 0 EB. Finalmente, los comandos del lenguaje IMP se definen así: C ::= skip | X := A | (C ; C 0 ) | (if B then C else C 0 ) | (while B do C) donde A EA, B EB y C, C 0 IMP. Francisco Hernández Quiroz Análisis Lógico 4 / 36

lenguajes

Embed Size (px)

DESCRIPTION

plp111

Citation preview

Page 1: lenguajes

Programación imperativa Programación funcional Concurrencia

ANÁLISIS LÓGICOLENGUAJES DE PROGRAMACIÓN

Francisco Hernández Quiroz

Departamento de MatemáticasFacultad de Ciencias, UNAM

E-mail: [email protected]ágina Web: www.matematicas.unam.mx/fhq

Facultad de Ciencias

Francisco Hernández Quiroz Análisis Lógico 1 / 36

Programación imperativa Programación funcional Concurrencia

Lenguajes de programación

Con el fin de ilustrar algunas aplicaciones de la lógica a la computación,presentaremos tres tipos de lenguajes:

Dos lenguajes imperativos: IMP y el lenguaje de comandos custodiadosde Dijkstra.Dos lenguajes funcionales. La sintaxis de los dos es igual y sedistinguen únicamente por su semántica.Un lenguaje de descripción de procesos concurrentes: Calculus ofConcurrent Systems, el cual más abstracto que un lenguaje deprogramación en sentido estricto.

Francisco Hernández Quiroz Análisis Lógico 2 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis y semántica formales

La notación de Backus-Naur (BNF) es ya un estándar para lapresentación de la sintaxis de lenguajes de programación.Sin embargo, en el terreno de la semántica siguen predominando lasexplicaciones informales.Aquí se usará una notación formal: la semántica operacionalestructural.Aunque no es el único formalismo para describir los lenguajes deprogramación (por ejemplo, la semántica denotacional es una opciónmatemáticamente más elegante) sí es el más cercano a las intuicionesdel programador típico.

Francisco Hernández Quiroz Análisis Lógico 3 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Lenguaje IMP

La sintaxis del lenguaje IMP se describe a continuación en la notación deBackus-Naur. Empezaremos con las expresiones aritméticas EA:

A ::= n | X | (A + A′) | (A− A′) | (A× A′)

donde n ∈ Z, X ∈ Loc y A, A′ ∈ EA.Tenemos ahora las expresiones booleanas EB:

B ::= V | F | (A = A′) | (A ≤ A′) | ¬B | (B ∧ B′) | (B ∨ B′)

donde A, A′ ∈ EA y B, B′ ∈ EB.Finalmente, los comandos del lenguaje IMP se definen así:

C ::= skip | X := A | (C ; C′) | (if B then C else C′) | (while B do C)

donde A ∈ EA, B ∈ EB y C, C′ ∈ IMP.

Francisco Hernández Quiroz Análisis Lógico 4 / 36

Page 2: lenguajes

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Semántica operacional estructural I

La forma más común de definir el significado de las construcciones deun lenguaje es por medio de explicaciones en una lengua natural(inglés, generalmente).Sin embargo, el lenguaje natural se presta a las ambigüedades y éstas,a los errores o a las divergencias entre las diferentes implementacionesde un mismo lenguaje.Para evitar estos problemas, aquí se usarán reglas de semánticaoperacional estructural o SOE, para abreviar.Una regla de inferencia tiene la forma siguiente:

p1, . . . , pn

q

donde p1, . . . , pn son las premisas y q es la conclusión.

Francisco Hernández Quiroz Análisis Lógico 5 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Semántica operacional estructural II

Las reglas de SOE son un tipo particular de reglas de inferencia en lasque las premisas y la conclusión son transiciones.

Una transición tiene la forma

α→ β

La forma concreta de las expresiones α y β, así como las transicionesaceptables, se definirán más adelante.

Francisco Hernández Quiroz Análisis Lógico 6 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

¿Qué es la programación imperativa?

IMP es un lenguaje imperativo típico: el comando básico es laasignación de valor a las localidades de la memoria de la computadora.Para definir el significado de una asignación se parte de la existenciade una máquina virtual que posee una memoria con localidades connombre:

Loc = {X , Y , Z , X0, . . . }

Las localidades pueden tomar valores de Z.

Francisco Hernández Quiroz Análisis Lógico 7 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Estados de la memoria

Un estado de la memoria es una función σ : Loc→ Z.La expresión

σ(X)

nos dice qué valor contiene la localidad X en el estado σ.La alteración del valor de una sola localidad de la memoria cuando seencuentra en el estado σ se representa con la función

σ[m/X ],

donde X es la localidad modificada y m es el nuevo valor.Formalmente:

σ[m/X ](Y) =

{σ(Y) si X 6= Ym en caso contrario.

El conjunto de estados es Σ.Francisco Hernández Quiroz Análisis Lógico 8 / 36

Page 3: lenguajes

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

SOE para IMP. Expresiones aritméticas

En el caso de las expresiones aritméticas, las transiciones α→ β tiene laforma

〈a,σ〉 → n

donde a ∈ EA, σ ∈ Σ y n ∈ Z.Diremos que “evaluar operacionalmente la expresión a en el estado σ dacomo resultado el valor n”.Dicha evaluación se realiza de acuerdo con las siguientes reglas:

〈n,σ〉 → n 〈X ,σ〉 → σ(X)

〈a0,σ〉 → n0 〈a1,σ〉 → n1 n0 op n1 = n〈a0 op a1,σ〉 → n

En esta regla op puede ser +,− o× y op, +Z,−Z o×Z (ambos operadoresdeben coincidir).Francisco Hernández Quiroz Análisis Lógico 9 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

SOE para IMP. Expresiones booleanas I

En las expresiones booleanas, una transición es 〈b,σ〉 → T , con b ∈ EB,σ ∈ Σ y T ∈ {V , F}. Las reglas operacionales son:

〈V ,σ〉 → V 〈F ,σ〉 → F

〈a0,σ〉 → n 〈a1,σ〉 → m〈a0 = a1,σ〉 → V

sii n y m son iguales

〈a0,σ〉 → n 〈a1,σ〉 → m〈a0 = a1,σ〉 → F

sii n y m no son iguales

〈a0,σ〉 → n 〈a1,σ〉 → m〈a0 ≤ a1,σ〉 → V

sii n es menor o igual a m

Francisco Hernández Quiroz Análisis Lógico 10 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

SOE para IMP. Expresiones booleanas II

〈a0,σ〉 → n 〈a1,σ〉 → m〈a0 ≤ a1,σ〉 → F

sii n no es menor o igual a m

〈b,σ〉 → V〈¬b,σ〉 → F

〈b,σ〉 → F〈¬b,σ〉 → V

〈b0,σ〉 → T0 〈b1,σ〉 → T1

〈b0 ∧ b1,σ〉 → Tcon T = V si T0, T1 = Vy T = F en caso contrario

〈b0,σ〉 → T0 〈b1,σ〉 → T1

〈b0 ∧ b1,σ〉 → Tcon T = V si T0 = V o T1 = Vy T = F en caso contrario

Francisco Hernández Quiroz Análisis Lógico 11 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

SOE para IMP. Comandos I

Las reglas de transición de los comandos son así:

〈c,σ〉 → σ′,

donde c ∈ IMP y σ, σ′ ∈ Σ.El valor de σ′ se infiere de este modo:

Comandos atómicos

〈skip,σ〉 → σ〈a,σ〉 → m

〈X := a,σ〉 → σ[m/X ]

Composición secuencial

〈c0,σ〉 → σ′′ 〈c1,σ′′〉 → σ′

〈c0 ; c1,σ〉 → σ′

Francisco Hernández Quiroz Análisis Lógico 12 / 36

Page 4: lenguajes

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

SOE para IMP. Comandos II

Condicionales

〈b,σ〉 → V 〈c0,σ〉 → σ′

〈if b then c0 else c1,σ〉 → σ′〈b,σ〉 → F 〈c1,σ〉 → σ′

〈if b then c0 else c1,σ〉 → σ′

Ciclos

〈b,σ〉 → F〈while b do c,σ〉 → σ

〈b,σ〉 → V 〈c,σ〉 → σ′′ 〈while b do c,σ′′〉 → σ′

〈while b do c,σ〉 → σ′

Francisco Hernández Quiroz Análisis Lógico 13 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Ejemplo

Dadas las reglas anteriores, no es difícil ver que el programa de IMP siguientecalcula el factorial del número n (si n ≥ 0) y lo guarda en la localidad Y :

X := 1;Y := 1;

while X ≤ n do(X := X + 1;Y := Y × X)

Francisco Hernández Quiroz Análisis Lógico 14 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

No determinismo

Como primera aproximación a la computación, IMP es bastante bueno.No obstante, hay una serie de “fenómenos” computacionales que nopueden modelarse con IMP.Uno de estos es el no determinismo: la posibilidad de que la ejecuciónde un programa dé resultados distintos en distintas ocasiones a pesarde que recibe los mismos datos de entrada siempre.El no determinismo puede surgir en diversas situaciones. La máscomún es la concurrencia de procesos, pero también puedepresentarse por una decisión en el diseño mismo de los lenguajes deprogramación.

Francisco Hernández Quiroz Análisis Lógico 15 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Un lenguaje no determinista

Ahora se presentará un lenguaje imperativo con no determinismo explícito.Para esto necesitaremos una categoría especial de comandos llamadoscomandos resguardados (guarded commands):

G ::= (B → C) | (G G′)

donde G y G′ son comandos resguardados y B ∈ EB.Como los comandos resguardados son básicos en nuestro lenguaje, lollamaremos GCL: guarded command language.He aquí la sintaxis de GCL:

C ::= skip | abort | X := A | (C ; C′) | if g fi | do g od

donde abort es un nuevo programa primitivo, G es un comando resguardadoy C, C′ ∈ GCL.

Francisco Hernández Quiroz Análisis Lógico 16 / 36

Page 5: lenguajes

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Semántica operacional I

Comencemos con las reglas de comandos resguardados:

〈b,σ〉 → V〈b → c,σ〉 → 〈c,σ〉

〈b,σ〉 → F〈b → c,σ〉 → fail

〈g0,σ〉 → 〈c,σ′〉〈g0 g1,σ〉 → 〈c,σ′〉

〈g1,σ〉 → 〈c,σ′〉〈g0 g1,σ〉 → 〈c,σ′〉

〈g0,σ〉 → fail 〈g1,σ〉 → fail〈g0 g1,σ〉 → fail

Francisco Hernández Quiroz Análisis Lógico 17 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Semántica operacional I

Ahora seguimos con las reglas para comandos generales:

〈skip,σ〉 → σ〈a,σ〉 → m

〈X := a,σ〉 → σ[m/X ]

〈c0,σ〉 → σ′′ 〈c1,σ′′〉 → σ′

〈c0 ; c1,σ〉 → σ′〈c0,σ〉 → 〈c′0,σ′〉

〈c0 ; c1,σ〉 → 〈c′0 ; c1,σ′〉

〈g,σ〉 → 〈c,σ′〉〈if g fi,σ〉 → 〈c,σ′〉

〈g,σ〉 → fail〈do g od,σ〉 → σ

〈g,σ〉 → 〈c,σ′〉〈do g od,σ〉 → 〈c ; do g od,σ′〉

Francisco Hernández Quiroz Análisis Lógico 18 / 36

Programación imperativa Programación funcional Concurrencia

Semántica operacional estructural No determinismo

Ejemplo

El lector puede verificar, haciendo uso de las reglas anteriores y de suconocimiento del , queEl siguiente programa implementa el viejo algoritmo de Euclides paracalcular el máximo común divisor de los enteros positivos n y m. El resultadoqueda guardado en las localidades X y Y .

X := n;Y := m;

doX > Y → X := X − Y

Y > X → Y := Y − Xod

Nota: X > Y es una abreviatura, obviamente, de Y ≤ X ∧ ¬(X = Y).

Francisco Hernández Quiroz Análisis Lógico 19 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Programación funcional

Un estilo de programación radicalmente distinto al imperativo es elfuncional.La idea básica es que en lugar de programas con instruccionesdetalladas para la computadora, se deben usar definiciones defunciones.La ejecución de un programa consiste en la evaluación de una funcióndefinida anteriormente con argumentos concretos.

Francisco Hernández Quiroz Análisis Lógico 20 / 36

Page 6: lenguajes

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Sintaxis

Nuevamente, usaremos la notación Backus-Naur:

t ::= n | x | t + t ′ | t − t ′ | t × t ′ | if t then t ′ else t ′′ | fi(t1, . . . , tn)

t , t ′ y t ′ designan términos del lenguaje funcional.Obsérvese como en el condicional no se usan expresiones booleanassino términos como condición.El valor 0 tendrá el papel de verdadero y cualquier otro valor seconsiderará falso.

Francisco Hernández Quiroz Análisis Lógico 21 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Declaraciones

El estilo funcional de programación permite prescindir de la referencia auna máquina virtual y su memoria.Las funciones tomarán su significado a partir de declaraciones.Una declaración es un conjunto finito de ecuaciones. Del lado izquierdoaparece una función con variables como argumentos; del derecho,aparecen términos del lenguaje funcional.

f1(x1, . . . , xn1 ) = d1...

fk (x1, . . . , xnk ) = dk

donde d1, . . . , dk son términos del lenguaje funcional.No se permite más de una ecuación por cada función, pero sí seacepta la recursividad.

Francisco Hernández Quiroz Análisis Lógico 22 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Semántica operacional

Las transiciones ahora son de la forma

t →ds t ′

donde t y t ′ son términos del lenguaje, d es una declaración y s puedetomar el valor v (llamada por valor) o n (llamada por nombre).Las transiciones dependen de declaraciones específicas.En el estilo de llamada por valor, los argumentos de las funciones sonevaluados antes de evaluar la función misma.En el estilo de llamado por nombre, la evaluación se pospone hasta quese evalúa el cuerpo mismo de la función.La diferencia entre los dos estilos se manifiestan sólo en una regla deevaluación de términos.

Francisco Hernández Quiroz Análisis Lógico 23 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Semántica con llamada por valor

Números n→dv n Operadores

t0 →dv n0 t1 →d

v n1

t0 op t1 →dv n0 op n1

Condicional verdadero

t0 →dv 0 t1 →d

v n1

if t0 then t1 else t2 →dv n1

Condicional falso

t0 →dv n0 t2 →d

v n2 n0 6= 0if t0 then t1 else t2 →d

v n2

Funciones

t1 →dv n1 · · · tmi →d

v nmi di [n1/x1,...,nmi /xmi ]→d

v n

fi(t1, . . . , tmi )→dv n

Conviene prestar atención a la última regla, pues es la que varía conrespecto a la llamada por nombre.Francisco Hernández Quiroz Análisis Lógico 24 / 36

Page 7: lenguajes

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Llamada por nombre

Números n→dn n Operadores

t0 →dn n0 t1 →d

n n1

t0 op t1 →dn n0 op n1

Condicional verdadero

t0 →dn 0 t1 →d

n n1

if t0 then t1 else t2 →dn n1

Condicional falso

t0 →dn n0 t2 →d

n n2 n0 6= 0if t0 then t1 else t2 →d

n n2

Funciones

di [t1/x1,...,tmi /xmi ]→d

n n

fi(t1, . . . , tmi )→dn n

Francisco Hernández Quiroz Análisis Lógico 25 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Ejemplos I

Supóngase que se tiene la siguiente declaración:

f1(x) = if x then 1 else f1(x − 1)× xf2(x , y) = x

f3(x) = f3(x + 1)

Entonces el programa f1(n) calcula el factorial de n, en cualquiera delos dos estilos de programación.

Francisco Hernández Quiroz Análisis Lógico 26 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Ejemplos IIEn cambio, considérese el programa

f2(2, f3(1)).

De acuerdo con las reglas de llamado por nombre, para realizar laevaluación del programa debemos evaluar la expresión

x[x/2,y/f3(1)] = 2

que, de acuerdo con la regla para números, nos da 2.En cambio, las reglas de llamada por valor nos piden que primeroevaluemos los términos

2 y f3(1)

el segundo de los cuales nunca nos da un resultado, como se puedededucir de la tercera ecuación de la declaración.

Francisco Hernández Quiroz Análisis Lógico 27 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semánticas Ejemplos

Ejemplos III

Nota

Si se adopta el estilo de llamada por valor, el lenguaje funcional seasemeja a un subconjunto de ML.

Si se adopta llamada por nombre, será parecido a un subconjunto deHaskell.

Francisco Hernández Quiroz Análisis Lógico 28 / 36

Page 8: lenguajes

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Concurrencia

La idea de que un sistema de cómputo se basa en la ejecuciónsecuencial de una serie de instrucciones por parte de un ente aisladohace mucho que es obsoleta.La mayoría de los sistemas actuales contiene subsistemas que actúande manera simultánea y que intercambian información entre sí. Estossistemas se llaman concurrentes.Hay varios modelos de cómo se realiza el intercambio de informaciónentre subsistemas, pero dos son los fundamentales:

1 memoria compartida;2 envío de mensajes.

En el primero, hay un área de la memoria (variables, buffers, etc.) a laque varios sistemas concurrentes tienen acceso para guardar o leerdatos.Por su parte, el envío de mensajes se realiza por un medio abierto(difusión) o por medio de canales específicos.

Francisco Hernández Quiroz Análisis Lógico 29 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Communicating Concurrent Systems

En los 80, Robin Milner propuso un lenguaje de especificación para procesosconcurrentes: CCS (Communicating Concurrent Systems).Dicho lenguaje consta de:

Un conjunto de valores (enteros, por ejemplo) que se envían o recibena través de canales α, β, etc.Operadores para la composición secuencial o paralela de procesos.Un operador de “elección”Operaciones para reetiquetar canales y restringir el acceso a éstos.

Francisco Hernández Quiroz Análisis Lógico 30 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Sintaxis I

Para comenzar, las acciones básicas de comunicación entre procesos:

λ ::= τ | α!m | α?m

τ es la acción nula, α!m es el envío de m por el puerto de salida del canal αy α?m es la recepción de m por el puerto de entrada del mismo canal.Los procesos de CCS se definen así:

p ::= nil | λ . p |∑i∈I

pi | p ‖ p′ | p\L | p[f ] | P

En términos informales, la sintaxis contiene los siguientes elementos:nil es un proceso que no realiza ninguna acción y se consideraprimitivo;λ es una acción;

Francisco Hernández Quiroz Análisis Lógico 31 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Sintaxis II

∑es la elección arbitraria de un proceso tomado del conjunto de

procesos indexado por I;

‖ es la composición paralela de procesos (intuitivamente, ambosprocesos pueden realizarse simultáneamente);

L es un conjunto de canales (cuyo acceso se restringirá a otrosprocesos, como se verá más adelante);

P designa a un proceso definido por medio de una expresión del tipo

P ≡def p

que puede tener carácter recursivo.

Francisco Hernández Quiroz Análisis Lógico 32 / 36

Page 9: lenguajes

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Semántica I

Las ideas anteriores se pueden expresar con más claridad por medio dereglas SOE:

Procesos resguardados

λ . p λ−→ p

Sumas

pjλ−→ q∑

i∈I piλ−→ q

j ∈ I

Composición

Francisco Hernández Quiroz Análisis Lógico 33 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Semántica II

p0λ−→ p′0

p0 ‖ p1λ−→ p′0 ‖ p1

p1λ−→ p′1

p0 ‖ p1λ−→ p0 ‖ p′1

p0λ−→ p′0 p1

λ̄−→ p′1p0 ‖ p1

τ−→ p′0 ‖ p′1

Restricción

p λ−→ q

p\L λ−→ q\Lλ 6∈ L ∪ L̄

Reetiquetamiento

p λ−→ q

p[f ]f(λ)−→ q[f ]

Francisco Hernández Quiroz Análisis Lógico 34 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Semántica III

Identificadores

p λ−→ q

P λ−→ qdonde P ≡def p.

Francisco Hernández Quiroz Análisis Lógico 35 / 36

Programación imperativa Programación funcional Concurrencia

Sintaxis Semántica Ejemplos

Ejemplos

Veamos un ejemplo muy sencillo: un buffer de capacidad 1.Un buffer es un dispositivo de almacenamiento con capacidad finita enel que un proceso (el productor) puede guardar información a la esperade que otro proceso (el consumidor) lea esta información.La lectura destruye la información guardada.Es importante que la información se guarde y se consuma de acuerdocon los permisos de los procesos.El siguiente proceso de CCS se comporta de acuerdo con ladescripción anterior:

B ≡def ((α?m . β!m . nil) ‖ (β?m . γ!m . B))\{β}

Francisco Hernández Quiroz Análisis Lógico 36 / 36