%----------------------------------------------------------------------------- % Merge two sequences into a single sequence of countable length by taking one % element from the first sequence, then one element from the second sequence, % then ... % % Author: Jerry James <loganjerry@gmail.com> % % This file and its accompanying proof file are distributed under the CC0 1.0 % Universal license: http://creativecommons.org/publicdomain/zero/1.0/. % % Version history: % 2007 Feb 14: PVS 4.0 version % 2011 May 6: PVS 5.0 version % 2013 Jan 14: PVS 6.0 version %-----------------------------------------------------------------------------
csequence_merge[T: TYPE]: THEORY BEGIN
t: VAR T
p: VAR pred[T]
n: VAR nat
cseq, cseq1, cseq2, cseq3, cseq4: VAR csequence
fseq1, fseq2: VAR finite_csequence
iseq: VAR infinite_csequence
eseq: VAR empty_csequence
state: VAR [csequence, csequence]
merge_struct(state): csequence_struct = IF empty?(state`1) THENIF empty?(state`2) THEN inj_empty_cseq ELSE inj_add(first(state`2), (rest(state`2), state`1)) ENDIF ELSE inj_add(first(state`1), (state`2, rest(state`1))) ENDIF
merge_nth: THEOREM FORALL cseq1, cseq2, (n: indexes(merge(cseq1, cseq2))):
nth(merge(cseq1, cseq2), n) = IF length_lt(cseq1, cseq2) AND n >= length(cseq1) * 2 THEN nth(cseq2, n - length(cseq1)) ELSIF length_lt(cseq2, cseq1) AND n >= length(cseq2) * 2 THEN nth(cseq1, n - length(cseq2)) ELSIF even?(n) THEN nth(cseq1, n / 2) ELSE nth(cseq2, (n - 1) / 2) ENDIF
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.