%----------------------------------------------------------------------------- % Zip two sequences of countable length together to form a single sequence of % pairs. The length of the new sequence is the minimum length of the original % two sequences. % % 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_zip[T1, T2: TYPE]: THEORY BEGIN
n: VAR nat
t: VAR [[T1, T2]]
p1: VAR pred[T1]
p2: VAR pred[T2]
cseq1: VAR csequence[T1]
fseq1: VAR finite_csequence[T1]
iseq1: VAR infinite_csequence[T1]
nseq1: VAR nonempty_csequence[T1]
nfseq1: VAR nonempty_finite_csequence[T1]
cseq2: VAR csequence[T2]
fseq2: VAR finite_csequence[T2]
iseq2: VAR infinite_csequence[T2]
nseq2: VAR nonempty_csequence[T2]
nfseq2: VAR nonempty_finite_csequence[T2]
state: VAR [csequence[T1], csequence[T2]]
zip_struct(state):
csequence_struct[[T1, T2], [csequence[T1], csequence[T2]]] = IF empty?(state`1) OR empty?(state`2) THEN inj_empty_cseq ELSE inj_add((first(state`1), first(state`2)),
(rest(state`1), rest(state`2))) ENDIF
zip_extensionality: THEOREM FORALL (cseq1, cseq3: csequence[T1]), (cseq2, cseq4: csequence[T2]):
length_eq(cseq1, cseq2) AND
length_eq(cseq3, cseq4) AND zip(cseq1, cseq2) = zip(cseq3, cseq4) IMPLIES cseq1 = cseq3 AND cseq2 = cseq4
zip_some: THEOREM FORALL cseq1, cseq2, p1, p2:
some(LAMBDA t: p1(t`1) OR p2(t`2))(zip(cseq1, cseq2)) IFF COND length_lt(cseq1, cseq2) ->
some(p1)(cseq1) OR
(EXISTS (i: indexes(cseq2)):
i < length(cseq1) AND p2(nth(cseq2, i))),
length_gt(cseq1, cseq2) ->
(EXISTS (i: indexes(cseq1)):
i < length(cseq2) AND p1(nth(cseq1, i))) OR some(p2)(cseq2), ELSE -> some(p1)(cseq1) OR some(p2)(cseq2) ENDCOND
zip_every: THEOREM FORALL cseq1, cseq2, p1, p2:
every(LAMBDA t: p1(t`1) AND p2(t`2))(zip(cseq1, cseq2)) IFF COND length_lt(cseq1, cseq2) ->
every(p1)(cseq1) AND
(FORALL (i: indexes(cseq2)):
i < length(cseq1) IMPLIES p2(nth(cseq2, i))),
length_gt(cseq1, cseq2) ->
(FORALL (i: indexes(cseq1)):
i < length(cseq2) IMPLIES p1(nth(cseq1, i))) AND every(p2)(cseq2), ELSE -> every(p1)(cseq1) AND every(p2)(cseq2) ENDCOND
END csequence_zip
¤ 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.0.11Bemerkung:
(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.