proposition: Lemma GE_J_domain E : domain (GE_J E) = (E\times E) \times E.
proof: Proof. apply: extensionality => x. move /funI_P => [z /GE_J_P [a [b [c [ha hb hc eq]]]] ->]. by rewrite eq pr1_pair; apply: setXp_i => //; apply: setXp_i. move=> /setX_P [pa /setX_P[pb pc pd] pe]; apply/funI_P. exists (J x (J (P (P x)) (J (Q (P x)) (Q x)))); aw; trivial. by rewrite - {1} pa - {1} pb; apply/GE_J_P; exists (P (P x)), (Q (P x)), (Q x). Qed.
imports: mathcomp(ssreflect ssrfun ssrbool eqtype ssrnat)