Транзитивность -> в Coq
Я пытаюсь доказать транзитивность ->
в предложениях Coq:
Theorem implies_trans : forall P Q R : Prop,
(P -> Q) -> (Q -> R) -> (P -> R).
Proof.
Я хотел уничтожить все предложения и просто обработать все 8 возможностей с рефлексивностью. Видимо, не все так просто. Вот что я попробовал:
Theorem implies_trans : forall P Q R : Prop,
(P -> Q) -> (Q -> R) -> (P -> R).
Proof.
intros P Q R H1 H2.
destruct P. (** Hmmm ... this doesn't work *)
Admitted.
И вот что я получаю:
1 subgoal
P, Q, R : Prop
H1 : P -> Q
H2 : Q -> R
______________________________________(1/1)
P -> R
с последующей ошибкой:
Error: Not an inductive product.
Любая помощь очень ценится, спасибо!
1 ответ
Логика Кока не является классической логикой, где суждения являются истинными или ложными. Вместо этого он основан на теории типов и по умолчанию имеет интуитивистский вкус.1 В теории типов вы должны думать о P -> Q
будучи функцией от "вещей типа P
"к" вещам типа Q
".2
Обычный способ доказать цель типа P -> Q
это использовать intro
или же intros
ввести гипотезу типа P
затем используйте эту гипотезу для создания элемента типа Q
,
Например, мы можем доказать, что (P -> Q -> R) -> (Q -> P -> R)
, В интерпретации "импликация - это функция" это может быть истолковано как выражение, что если у нас есть функция, которая принимает P
а также Q
и производит R
тогда мы можем определить функцию, которая принимает Q
а также P
и производит R
, Это та же функция, но с замененными аргументами.
Definition ArgSwap_1 {P Q R: Prop}: (P -> Q -> R) -> (Q -> P -> R) :=
fun f q p => f p q.
Используя тактику, мы можем видеть типы отдельных элементов.
Lemma ArgSwap_2 {P Q R: Prop}: (P -> Q -> R) -> (Q -> P -> R).
Proof.
intro f.
intros q p.
exact (f p q).
Qed.
После intro
, Мы видим, что f: P -> Q -> R
, так f
наша функция, которая занимает P
с и Q
с и производит R
s. После intros
(который вводит несколько терминов), мы видим, что q: Q
а также p: P
, Последняя строка (перед Qed.
) просто применяет функцию f
в p
а также q
чтобы получить что-то в R
,
Для вашей проблемы, intros
представляет предложения P
, Q
а также R
, так же как H1: P -> Q
а также H2: Q -> R
, Мы все еще можем ввести еще один термин типа P
хотя, поскольку цель P -> R
, Можете ли вы увидеть, как использовать H1
а также H2
и элемент P
производить элемент R
? Подсказка: вы пройдете через Q
, Кроме того, помните, что H1
а также H2
являются функциями.
1 Вы можете добавить в качестве аксиомы закон исключенного среднего, который позволил бы анализ того типа, который вы хотите, но я думаю, что он не соответствует смыслу Coq.
2 Если вам интересно, элементы Prop
все еще типы и имеют очень похожее поведение с элементами Set
или же Type
, Единственная разница в том, что Prop
является "непредсказуемым", что позволяет количественно оценивать предложения по всем предложениям. Например forall P: Prop, P -> P
является элементом Prop
, но forall A: Type, A -> A
является элементом следующего уровня до Type
(Type
на самом деле бесконечная иерархия).