2016-10-05 2 views
-2

Привет, я совершенно новичок в haskell и просто получил структурную индукцию и задавался вопросом, может ли кто-нибудь объяснить, какие шаги я должен предпринять, было бы очень полезно.Структурные индукции в haskell. Списки и сумма

Вопрос: - вычисляет сумму всех чисел в списке

sum :: [Integer] -> Integer 
sum []  = 0 
sum (x:xs) = x + sum xs 

- присоединяет два списка

(++) :: [Integer] -> [Integer] -> [Integer] 
[]  ++ ys = ys 
(x:xs) ++ ys = x : (xs ++ ys) 

Докажи (с помощью структурной индукции), что имеет место равенство, для всех списков целых чисел xs и ys:

sum (xs ++ ys) = sum xs + sum ys 

Не забывайте называть IH. на стадии индукции. Также убедитесь, что вы четко указываете причины, по которым вы делаете шаги в своих доказательствах.

Мои шаги: Чтобы доказать:

sum (xs ++ ys) = sum xs + sum ys 

Доказательство: по структурной индукции

Пусть P() < --- действительно не знаю, что типа там, так что если кто-то может взять его там я бы очень оценил это!

+1

Если вы надеетесь, что кто-то собирается сделать вам домашнее задание, я надеюсь, что ваши надежды будут разбиты. См. Также [Как я могу задать и ответить на домашние вопросы?] (Http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions) за советом по переводу этой копии -and-paste в вопрос, который может быть продуктивным как для вас, так и для сайта. Тем временем я следую совету на этой странице в голосовании, чтобы закрыть этот вопрос как «слишком широкий». –

+0

Не домашнее задание, хотя. Это старый экзаменационный вопрос из университета, в котором я хочу принять участие в следующем году. Поэтому не подходите к выводам. – Huskey

+0

Фактически, «домашнее задание» против «не домашнее задание» не имеет значения. Важно то, что вы, очевидно, не приложили никаких усилий для решения проблемы самостоятельно, и не пытайтесь идентифицировать и сообщить нам точно, что вам нужно знать, чтобы добиться прогресса. –

ответ

2

++ определяется по индукции по первому аргументу xs, поэтому это обычно является хорошим признаком того, что нам необходимо продолжить индукцию по xs.

Таким образом, мы фиксируем ys один раз для всех, и определить P(xs) следующим

P(xs) = (sum (xs ++ ys) == sum xs + sum ys) 

Теперь вы должны доказать, что P(xs) справедливо для всех xs. Примените принцип индукции в списках, и вы должны быть в порядке.

Смежные вопросы