old_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 % % 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 : VAR T_low
high : VAR T_high
l,h,n,m,i : VAR T
rng, nn : VAR nat
pn : VAR posnat
z : 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
sigma(low, high, F): RECURSIVE real
= IF low > high THEN 0 ELSIF high = low THEN F(low) ELSE F(high) + sigma(low, high-1, F) ENDIF MEASURE (LAMBDA low, high, F: abs(high+1-low))
% ---- the following rewrite can be used in place of "expand" to obtain a more % ---- compact expansion. The above form retained for upward compatibility.
sigma_rew: LEMMA sigma(low, high, F) = IF low > high THEN 0 ELSE F(high) + sigma(low, high-1, F) ENDIF
sigma_scal : THEOREM sigma(low, high, (LAMBDA i: a * F(i)))
= a * sigma(low, high, F)
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)
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)
% 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 old_sigma
¤ Dauer der Verarbeitung: 0.12 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.