Especificacin de algoritmos en B - PowerPoint PPT Presentation

1 / 25
About This Presentation
Title:

Especificacin de algoritmos en B

Description:

END. Ejemplo: b squeda de m nimo. S puede ser resuelto como un ... front(s) seq(N1) front(t) seq(N1) last(s) = 0 last(t) = 0. THEN. n MinSetMin(cc,1) END ... – PowerPoint PPT presentation

Number of Views:29
Avg rating:3.0/5.0
Slides: 26
Provided by: ramon4
Category:

less

Transcript and Presenter's Notes

Title: Especificacin de algoritmos en B


1
Especificación de algoritmos en B
  • MeFIS
  • Ramón Brena
  • 2006

2
Secuenciación
  • Notación de sustituciones en secuenciaS1 S2
  • AxiomaS1 S2 R ? S1 (S2 R)(Si al
    aplicar la sustitución S1 se asegura que al
    aplicar S2 se establece R, entonces S1 S2 se
    establece R)

3
Sustitución de WHILE
  • Se define la sintaxis de B para ciclosWHILE P
    DO S END
  • Primero definimos SS (S S) skip
  • Luego definimos WHILE P DO S END como(P ? S)
    (P ? skip)

4
VARIANT
  • Para garantizar la terminación de ciclos, es útil
    indicar qué entero tiende a cero
  • Dicha cantidad se incluye en una declaración
    VARIANT
  • Por ejemplo, en un ciclo donde i va de 1 a n, el
    VARIANT puede ser n - i

5
Ejemplo búsqueda de mínimo
  • Sea c un subconjunto no vacío de N. Queremos una
    sustitución que establezca la postcondición
  • r min(c)
  • Consideramos las propiedades
  • r ? c ? r min(c)
  • min(c) ? c

6
Ejemplo búsqueda de mínimo
  • De la primera condición
  • r ? c ? r gt min(c) ? r min(c), o sea
  • r ? c ? (r min(c) ? r min(c)), que es
  • r min(c) ? r ? c ? r min(c), finalmente
  • r ? 0..min(c) ? r ? c ? r min(c)
  • Esto último sugiere un ciclo

7
Ejemplo búsqueda de mínimo
  • La sustitución S está pendiente
  • r 0
  • WHILE r ? c DO
  • S
  • INVARIANT
  • r ? 0..min(c)
  • VARIANT
  • min(c) - r
  • END

8
Ejemplo búsqueda de mínimo
  • S puede ser resuelto como un incremento
  • r lt- MinSet(c)
  • PRE c ? N
  • THEN
  • r 0
  • WHILE r ? c DO
  • r r 1
  • INVARIANT
  • r ? 0..min(c)
  • VARIANT
  • min(c) - r
  • END
  • END

9
Generalización del mínimo
  • Introducimos un parámetro a en vez del 0
  • r ? MinSetMin(c,a)
  • PRE c ? N ? a ? 0..min(c)
  • THEN
  • r a
  • WHILE r ? c DO
  • r r 1
  • INVARIANT
  • r ? a..min(c)
  • VARIANT
  • min(c) - r
  • END
  • END

10
Ejemplo 2 Comparación de secuencias
  • Consideramos secuencias de naturales tales como
  • s 4, 2, 6, 8, 0
  • t 4, 2, 6, 0
  • Obsérvese que las secuencias terminan en 0
  • Formalmente la condición en s y t es
  • s ? seq1(N) ? t ? seq1(N)
  • front(s) ? seq(N1) ? front(t) ? seq(N1)
  • last(s) 0 ? last(t) 0

11
Aplicación de MinSetMin
  • Tratamos de aprovechar la operación del ejemplo
    anterior, MinSetMin
  • Definimos el conjunto cc de los índices comunes a
    ambas secuencias tales que el valor de s es
    distinto al de t o una de ellas es cero.
  • cc m ? dom(s)?dom(t) sm?tm ? sm 0 ?
    tm 0

12
Definimos MinIndexSeq
  • MinIndexSeq entrega el minimo de cc, esto es, el
    menor indice en que ya sea las secuencias son
    distintas, o bien alguna de ellas termina en
    cero
  • n ? MinIndexSeq(s,t)
  • PRE
  • s ? seq1(N) ? t ? seq1(N) ?
  • front(s) ? seq(N1) ?
  • front(t) ? seq(N1) ?
  • last(s) 0 ? last(t) 0
  • THEN
  • n ? MinSetMin(cc,1)
  • END

13
Transformamos MinIndexSeq
  • Utilizando las definiciones de cc y de MinSetMin,
    se puede expresar MinIndexSeq sin usar cc (en la
    operación) como
  • n ? MinIndexSeq(s,t)
  • PRE
  • THEN
  • n 1
  • WHILE (sn?tn ? sn 0 ?
  • tn 0) DO
  • n n 1
  • INVARIANT
  • n ? 1..min(cc) ?
  • n ? dom(s)?dom(t)
  • VARIANT
  • min(cc) - n
  • END
  • END

14
Transformamos MinIndexSeq
  • Calculando la negación en la condición
  • n ? MinIndexSeq(s,t)
  • PRE
  • THEN
  • n 1
  • WHILE sntn ? sn ? 0 ?
  • tn ? 0) DO
  • n n 1
  • INVARIANT
  • n ? 1..min(cc) ?
  • n ? dom(s)?dom(t)
  • VARIANT
  • min(cc) - n
  • END
  • END

15
Definimos EqualSeq
  • EqualSeq hace un llamado a MinIndexSeq y analiza
    si el mínimo lo es porque se acabó una de las
    secuencias o porque las secuencias fueron
    distintas en una posición
  • b ? EqualSeq(s,t)
  • PRE
  • s ? seq1(N) ?
  • t ? seq1(N) ?
  • front(s) ? seq(N1) ?
  • front(t) ? seq(N1) ?
  • last(s) 0 ? last(t) 0
  • THEN
  • VAR n IN
  • n ? MinIndexSeq(s,t)
  • b bool( s(n) t(n))
  • END
  • END

16
Ejercicio
  • Definir, con base en el ejemplo anterior, una
    operación que obtiene la subsecuencia común desde
    el inicio que tienen s y t
  • Lo mismo, para la subsecuencia más larga que
    tienen en común las dos secuencias dadas s y t,
    empezando en cualquier punto

17
Definimos ComSubSeq
  • ComSubSeq obtiene la subsecuencia común desde el
    inicio que tienen s y t
  • u ? ComSubSeq(s,t)
  • PRE
  • s ? seq1(N) ?
  • t ? seq1(N) ?
  • front(s) ? seq(N1) ?
  • front(t) ? seq(N1) ?
  • last(s) 0 ? last(t) 0
  • THEN
  • VAR n IN
  • n ? MinIndexSeq(s,t) - 1
  • u (s ? n) . 0
  • END
  • END

18
Inverso de función
  • Calcularemos el inverso de una función monótona
    f(i) lt f(i1)
  • Propiedad
  • m,n ? N ? m lt n ? f(m) lt f(n)
  • Función inyectiva

19
Inverso de función
  • Que hacer si no es sobreyectiva
  • Para los valores faltantes, aproximar arriba o
    abajo
  • Ejemplo f(x) x2, inverso de 32 lt 14 lt42
  • Inverso por exceso
  • e n?N pf(n)
  • Inverso de p es min(e)
  • Inverso por defecto
  • d n?N pltf(n1)
  • Inverso de p es min(d)

20
Definimos InvExc
  • InvExc entrega el inverso por exceso de f, usando
    e
  • r ? InvExc(f,p)
  • PRE
  • f ? N ? N ?
  • ?m . (m ? N ? f(m)lt f(m1)) ?
  • p ? N
  • THEN
  • r ? MinSet(e)
  • END

21
Redefinimos InvExc
  • Reemplazamos el uso directo de e por su
    definición, asi como la definición de MinSet
  • r ? InvExc(f,p)
  • PRE
  • f ? N ? N ?
  • ?m . (m ? N ? f(m) lt f(m1)) ?
  • p ? N
  • THEN
  • r 0
  • WHILE r ? n n?N ? pf(n) DO
  • r r 1
  • INVARIANT
  • r ? 0..min(n n?N ? pf(n))
  • VARIANT
  • min(n n?N ? pf(n)) - r
  • END
  • END

22
Redefinimos InvExc
  • Reemplazamos la condición en el WHILE, usando
    PRE ? r ? InvExc(f,p) (r0 ? p f(0)) ?
    (rgt0 ? f(r-1) lt p f(r))
  • r ? InvExc(f,p)
  • PRE
  • f ? N ? N ?
  • ?m . (m ? N ? f(m)lt f(m1)) ?
  • p ? N
  • THEN
  • r 0
  • WHILE f(r) lt p DO
  • r r 1
  • INVARIANT
  • r ? 0..min(n n?N ? pf(n))
  • VARIANT
  • min(n n?N ? pf(n)) - r
  • END
  • END

23
Definimos InvDef
  • Similarmente
  • r ? InvDef(f,p)
  • PRE
  • f ? N ? N ?
  • ?m . (m ? N ? f(m) lt f(m1)) ?
  • p ? N
  • THEN
  • r 0
  • WHILE f(r1) p DO
  • r r 1
  • INVARIANT
  • r ? 0..min(n n?N ? pltf(n1))
  • VARIANT
  • min(n n?N ? pltf(n1)) - r
  • END
  • END

24
División de naturales
  • El cálculo de función inversa se puede aplicar a
    la división de enteros
  • Consideramos una función mult(b) que multiplica
    por b el argumento
  • q ? Div(a,b)
  • PRE
  • a ? N ?
  • b ? N1
  • THEN
  • q ? InvDef(mult(b),a)
  • END

25
División de naturales
  • Utilizando la definición de InvDef
  • q ? Div(a,b)
  • PRE
  • a ? N ?
  • b ? N1
  • THEN
  • q 0
  • WHILE b ? (q 1) a DO
  • q q 1
  • INVARIANT
  • q ? 0..a/b
  • VARIANT
  • a/b - q
  • END
  • END
Write a Comment
User Comments (0)
About PowerShow.com