В настоящее время я нахожусь в главе 5 «Основы программного обеспечения», но почувствовал необходимость вернуться к первой главе, чтобы прояснить пару вещей. В частности, есть упражнение, которое я не совсем усвоил, в котором нас просят дважды использовать деструкцию, чтобы доказать результат по булевым. Здесь он меняется с именами и другими деталями.Доказательство по логическим значениям, false = true
Inductive bool: Type :=
|true: bool
|false: bool.
Definition fb (b1:bool) (b2:bool) : bool :=
match b1, b2 with
| false, false => false
| _, _ => true
end.
Theorem th: forall a b: bool,
fb a b = false -> b = false.
Proof.
intros [] [] H.
- rewrite <- H. reflexivity.
- reflexivity.
- rewrite <- H. reflexivity.
- reflexivity.
Qed.
Когда на первое клеща, контекст и целях является нонсенсом:
H : fb true true = false
______________________________________(1/1)
true = false
Второй галочка гипотеза неверна. Третий тик - это тот же вздор, что и первый. Только четвертый тик разумен с:
H : fb false false = false
______________________________________(1/1)
false = false
Я понимаю, что по правилам перезаписи все это работает. Однако у меня такое впечатление, что мы уходим от узкого пути истины для пустыни ложности. Точнее, и AFAIK, ложная гипотеза может быть сделана для доказательства ЛЮБОГО утверждения, истинного или ложного. Здесь мы используем его, чтобы доказать, что false = true, ОК, почему нет, но все же это заставляет меня чувствовать себя несколько неудобно. Я бы не ожидал, что помощник по доказательству разрешит это.
Разрабатывая немного
В типичном доказательстве от противного, я выбрал бы гипотезу случайным образом, и выводит цели, пока не найдет ни тавтологию или противоречие. Затем я заключил бы, была ли моя гипотеза верной или ложной.
Что здесь происходит, в случаях 1 (то же самое для случая 3), Кок начинается с гипотезы, что является ложным:
H : fb true true = false
применяет его к цели, что является противоречием:
true = false
и объединяет их, чтобы найти тавтологию.
Это не способ рассуждения, о котором я знаю. Это напоминает студенческие «шутки», где, начиная с 0 = 1, может быть доказан любой абсурдный результат по натуральным числам.
Followup
Так сегодня утром во время моего коммутируют я думал о том, что я только что написал выше. Теперь я считаю, что случаи 1 и 3 являются правильными доказательствами от противного. Действительно, H является ложным, и мы используем его для доказательства цели, которая является ложной. Гипотезы (значения a и b) должны быть отклонены. Меня могло смутить то, что, используя переписывание, мы делаем часть пути «назад», начиная с цели.
Я немного нерешенным для случая 2, который гласит:
H : fb true false = false
______________________________________(1/1)
false = false
который в основном false -> true
, тавтология под «принцип взрыва». Я не думаю, что это можно было бы использовать так прямо в доказательстве.
Хорошо, не уверен, что я полностью понял, что находится под капотом, но доверие к Coq не тронуто. Обязательно продолжайте и вернитесь к главе 5. Спасибо всем за ваши комментарии.
Различия в делах могут иметь невозможные случаи, и они могут быть отправлены/исключены путем установления ложности. Это общая и действительная логическая аргументация. –
Я не могу сказать, что вы считаете непонятным в этом примере; вы бы хотели уточнить? Разве что Кок производит подцели, которые имеют противоречивые гипотезы в них? –
Возможно, путаница произошла в «в типичном доказательстве от противного». Действительно, вы не делаете здесь доказательства из-за противоречия, но используете принцип взрыва. https://en.wikipedia.org/wiki/Principle_of_explosion, также известный как «Ex Falso, Quodlibet», «От фальшивости что-то истинно», который в наши дни кажется довольно модным. – ejgallego