// Vladimir Poplavskij. Wykladowca
// Suma elementow tablicy
// 2022-10-21
ArraySum(arr, n) {
i = 0;
sum = 0;
while (i < n) {
sum = sum + arr[i];
i = i + 1;
}
return sum;
}
arr
z liczbami całkowitymi. Rozmiar tablicy - $ n > 0 $. Suma elementów tablicy. Przeanalizować dane wejściowe. Zaimplementować psedokod. Udowodnić częściowa poprawność algorytmu.Dodatkowe zmienne $ i = 0 $ i $ sum = 0 $ do inicjacji pętli
// Vladimir Poplavskij. Wykladowca
// Suma elementow tablicy
// 2022-10-21
ArraySum(arr, n) {
i = 0;
sum = 0;
while (i < n) {
sum = sum + arr[i];
i = i + 1;
}
return sum;
}
Q (warunek wstępny ): $ i = 0 $ i $ sum = 0 $
B (warunek zatrzymania): $ while (i < n) $
S (ciało pętli ): $ sum = sum + arr[i]; $ oraz $ i = i + 1; $
R (warunek końcowy): $ \sum_{i=0}^{n} arr[i] $
$Niezmiennik( i, sum ) = 0 \leq i \leq n \space\Lambda\space \sum_{k=0}^{i-1} arr[k]$
Udowdnimy że niezmiennik pętli jest prawdziwy po osiągnięciu pętli:
Przypadek podstawowy jest wypelniony
Załóżmy, że niezmiennik i warunek zatrzymania są prawdziwe na końcu dowolnej iteracji, pokaż, że niezmiennik pozostaje prawdziwy po jednej iteracji.
Załóżmy, że niezmiennik i warunek zatrzymania są prawdziwe na końcu dowolnej iteracji, pokaż, że niezmiennik pozostaje prawdziwy po jednej iteracji.
Indeksu dolnego $ 0 $ używamy dla wartości przed iteracją, a $ 1 $ dla wartości po iteracji.
Zakładamy dwie rzeczy, niezmiennik i warunek zatrzymania przed pętlami
Musimy udowodnic, ze:
$Niezmiennik( i_1, sum_1 ) = 0 \leq i_1 \leq n \space\Lambda\space sum_1=\sum_{k=0}^{i_1-1} arr[k]$
Udowodnimy te dwie koniunkcje osobno
Konjunkcja 1
$ 0 \leq i_1 \leq n $
Konjunkcja 2
$ sum_1=\sum_{k=0}^{i_1-1} arr[k] $
Z ciala pętli mamy $sum_1 = sum_1 + arr[i_0] $ i $ i_1 = i_0 + 1$
$$ sum_1 = sum_1 + arr[i_0] $$(z ciala pętli)
$$ = (\sum_{k=0}^{i_0-1} arr[k]) + arr[i_0] $$(z $Niezmiennik(i_0, sum_0)$)
$$ = \sum_{k=0}^{i_0} arr[k] $$
$$ = \sum_{k=0}^{i_1 - 1} arr[k] $$
Sprawdzony konjunkcji 1 i 2, wykonany krok indukcyjny.
Udowodnic, że niezmiennik i negacja warunka zatrzymania razem pozwalają nam podsumować warunek końcowy.
niezmiennik i negacja warunka zatrzymania razem: $$ 0 \leq i \leq n \space\Lambda\space sum=\sum_{k=0}^{i-1} arr[k] \space\Lambda\space i \geq n$$ jedyne co trzeba udowdnic ze 1 i 3 konkjukcii sa prawdziwe gdy $ i = n $ , wtedy mamy $$ i = n \space\Lambda\space sum = \sum_{k=0}^{n} arr[k] $$ Suma wszystkich elementów tablicy $ arr $ jest równa $ sum $.
Warunek końcowy - udowdniony.
Mamy ze algorytm obliczenia sumy tablicy ma własność stopu i częściowo poprawny - z tego wynika ze jest całkowicie poprawny