1

My goal is like below. Are there any tactics to solve these trivial goals?

Goal forall A (x : A) P Q,
  (forall y, P y /\ Q y) ->
  Q x.
Proof.
  intros. intuition. auto.
Abort.

(* a more complex version *)
Goal forall A (x : A) P Q R,
  (forall y, R -> P y /\ Q y) ->
  R ->
  Q x.
Proof.
  intros. intuition. auto.
Abort.
Qinshi Wang
  • 129
  • 4
  • I guesss `eauto with proj2` should work. I don't know why it comes out it doesn't. – Qinshi Wang Jan 09 '19 at 00:45
  • I think the reason eauto cannot use proj2 as a hint is because (to quote the manual) "The head symbol of the type of term is a bound variable". That is, the conclusion of proj2 is just an arbitrary proposition, so there is no head symbol to index it under. – Vilhelm Sjöberg Jan 09 '19 at 06:10
  • 1
    In this particular case `firstorder` would work. A manual solution is to use `apply`, as it is smart enough to deal with conjunctions. – Anton Trunov Jan 09 '19 at 09:13
  • @Vilhelm Sjöberg That makes sense. Applying `proj2` has no restriction on goal and may cause too much useless search. – Qinshi Wang Jan 10 '19 at 07:43

1 Answers1

1

The tactic intuition does not work because that tactic is designed for propositional logic (i.e. it dos not the quantifier in forall y, R -> ... There is another tactic for this, it is called firstorder. Try it!

Yves
  • 3,808
  • 12
  • 12
  • sorry, I did not read Anton's comment. I believe this should have been made an answer instead. – Yves Jan 10 '19 at 06:54