Интуитивно я ожидал бы, что "математический" ответ all (==1) [1,1..]
будет True
, потому что все элементы в списке, который содержит только 1, равны 1. Однако я понимаю, что "вычислительно", процесс оценка бесконечного списка для проверки того, что каждый элемент действительно равен 1, никогда не будет завершаться, поэтому выражение вместо этого "оценивает" снизу или ⊥
.
Я нахожу этот результат контр-интуитивным и немного нервирующим. Я думаю, что тот факт, что список бесконечен, смущает проблему как математически, так и вычислительно, и я хотел бы услышать от всех, у кого есть понимание и опыт в этой области.
Мой вопрос в том, что это самый математически правильный ответ? ⊥
или True
?
Некоторая разработка относительно того, почему один ответ является более правильным, чем другой, также будет высоко оценен.
edit: Это может косвенно иметь отношение к изоморфизму Карри-Говарда (Программы являются доказательствами и типами являются теоремами) и Теоремы о неполноте Гёделя. Если я правильно помню, одна из теорем о неполноте может быть (невероятно грубо) обобщена, говоря, что "достаточно мощные формальные системы (например, математика или язык программирования) не могут доказать все истинные утверждения, которые могут быть выражены в системе"