constructor; repeat intro.
destruct H; subst; split...
destruct H; subst.
exists z. exists z. split...
destruct H; subst.
exists x. exists x. split...
Qed.
End EquivPAFunctor.
Section PairSAFunctor.
Variables (F1 F2: functor).
Variables (J_F1: forall A, Join (F1 A)) (pafF1: pafunctor F1 J_F1).
Variables (J_F2: forall A, Join (F2 A)) (pafF2: pafunctor F2 J_F2).

(* Specifications: *)
(* The second argument must be explicitly specified (instead of _) *)
(* Or else, it will cause universe inconsistency in floyd. *)
Lemma paf_pair : @pafunctor (fpair F1 F2) (fun A : Type => Join_prod (F1 A) (J_F1 A) (F2 A) (J_F2 A)).
Proof with auto.