Problema de bordes
13)
Const N : Int;
Var a : array [0, N) of Num;
r : Bool;
{N ≥ 0}
S
{r = <∀ i : 0 ≤ i < N : < ∑ j : 0 ≤ j ≤ i : a.j>
> 0
>
}
{r = <∀ i : 0 ≤ i < n : h P j : 0 ≤ j ≤ i : a.j i > 0
≤ N ∧ n = N }
>
∧
1.I : r = <∀ i : 0 ≤ i < n : <∑
∧ 0 ≤ n ≤ N
¬ B : n = N
j : 0 ≤ j ≤ i : a.j > > 0
0 ≤ n
>
5. Que pasa en el bucle
{I ∧ B}
r, n := E, n+1;
{I}
Asumo I ∧ B
wp.(r, n := E, n+1).(r = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j
> > 0 > ∧ 0 ≤ n ≤ N)
≡ {def de wp}
E = <∀ i : 0 ≤ i < n + 1 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ 0
≤ n + 1 ≤ N
≡ { sup, aritm, neutro de ∧ }
E = <∀ i : 0 ≤ i < n + 1 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 >
≡ {sep de término}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j :
0 ≤ j ≤ n : a.j > > 0
≡ {aritm}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j :
0 ≤ j < n + 1 : a.j > > 0
≡ {separación de término}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j :
0 ≤ j < n : a.j > + a.n > 0
≡ { sup}
E = r ∧ <∑ j : 0 ≤ j < n : a.j > + a.n > 0
Necesitamos fortalecer el invariante
1.I : r = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0
∧ 0 ≤ n ≤ N ∧ s = <∑ j : 0 ≤ j < n : a.j >
¬ B : n = N
>
2.{0 ≤ N}
r,s,n : = E, F, 0;
{I}
wp.(r,s,n : = E, F, 0).(r = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤
i : a.j > > 0 > ∧ 0 ≤ n ≤ N ∧ s = <∑ j : 0 ≤ j < n :
a.j >)
≡ {def de wp}
E = <∀ i : 0 ≤ i < 0 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ 0
≤ 0 ≤ N ∧ F = <∑ j : 0 ≤ j < 0 : a.j >
≡ {aritm, neutro de ∧ }
E = <∀ i : False : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ F =
<∑ j : False: a.j >
≡ {rango vacío}
E = True ∧ F = 0
≡ {hago E = True y F = 0}
True
3.I ∧ ¬ B ⇒ Q
4.t : N - n
5.{I ∧ B}
r,n,s := E, n+1, F;
{I}
wp.(r,n,s := E, n+1, F).I
≡ {def de wp}
E = <∀ i : 0 ≤ i < n + 1 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 >
∧ 0 ≤ n + 1 ≤ N ∧ F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ {aritm, sup, neutro de ∧ }
E = <∀ i : 0 ≤ i < n + 1 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧
F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ { sep de término}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧
<∑ j : 0 ≤ j ≤ n : a.j > > 0
∧ F = <∑ j : 0 ≤ j < n : a.j >
+ a.n
≡ {aritm, sup}
E = r ∧ <∑ j : 0 ≤ j < n + 1 : a.j > > 0
∧ F = s + a.n
≡ { sep de término}
a.n
E = r ∧
<∑
j : 0 ≤ j < n
≡ {suposición}
E = r ∧ s + a.n > 0
≡ {Hago }
True
∧
: a.j > + a.n
> 0
∧
F = s +
F = s + a.n
6.Ver
7.Ver
Const N : Int;
Var a : array [0, N) of Num;
r : Bool;
{N ≥ 0}
r,s,n := True, 0, 0
do n /= N →
r,s,n := r ∧ s + a.n > 0, s + a.n, n + 1
od
{r = <∀ i : 0 ≤ i < N : < ∑ j : 0 ≤ j ≤ i : a.j>
> 0 > }
11. Const N : Int;
Var a : array[0, N) of Int;
r : Int;
{P : N ≥ 0}
S
{Q : r = <Max p, q : 0 ≤ p ≤ q ≤ N : sum.p.q > |[sum.p.q = <∑
: p ≤ i < q : a.i> ]| }
Q : r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > ∧
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|
0 ≤ n ≤ N ∧
1.I : r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > ∧
¬ B : n = N
i
n=N
0 ≤ n ≤ N
5. wp.(r,n:= E, n+1).I
≡
…
≡ {Distr Max +}
E = r max 0 max <Max p: 0 ≤ p < n : sum.p.n> + a.n
Fortalezco
I’ : r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > ∧
<Max p: 0 ≤ p < n : sum.p.n>
0 ≤ n ≤ N ∧
m =
2.Sup 0 ≤ N
wp.(r,n,s := E, 0 , S).I
≡ {def de wp}
r = <Max p, q : 0 ≤ p ≤ q ≤ 0 : sum.p.q > ∧ 0 ≤ 0 ≤ N ∧ m =
<Max p: 0 ≤ p < 0 : sum.p.n>
≡ {aritm, sup}
r = <Max p, q : p = q = 0 : sum.p.q > ∧ m = <Max p: False :
sum.p.n>
≡ {anidado, rango unit 2 veces, rango vacio}
r = sum.0.0 ∧ m = - ∞
≡ { def de sum}
r = <∑ i : 0 ≤ i < 0 : a.i> ∧ m = - ∞
≡ {arimt, rango vacio}
r = 0 ∧ m = - ∞
≡ {hago }
True
3.v
4.v
5.Asumo I ∧
B
wp.(r,s,n:= E, F, n+1).I
≡ {
15.
{P: 0 ≤ N}
r,n := True, 0;
do n /= N →
od
{Q : r ≡
Dejamos el mismo invariante
B’ = B ∧ r
I : el viejo invariante
2. {P}
r,n := True, 0;
{I}
r,n := r ∧
a.n > 0 , n+1
<∀i : 0 ≤ i < N : a.i > 0 >}
ya lo probamos
4. I ∧
B’ ⇒ 0 ≤ t
*
antes demos tramos I ∧ B ⇒ 0 ≤ t
Como I ∧ B’ ⇒ I ∧ B por transitividad demostramos *
5. Cuerpo del bucle
{I ∧ B}
r,n := r ∧
{I}
a.n > 0, n + 1
transitividad
6.ya lo vimos
7.cota disminuye
I ∧
B ∧
t = T ⇒ wp.().(t < T)
I ∧
B’ ∧
t = T ⇒ I ∧
B ∧
t =T
transitividad
3. I ∧ ¬ B’ ⇒ Q
demostré I ∧ ¬ B ⇒ Q
I ∧ ¬ B = I ∧ n = N
I ∧ ¬ B’ = I ∧ (n = N
∨
¬ r)
Hay que mostrar 3
(I ∧ n = N)
∨ ( I ∧ ¬ r) ⇒ Q
≡ {impl de la disyunción }
I ∧ n = N ⇒ Q
∧ I ∧ ¬ r ⇒ Q
≡ {ya dem}
I ∧ ¬ r ⇒ Q
Sup antecedente
vemos si se cumple Q
r ≡ <∀i : 0 ≤ i < N : a.i > 0 >
≡ {sup 0 ≤ n ≤ N }
r ≡ <∀i : 0 ≤ i < n ∨ n ≤ i < N : a.i > 0 >
≡
≡
r ≡
r ∧ <∀ i: n ≤ i < N : a.i > 0 >
≡
{
≡
False ≡
r ∧
≡ {equiv de negación}
¬ r ∨ ¬ <∀ >
≡ {sup
True ∨ ¬ <∀ >
≡ {abs de ∨ }
True
11. Const N : Int;
Var a : array[0, N) of Int;
r : Int;
{P : N ≥ 0}
S
{Q : r = <Max p, q : 0 ≤ p ≤ q ≤ N : sum.p.q > |[sum.p.q = <∑
: p ≤ i < q : a.i> ]| }
{Q’ : r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > ∧
N |[sum.p.q = <∑ i : p ≤ i < q : a.i> ]| }
0 ≤ n ≤ N ∧
i
n =
1.P ⇒ I
{P : 0 ≤ N }
r,n = E, 0
{I}
wp.(r,n = E, 0)).(r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > ∧
0 ≤ n ≤ N ∧
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|)
≡ {def de wp}
E = <Max p, q : 0 ≤ p ≤ q ≤ 0 : sum.p.q > ∧ 0 ≤ 0 ≤ N
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|
≡ {sup, aritm,neutro de ∧ }
E = <Max p, q : p = 0 ∧ q = 0 : sum.p.q > |[sum.p.q = <∑ i :
p ≤ i < q : a.i> ]|
≡ {rango unit}
E = <∑ i : 0 ≤ i < 0 : a.i>
≡ {aritm}
E = <∑ i : False : a.i>
≡ {rango vacío}
E = 0
5. { I ∧ B }
r,n = F, n+1;
{I}
wp.(r,n = F, n+1).I
≡ {def de wp}
F = <Max p, q : 0 ≤ p ≤ q ≤ n + 1 : sum.p.q > ∧ 0 ≤ n + 1 ≤ N
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|
≡ {sup, aritm, neutro de ∧ }
F = <Max p, q : 0 ≤ p ≤ q ≤ n + 1 : sum.p.q >
|[sum.p.q = <∑ i :
p ≤ i < q : a.i> ]|
≡ {aritm}
F = <Max p, q : (0 ≤ p ≤ q ≤ n) ∨ (0 ≤ p ≤ q = n+1) : sum.p.q >
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|
≡ {partición de rango}
F = <Max p, q :0 ≤ p ≤ q ≤ n: sum.p.q > max <Max p,q : 0 ≤ p ≤ q =
n+1: sum.p.q>
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|
≡ {sup ,aritm}
F = r max <Max p,q : 0 ≤ p ≤ q ∧ q = n+1: sum.p.q>
|[sum.p.q
= <∑ i : p ≤ i < q : a.i> ]|
≡ {elim de una dummy}
F = r max <Max p: 0 ≤ p ≤ n + 1: sum.p.n+1>
|[sum.p.q = <∑ i :
p ≤ i < q : a.i> ]|
≡ {desabreviacion }
F = r max <Max p: 0 ≤ p ≤ n + 1: <∑ i : p ≤ i < n+1 : a.i> >
≡ {partición de rango . rango unitario}
F = r max <Max p: 0 ≤ p ≤ n : <∑ i : p ≤ i < n+1 : a.i> > max <∑
i : n + 1 ≤ i < n+1 : a.i>
≡ {aritm}
F = r max <Max p: 0 ≤ p ≤ n : <∑ i : p ≤ i < n+1 : a.i> > max <∑
i : False: a.i>
≡ {rango vacío, neutro de max, aritm}
F = r max <Max p: 0 ≤ p < n + 1 : <∑ i : p ≤ i < n+1 : a.i> >
≡ {sep de término}
F = r max <Max p: 0 ≤ p < n + 1 : <∑ i : p ≤ i < n : a.i> + a.n >
≡ { distr de + con max}
F = r max <Max p: 0 ≤ p < n + 1 : <∑ i : p ≤ i < n : a.i> > + a.n
≡ {abre}
F = r max <Max p: 0 ≤ p < n + 1 : sum.p.n > + a.n
Fortalecemos el invariante
I’ : r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > ∧
<Max p: 0 ≤ p < n + 1 : sum.p.n >
1.{P}
0 ≤ n ≤ N ∧
s =
r,n,s = E, 0, F;
{I}
wp.().I
≡ {def de wp}
E = <Max p, q : 0 ≤ p ≤ q ≤ 0 : sum.p.q > ∧ 0 ≤ 0 ≤ N ∧ F =
<Max p: 0 ≤ p < 0 + 1 : sum.p.0 >
≡ {aritm, sup, neutro de ∧ }
E = <Max p, q : p = 0 ∧ q = 0 : sum.p.q > ∧ F = <Max p: p =
1 : sum.p.0 >
≡ {rango unitario, desabre}
E = <∑ i : 0 ≤ i < 0 : a.i> ∧ F = <∑ i : 1 ≤ i < 0 : a.i>
≡ {aritm, rango vacío}
E = 0 ∧ F = 0
3. I ∧
¬ B ⇒ Q
asumo antecedente
r = <Max p, q : 0 ≤ p ≤ q ≤ N : sum.p.q > |[sum.p.q = <∑
< q : a.i> ]|
≡ {sup n = N }
r = <Max p, q : 0 ≤ p ≤ q ≤ n : sum.p.q > |[sum.p.q = <∑
< q : a.i> ]|
≡ {sup }
True
i : p ≤ i
i : p ≤ i
4.
Cota candidata
t : N - n
5. { I ∧ B }
r,n, s = F, n+1, U;
{I}
wp.(r,n,s = F, n+1, U).I
≡ {def de wp}
F = <Max p, q : 0 ≤ p ≤ q ≤ n + 1 : sum.p.q > ∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
: p ≤ i < q : a.i> ]|
≡ {sup, aritm, neutro de ∧ }
F = <Max p, q : 0 ≤ p ≤ q ≤ n + 1 : sum.p.q > ∧
≤ p < (n + 1) + 1 : sum.p.n >
|[sum.p.q = <∑
a.i> ]|
≡ {aritm}
0 ≤ n + 1 ≤ N ∧
|[sum.p.q = <∑ i
U =
<Max p: 0
i : p ≤ i < q :
F = <Max p, q : (0 ≤ p ≤ q ≤ n) ∨ (0 ≤ p ≤ q = n+1) : sum.p.q >
∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
|[sum.p.q =
<∑ i : p ≤ i < q : a.i> ]|
≡ {partición de rango}
F = <Max p, q :0 ≤ p ≤ q ≤ n: sum.p.q > max <Max p,q : 0 ≤ p ≤ q =
n+1: sum.p.q> ∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
|[sum.p.q = <∑ i : p ≤ i < q : a.i> ]|
≡ {sup ,aritm}
F = r max <Max p,q : 0 ≤ p ≤ q ∧ q = n+1: sum.p.q> ∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
|[sum.p.q = <∑ i : p ≤
i < q : a.i> ]|
≡ {elim de una dummy}
F = r max <Max p: 0 ≤ p ≤ n + 1: sum.p.n+1> ∧
U =
<Max p: 0
≤ p < (n + 1) + 1 : sum.p.n >
|[sum.p.q = <∑ i : p ≤ i < q :
a.i> ]|
≡ {desabreviacion }
F = r max <Max p: 0 ≤ p ≤ n + 1: <∑ i : p ≤ i < n+1 : a.i> > ∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
≡ {partición de rango . rango unitario}
F = r max <Max p: 0 ≤ p ≤ n : <∑ i : p ≤ i < n+1 : a.i> > max <∑
i : n + 1 ≤ i < n+1 : a.i> ∧
U =
<Max p: 0 ≤ p < (n + 1) + 1
: sum.p.n >
≡ {aritm}
F = r max <Max p: 0 ≤ p ≤ n : <∑ i : p ≤ i < n+1 : a.i> > max <∑
i : False: a.i>
∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n
>
≡ {rango vacío, neutro de max, aritm}
F = r max <Max p: 0 ≤ p < n + 1 : <∑ i : p ≤ i < n+1 : a.i> >
∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
≡ {sep de término}
F = r max <Max p: 0 ≤ p < n + 1 : <∑ i : p ≤ i < n : a.i> + a.n >
∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
≡ { distr de + con max}
F = r max <Max p: 0 ≤ p < n + 1 : <∑ i : p ≤ i < n : a.i> > + a.n
∧
U =
<Max p: 0 ≤ p < (n + 1) + 1 : sum.p.n >
≡ {abre}
F = r max <Max p: 0 ≤ p < n + 1 : sum.p.n > + a.n ∧
U =
<Max
p: 0 ≤ p < (n + 1) + 1 : sum.p.(n+1) >
…
≡
F = r max (s + a.n) max 0 ∧ U = (s + a.n) max 0
Const N : Int;
Var a : array[0, N) of Int;
r : Int;
{P : N ≥ 2}
S
{Q : r = <Max p, q : 0 ≤ p < q < N : (a.p − a.q)2 >}
I
¬ B
Q’: r = <Max p, q : 0 ≤ p < q < n : (a.p − a.q)2 > ∧
n = N
2 ≤ n ≤ N ∧
5.
{I ∧ B}
r,n = E, n+1;
{I}
asumimos I ∧
B
wp.(r,n = E,n+1).I
≡ {def de wp}
E = <Max p, q : 0 ≤ p < q < n + 1 : (a.p − a.q)2 > ∧ 2 ≤ n + 1 ≤
N
≡ { sup, aritm, neutro de ∧ , sep de término}
E = r max < Max p : 0 ≤ p < n : (a.p - a.n)2>
≡ {aritm}
E = r max < Max p : 0 ≤ p < n - 1
∨ 0 ≤ p = n - 1 : (a.p 2
a.n) >
≡ {partición de rango}
E = r max < Max p : 0 ≤ p < n - 1 : (a.p - a.n)2> max <Max p : p = n
- 1 : (a.p - a.n)2>
≡ {rango unit}
E = r max < Max p : 0 ≤ p < n - 1 : (a.p - a.n)2> max (a.(n-1) a.n)2
necesitamos fortalecer el invariante
I ∧
u = < Max p : 0 ≤ p < n - 1 : (a.p - a.n)2>
5. wp.(r,n = E,n+1).I
≡ {def de wp}
E = <Max p, q : 0 ≤ p < q < n + 1 : (a.p − a.q)2 > ∧ 2 ≤ n + 1 ≤
N
∧ u = < Max p : 0 ≤ p < (n - 1) + 1 : (a.p - a.(n+1))2>
≡ { sup, aritm, neutro de ∧ , sep de término}
E = r max < Max p : 0 ≤ p < n : (a.p - a.n)2>
≡ {aritm}
E = r max < Max p : 0 ≤ p < n - 1
∨ 0 ≤ p = n - 1 : (a.p 2
a.n) > ∧ u = < Max p : 0 ≤ p < (n - 1) + 1 : (a.p - a.(n+1))2>
≡ {partición de rango}
E = r max < Max p : 0 ≤ p < n - 1 : (a.p - a.n)2> max <Max p : p = n
- 1 : (a.p - a.n)2> ∧ u = < Max p : 0 ≤ p < (n - 1) + 1 : (a.p a.(n+1))2>
≡ {rango unit}
E = r max < Max p : 0 ≤ p < n - 1 : (a.p - a.n)2> max (a.(n-1) a.n)2
∧ u = < Max p : 0 ≤ p < (n - 1) + 1 : (a.p - a.(n+1))2>
≡ {sup, sep de término}
E = r max u max (a.(n-1) - a.n)2 ∧ u = < Max p : 0 ≤ p < n - 1 :
(a.p - a.(n+1))2> max (a.n - a.(n+1))2
no sirve
5.
{I ∧ B}
r,n = E, n+1;
{I}
asumimos I ∧
B
wp.(r,n = E,n+1).I
≡ {def de wp}
E = <Max p, q : 0 ≤ p < q < n + 1 : (a.p − a.q)2 > ∧ 2 ≤ n + 1 ≤
N
≡ { sup, aritm, neutro de ∧ , sep de término}
E = r max < Max p : 0 ≤ p < n : (a.p - a.n)2>
≡ {aritm}
E = r max < Max p : 0 ≤ p < n : a.p 2 - 2 a.p a.n +a.n2>
≡ {distr de + con max}
E = r max < Max p : 0 ≤ p < n : a.p 2 - 2 a.p a.n > +a.n2
wp.(r,n = E,n+1).I
≡ {def de wp}
E = <Max p, q : 0 ≤ p < q < n + 1 : (a.p − a.q)2 > ∧ 2 ≤ n + 1 ≤
N
≡ { sup, neutro de ∧ , sep de término }
E = <Max p, q : 0 ≤ p < q < n : (a.p − a.q)2 > max <Max p : 0 ≤ p
< n : (a.p − a.n)2 >
≡ {aritm, sup}
E = r max <Max p : 0 ≤ p < n : ( (a.p - a.n) max - (a.p − a.n) )2 >
≡ {regla de término}
E = r max <Max p : 0 ≤ p < n : a.p - a.n > max <Max p : 0 ≤ p < n :
a.n - a.p >
≡ {distr de + con max}
E = r max (<Max p : 0 ≤ p < n : a.p > - a.n ) max (<Max p : 0 ≤ p <
n : - a.p > + a.n)
necesitamos fortelecer el invariante
I ∧ u = <Max p : 0 ≤ p < n : a.p > ∧
a.p >
s = <Max p : 0 ≤ p < n : -
5.
wp.(r,n, u,s = E,n+1, F, G).I
≡ {def de wp}
E = <Max p, q : 0 ≤ p < q < n + 1 : (a.p − a.q)2 > ∧ 2 ≤ n + 1 ≤
N ∧ F = <Max p : 0 ≤ p < n + 1 : a.p > ∧ G = <Max p : 0 ≤ p < n +
1 : - a.p >
≡ { sup, neutro de ∧ , sep de término }
E = <Max p, q : 0 ≤ p < q < n : (a.p − a.q)2 > max <Max p : 0 ≤ p
< n : (a.p − a.n)2 > ∧ F = <Max p : 0 ≤ p < n : a.p > max a.n ∧
G = <Max p : 0 ≤ p < n : - a.p > max (-a.n)
≡ {aritm, sup}
E = r max <Max p : 0 ≤ p < n : ( (a.p - a.n) max - (a.p − a.n) )2 >
∧ F = u max a.n ∧ G = s max (-a.n)
≡ {regla de término}
E = r max <Max p : 0 ≤ p < n : a.p - a.n > max <Max p : 0 ≤ p < n :
a.n - a.p > ∧ F = u max a.n ∧ G = s max (-a.n)
≡ {distr de + con max}
E = r max (<Max p : 0 ≤ p < n : a.p > - a.n ) max (<Max p : 0 ≤ p <
n : - a.p > + a.n) ∧ F = u max a.n ∧ G = s max (-a.n)
≡ {sup}
E = r max (u - a.n ) max (s + a.n) ∧ F = u max a.n ∧ G = s max
(-a.n)
1.
{P}
r,u,s,n = E,F,G, 0
{I}
wp.(r,u,s,n = E,F,G, 2).I
≡ {def de wp}
E = <Max p, q : 0 ≤ p < q < 2 : (a.p − a.q)2 > ∧ 2 ≤ 2≤ N ∧ F =
<Max p : 0 ≤ p < 2: a.p > ∧ G = <Max p : 0 ≤ p < 2 : - a.p >
≡ {aritm, sup, neutro de ∧ }
E = <Max p, q : p = 0 ∧ q = 1 : (a.p − a.q)2 > ∧ F = <Max p : p
= 0 ∨ p = 1 : a.p > ∧ G = <Max p : p = 0 ∨ p = 1 : - a.p >
≡ {part de rango, rango unit}
E = (a.0 - a.1)2
∧ F = a.0 max a.1 ∧ G = (-a.0) max (-a.1)
13.
Const N : Int;
Var a : array [0, N) of Num;
r : Bool;
{N ≥ 0}
S
{r = <∀ i : 0 ≤ i < N : <∑ j : 0 ≤ j ≤ i : a.j > > 0 >}
Q’ : r = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧
n ≤ N ∧ n = N
0 ≤
5.
i ∧
b
wp
≡
E = <∀ i : 0 ≤ i < n + 1 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ 0 ≤ n
+ 1 ≤ N
≡ { ,,, sep de term}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j : 0
≤ j ≤ n : a.j > > 0
≡ {aritm}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j : 0
≤ j < n + 1 : a.j > > 0
≡ { sep de term}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ (<∑ j : 0
≤ j < n : a.j > + a. n) > 0
≡ { sup}
E = r ∧ (<∑ j : 0 ≤ j < n : a.j > + a. n) > 0
fortalezco el invariante
I ∧
u = <∑ j : 0 ≤ j < n : a.j >
5.
wp
≡
E = <∀ i : 0 ≤ i < n + 1 : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ 0 ≤ n
+ 1 ≤ N ∧ F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ { ,,, sep de term}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j : 0
≤ j ≤ n : a.j > > 0
∧ F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ {aritm}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ <∑ j : 0
≤ j < n + 1 : a.j > > 0 ∧ F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ { sep de term}
E = <∀ i : 0 ≤ i < n : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ (<∑ j : 0
≤ j < n : a.j > + a. n) > 0 ∧ F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ { sup}
E = r ∧ ( u + a. n) > 0 ∧ F = <∑ j : 0 ≤ j < n + 1 : a.j >
≡ { sep de término}
E = r ∧ ( u + a. n) > 0 ∧ F = <∑ j : 0 ≤ j < n : a.j > + a.n
≡ {sup}
E = r ∧ ( u + a. n) > 0 ∧ F = u + a.n
2.
{P}
r,u,n: E,F, 0
{I}
wp.().I
≡ {def de wp}
E = <∀ i : 0 ≤ i <
: <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧ 0 ≤ 1 ≤ N
∧ F = <∑ j : 0 ≤ j < 0 : a.j >
≡ {sup arimt, neutro de ∧ }
E = <∀ i : False : <∑ j : 0 ≤ j ≤ i : a.j > > 0 > ∧
F = <∑ j :
False: a.j >
≡ {rango vacio}
E = True ∧ F = 0
3. I ∧
¬ B ⇒ Q
4 t : N - n
5.
6.
I ∧ B ⇒ 0 ≤ N - n
asumo antecedente, pruebo n ≤ N (sale faci, por hip del invariante)
7.
{I ∧ B ∧ N - n = T}
r,u,n := r ∧ ( u + a. n)
{ N - n < T}
> 0, u
+ a.n, n+1
Asumo antecedente
wp.( ).( N - n < T)
≡ {def de wp}
N - n - 1 < T
≡ {hip}
N - n - 1 < N - 1
≡ {airitm}
True
Const N : Int;
Var a : array[0, N) of Int;
r : Bool;
{P : N ≥ 2}
S
{Q : r ≡ < Min p, q : 0 ≤ p < q < N : a.p − a.q > ≤
8
}
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )