Получение рекурсивного определения от спецификации функций

cs.stackexchange https://cs.stackexchange.com/questions/118478

Вопрос

Учитывая эту спецификацию функции, где название xs связан с списком, # обозначает его кардинальность и генеракодицетагCode - это оператор . ...

$$ \ leq (\ sum i: 0 \ leq i <\ #xs: xs.i * (i + 1) \ vant) $$ < / P >.

Мне нужно получить рекурсивную функцию с использованием индукции.

Базовый чехол: list index

\ begin {align} \ Left (\ sum i: 0 \ leq i <\ # []: xs.i * (i + 1) \ верно) && \ text {((текстовая замена - xs бесплатно)} \\ \ Left (\ sum i: 0 \ leq i <0: xs.i * (i + 1) \ верно) && \ text {(def. из #)} \\ \ Left (\ Sum i: false: xs.i * (i + 1) \ верно) && \ text {(алгебра)} \\ \ Left (\ sum i: 0 \ leq i <\ #xs: xs.i * (i + 1) \ верно) && \ text {(пустой диапазон)} \ end {align}

Индуктивный чехол: []

\ begin {align} \ Left (\ sum i: 0 \ leq i <\ # (x: xs): (x: xs) .i * (i + 1) \ верно) && \ text {(текстовая замена - xs бесплатный)} \ \ \ левый (\ sum i: 0 \ leq i <1 + \ #xs: (x: xs) .i * (i + 1) \ верно) && \ text {(def. из #)} \ end {align}

Как я могу продолжить отсюда?

Это было полезно?

Решение

Ваша обозначение и понимание довольно хорошие.

Легче рассмотреть генеракодицетагкод как индуктивный чехол вместо (xs:x)

\ begin {align} \ sum_ {i: \ 0 \ leq i <\ # (xs: x)} & (xs: x) .i * (i + 1) \\ &=sum _ {i: \ 0 \ leq i <\ # xs + 1} (x: xs) .i * (I + 1) \\ &=sum_ {i: \ 0 \ leq i <\ #x} (xs: x) .i * (i + 1) + \ sum_ {i: \ i=# xs} (xs: x) .i * (I + 1) \\ &=sum_ {i: \ 0 \ leq i <\ #x} xs.i * (i + 1) + x * (\ # xs + 1), \\ \ end {align} Где мы предполагаем, что индекс списка начинается с 0.

Если мы обозначим функцию по $ f $ , вышеуказанное равенство становится $$ f (xs: x)= f (xs) + x * (\ # xs + 1), $$ который является рекурсивным шагом рекурсивного определения.

Базовый чехол, как вы указали, это $$ f ([])=sum_ {i: \ 0 \ leq i <0} [] .i * (i + 1)=sum_ {i: \ text { Пустой набор}} []. I * (i + 1)= 0. $$


<Сильные> Упражнения . Вытащите следующую рекурсивую формулу одинаковой функции $ F $ . $$ f (x: xs)= f (xs) + t (xs) + x, $$ где $$ t (xs)=sum_ {i: \ 0 \ leq i <\ # (xs)} xs.i, $$ Сумма предметов в $ xs $ .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top