Я должен доказать по индукции, что
no f xs ==> null (filter f xs)
Где :
filter p [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
null [] = True; null _ = False
no p [] = True
no p (x:xs)
| p x = False
| otherwise = no p xs
Logic implication:
True ==> False = False
_ ==> _ = True
Итак, я предположил, что следующее мое предположение и мое утверждение:
Assumption: no f xs ==> null (filter f xs)
Claim: no f (x:xs) ==> null (filter f (x:xs))
И я начал пытаться доказать базовый вариант (пустой список):
no f [] ==> null (filter f [])
== {- Filter.1, filter p [] = [] -}
no f [] ==> null ([])
== {- No.1, no p [] = True-}
True ==> null ([])
== {- Null.1, null [] = True -}
True ==> True
Но я не уверен, что это правильно, потому что я доказал, что они оба Истинны, а не то, что если левая часть - Истина, а вторая часть - Ложь, то подразумевается Ложь (это определение ==> ). Это правильно? Как я могу продолжить доказательство? Я не совсем понимаю, как я могу использовать индукцию для доказательства импликации ...
Заранее спасибо!
no f []
. Мы знаем, просто расширяя определения, чтоnull (filter f []) = null [] = True
истинно. Вы можете сразу приступить к доказательству индуктивного случая! - person hao   schedule 07.12.2015True ==> True
является правильным доказательствомno f [] ==> null (filter f [])
, потому что некоторое утверждение считается доказанным, если оно эквивалентноTrue
, аTrue ==> True
тривиальноTrue
. - person user2407038   schedule 07.12.2015