Module T4.
Inductive seal {A} (f : A) := { unseal : A; seal_eq : unseal = f }.
Arguments unseal {_ _} _.
Arguments seal_eq {_ _} _.
Record uPred : Type := IProp { uPred_holds :> Prop }.
Definition uPred_or_def (P Q : uPred) : uPred :=
{| uPred_holds := P \/ Q |}.
Definition uPred_or_aux : seal (@uPred_or_def). by eexists. Qed.
Definition uPred_or := unseal uPred_or_aux.
Definition uPred_or_eq: @uPred_or = @uPred_or_def := seal_eq uPred_or_aux.

Lemma foobar (P1 P2 Q : uPred) :
(P1 <-> P2) -> (uPred_or P1 Q) <-> (uPred_or P2 Q).