default: VAR T
nodes, eligible: VAR finite_set[below(N)]
enabled: VAR non_empty_finite_set[below(N)]
v, v1, v2: VAR vec
n: VAR below(N)
i: VAR nat
tau: VAR tau_type
% set declarations for use in pigeonhole arguments for ordered finite sequences
lowset(v, enabled, (i: below(card(enabled)))): finite_set[below(N)] =
{j:below(N) | enabled(j) AND v(j) <= sort(vec2seq(v, enabled))`seq(i) }
% The function "reduce" takes a vector of values, filters out the % unenabled elements, sorts them, then removes the "tau" highest and % "tau" lowest values.
reduce(tau)(v, enabled): ne_seqs = LET s = vec2seq(v, enabled) IN LET t = tau(s`length) IN
sort(s) ^ (t, s`length - (t + 1))
% Validity results for the tau-reduced multiset
min_validity: LEMMA
quorum?(enabled, tau)(nodes) IMPLIES EXISTS n: nodes(n) AND enabled(n) AND v(n) <= min(reduce(tau)(v, enabled))
max_validity: LEMMA
quorum?(enabled, tau)(nodes) IMPLIES EXISTS n: nodes(n) AND enabled(n) AND max(reduce(tau)(v, enabled)) <= v(n)
cf: VAR consensus_function
% reduce_choice is a function to choose one value % from the sequence of values that came from reduce.
reduce_choice(cf, eligible, v, tau, default): T = IF empty?[below(N)](eligible) THEN default ELSE cf(reduce(tau)(v, eligible)) ENDIF
% reduce_choice2(tau, cf, default) HAS_TYPE node level choice function
reduce_choice2(tau, cf, default)(v, eligible): T = IF empty?[below(N)](eligible) THEN default ELSE cf(reduce(tau)(v, eligible)) ENDIF
choice_lower_validity: LEMMA
quorum?(eligible, tau)(nodes) IMPLIES EXISTS n: nodes(n) AND eligible(n) AND
v(n) <= reduce_choice(cf, eligible, v, tau, default)
choice_upper_validity: LEMMA
quorum?(eligible, tau)(nodes) IMPLIES EXISTS n: nodes(n) AND eligible(n) AND
reduce_choice(cf, eligible, v, tau, default) <= v(n)
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.