\DOC list_FOLD_CONV \TYPE {list_FOLD_CONV : thm -> conv -> conv} \SYNOPSIS Computes by inference the result of applying a function to the elements of a list. \KEYWORDS conversion, list. \DESCRIBE Evaluating {list_FOLD_CONV fthm conv tm} returns a theorem { |- CONST x0' ... xi' ... xn' = tm' } The first argument {fthm} should be a theorem of the form { |- !x0 ... xi ... xn. CONST x0 ... xi ... xn = FOLD[LR] f e xi } where {FOLD[LR]} means either {FOLDL} or {FOLDR}. The last argument {tm} is a term of the following form: { CONST x0' ... xi' ... xn' } where {xi'} is a concrete list. {list_FOLD_CONV} first instantiates the input theorem using {tm}. It then calls either {FOLDL_CONV} or {FOLDR_CONV} with the user supplied conversion {conv} on the right-hand side. \FAILURE {list_FOLD_CONV fthm conv tm} fails if {fthm} or {tm} is not of the form described above, or if they do not agree, or the call to {FOLDL_CONV} OR {FOLDR_CONV} fails. \USES This function is used to implement conversions for logical constants which can be expressed in terms of the fold operators. For example, the constant {SUM} can be expressed in terms of {FOLDR} as in the following theorem: { |- !l. SUM l = FOLDR $+ 0 l } The conversion for {SUM}, {SUM_CONV} can be implemented as { load_library_in_place num_lib; val SUM_CONV = list_FOLD_CONV (theorem "list" "SUM_FOLDR") Num_lib.ADD_CONV; } Then, evaluating {SUM_CONV (--`SUM [0;1;2;3]`--)} will return the following theorem: { |- SUM [0;1;2;3] = 6 } \SEEALSO FOLDL_CONV, FOLDR_CONV. \ENDDOC