Как доказать (для всех x, P x /\ Q x) -> (для всех x, P x) [В Coq]

StackOverflow https://stackoverflow.com/questions/835183

  •  08-07-2019
  •  | 
  •  

Вопрос

Как доказать (для всех x, P x /\ Q x) -> (для всех x, P x) в Coq?Пытаюсь уже несколько часов и не могу понять, как разбить антецедент на что-то, что Coq может переварить.(Очевидно, я новичок :)

Это было полезно?

Решение

Вы можете сделать это быстрее, просто применив H, но этот скрипт должно быть более понятным.

Lemma foo : forall (A:Type) (P Q: A-> Prop), (forall x, P x /\ Q x) -> (forall x, P x).
intros.
destruct (H x). 
exact H0.
Qed.

Другие советы

Попробуй

elim (H x).

На самом деле, я понял это, когда нашел это:

Математика для компьютерщиков 2

В уроке 5 он решает точно такую же задачу и использует "cut (P x / \ Q x)", который переписывает цель из "P x" в "P x / \ Q x -> P x".Оттуда вы можете выполнить некоторые манипуляции, и когда цель просто "P x / \ Q x", вы можете применить "forall x :P x /\ Q x", а остальное просто.

Assume ForAll x: P(x) /\ Q(x)
   var x; 
      P(x) //because you assumed it earlier
   ForAll x: P(x)
(ForAll x: P(x) /\ Q(x)) => (ForAll x: P(x))

Интуитивно, если для всех x выполняется P (x) И Q (x), то для всех x выполняется P (x).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top