0

given a goal involving ... <-> Forall P [] I want to rewrite Forall P [] to True and then rewrite True /\ Forall P ys to Forall P ys

(1) there is a theorem Forall_nil saying Forall P [] but how do I use that to rewrite Forall P [] to True (2) there don't seem to be the obvious simplification/rewrite rules like True /\ P <-> P

  • I wonder whether you're really in a situation where that's necessary, because most of the time those trivial propositions can be left alone and dispatched easily at the end of the proof. Some more context would be helpful to motivate this problem or allow us to show a better solution. – Li-yao Xia Nov 03 '18 at 16:48
  • No its not really necessary. But I want to know how to do it, if it is possible in Coq. – user2423780 Nov 04 '18 at 01:08

1 Answers1

1

The equivalences to rewrite those are not in the standard library but they are rather easy to prove on the spot.

Theorem forall_empty A (P : A -> Prop) : Forall P [] <-> True.
Proof. firstorder. Qed.

Theorem True_and (P : Prop) : True /\ P <-> P.
Proof. firstorder. Qed.
Li-yao Xia
  • 31,896
  • 2
  • 33
  • 56