Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Rodrigo Cardoso
Universidad de los Andes
Departamento de Ingeniería de Sistemas y Computación
Agenda
• …
• Desarrollo de ciclos
• Desarrollo de invariantes
• Técnicas semánticas
• Técnicas sintácticas
Derivación de programas 2
Eliminar una conjunción
• Si la poscondición es de la forma
R R1 R2
Derivación de programas 3
Raíz cuadrada entera
[Ctx: n:nat
a:= 0;
{Inv P1: a2 n }
{Cota t1: n – a2 }
{Pos: a = n }
] T(n) = (n)
S(n) = (1)
Derivación de programas 4
Raíz cuadrada entera (cont.)
[Ctx: n:nat
a:= n;
{Pos: a = n }
] T(n) = (n)
S(n) = (1)
Derivación de programas 5
¿Es factorial?
[Ctx: n:nat+
k:= 1;
{Inv P: k>0 k! n }
{Cota t1: n – k! }
esfact:= (k! = n)
Derivación de programas 6
¿Es factorial? (cont.)
[Ctx: n:nat+
k,m:= 1,1;
{Inv P: k>0 m = k! n }
{Cota t1: (k+1)! - n }
esfact:= (m = n)
Derivación de programas 7
¿Es factorial? (cont.)
[Ctx: n:nat+
k,m,m1:= 1,1,2;
do n m1 → k,m,m1:= k+1,m1,m*(k+1) od
esfact:= (m = n)
Derivación de programas 8
Remplazar constante por variable
• Si la poscondición es de la forma
R[c] // c Constante
t dist(x,c)
Derivación de programas 9
Remplazar constante por variable (cont.)
O bien:
suma:= 0;
for i:= 0 to n-1 → suma:= suma+i rof
Derivación de programas 10
El problema de la planicie
2
1
Derivación de programas 11
La planicie
[Ctx: n:nat+ b[0..n-1]:int b
od
T(n) = (n)
{Pos: p = lpml(n) } S(n) = (1)
]
Derivación de programas 12
La planicie no creciente
[Ctx: n:nat+ b[0..n-1]:int
• Si la poscondición es de la forma
R(x,f(x)) xA f(x)B
proponer
Inv P: R(x,y) xA yB
Derivación de programas 14
Raíz cuadrada entera
[Ctx: n:nat
a,b:= 0,n+1;
Derivación de programas 15
Aumentar el rango de una variable
Derivación de programas 16
Búsqueda con certeza
[Ctx: n:nat b[0..n-1]:X xb
{Inv P: 0 i iv }
{Cota t: iv-i }
{R1: i = iv }
{Pos: x = b[i] }
]
T(n) = (n)
S(n) = (1)
Derivación de programas 17
Welfare crook
Derivación de programas 18
Welfare crook
[Ctx: f,g,h[0.. ]:nat fgh
i,j,k:= 0,0,0; iv,jv,kv índices mínimos en cada
{Inv P: 0iiv 0jjv 0kkv } archivo, para el primer crook
{Cota t: iv-i + jv-j + kv-k }
BB f[i]g[j] f[i]h[k]
do f[i]<g[j] f[i]<h[k] → i:= i+1 g[j]f[i] g[j]h[k]
[] g[j]<f[i] g[j]<h[k] → j:= j+1 h[k]f[i] h[k]g[j]
[] h[k]<f[i] h[k]<g[j] → k:= k+1
od
BB f[i] = g[j] = h[k]
Derivación de programas 19
Welfare crook
[Ctx: f,g,h[0.. ]:nat fgh
i,j,k:= 0,0,0;
Derivación de programas 20