sigma[T: TYPEFROM int]: THEORY %------------------------------------------------------------------------------ % The summations theory introduces and defines properties of the sigma % function that sums an arbitrary function F: [T -> real] over a range % from low to high % % high % ---- % sigma(low, high, F) = \ F(j) % / % ---- % j = low % % NOTE: % % This is the generic theory. It is usually preferable to use % sigma_nat, sigma_int, sigma_below, etc. % % MODIFICATIONS: % % 8/7/01 added sigma_zero, sigma_with % % 3/24/06 generalized to allow index ranges to fall outside of % domain of T when high < low. This upgrade will break % some old proofs, but will reduce TCC generation significantly % % 11/7/07 replace sigma with simpler definition. Old definition available in % old_sigma_*.pvs theories. Also old definition is retained as % sigma2. % % AUTHORS: %% Rick Butler NASA Langley Research Center % Paul Miner NASA Langley Research Center % %------------------------------------------------------------------------------
BEGIN
ASSUMING
connected_domain: ASSUMPTION (FORALL (x, y: T), (z: integer):
x <= z AND z <= y IMPLIES T_pred(z))
ENDASSUMING
T_low?: MACRO set[int] = {i:int | EXISTS (j:T): j <= i}
T_low : TYPE = {i:int | T_pred(i) OR T_low?(i)}
T_high?: MACRO set[int] = {i:int | EXISTS (j:T): i <= j}
T_high : TYPE = {i:int | T_pred(i) OR T_high?(i)}
low,low1,low2 : VAR T_low
high,high1,high2 : VAR T_high
l,h,n,m,i : VAR T
rng, nn : VAR nat
pn : VAR posnat
z,z1,z2 : VAR int
a,x,B : VAR real
T_pred_lem : LEMMA low <= z AND z <= high IMPLIES T_pred(z)
% AUTO_REWRITE+ T_pred_lem %% THIS DOES NOT HELP
% T_pred_low : LEMMA low <= m IMPLIES T_pred(low) % T_pred_high: LEMMA m <= high IMPLIES T_pred(high) % AUTO_REWRITE+ T_pred_low, T_pred_high %% DOES NOT HELP
% *** NEW *** Simpler Definition
sigma(low, high, F): RECURSIVE real
= IF low > high THEN 0 ELSE F(high) + sigma(low, high-1, F) ENDIF MEASURE (LAMBDA low, high, F: abs(high+1-low))
% *** Old Definition ***
sigma2(low, high, F): RECURSIVE real
= IF low > high THEN 0 ELSIF high = low THEN F(low) ELSE F(high) + sigma2(low, high-1, F) ENDIF MEASURE (LAMBDA low, high, F: abs(high+1-low))
% provides one unfolding analogous to old definition -- useful for upgrade
sigma_rew : LEMMA sigma(low, high, F) = IF low > high THEN 0 ELSIF high = low THEN F(low) ELSE F(high) + sigma(low, high-1, F) ENDIF
sigma_bound : THEOREM low - 1 <= high AND
(FORALL i: i >= low AND i <= high IMPLIES F(i) <= B) IMPLIES sigma(low, high, F) <= B*(high-low+1) %was abs(high-low+1)
sigma_eq_one_arg : THEOREM low<=z AND z<=high AND
(FORALL (i:subrange(low,z-1)):F(i)=0) AND
(FORALL (i:subrange(z+1,high)):F(i)=0) IMPLIES
sigma(low,high,F) = F(z)
sigma_eq_one_arg2 : THEOREM low<=z AND z<=high AND
(FORALL (i:subrange(low,high)):i/=z IMPLIES F(i)=0) IMPLIES
sigma(low,high,F) = F(z)
sigma_eq_two_args: THEOREM low<=z1 AND z1<=high AND
low<=z2 AND z2<=high AND z1/=z2 AND
(FORALL (i:subrange(low,high)): i/=z1 AND i/=z2 IMPLIES F(i)=0) IMPLIES sigma(low,high,F) = F(z1)+F(z2)
sum_it_def(low, high, F,a): RECURSIVE real
= IF low > high THEN a ELSE sum_it_def(low+1,high,F,a+F(low)) ENDIF MEASURE (LAMBDA low, high, F, a: abs(high+1-low))
sum_it(low,high,F) : real = sum_it_def(low,high,F,0)
sum_it_prop : LEMMA
low - 1 <= i AND i <= high =>
sum_it_def(i+1,high,F,sigma(low,i,F)) = sigma(low,high,F)
sigma_it(low,high,F) : MACRO real = sum_it(low,high,F)
% Note: We would have preferred to use the following definitions: % % T_low?: MACRO set[int] = {i:int | EXISTS (j:T): j <= i} % T_low : TYPE = {i:int | T_low?(i)} % % T_high?: MACRO set[int] = {i:int | EXISTS (j:T): i <= j} % T_high : TYPE = {i:int | T_high?(i)} % % but could not find any judgements that would fire and prevent % spurious TCC generation.
END sigma
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.