proposition: Lemma umfiltUnK p f1 f2 : valid (f1 \+ f2) -> um_filter p (f1 \+ f2) = f1 -> um_filter p f1 = f1 /\ um_filter p f2 = Unit.
proof: Proof. move=>V'; rewrite (umfiltUn _ V') => E. have W' : valid (um_filter p f1 \+ um_filter p f2). - by rewrite E; move/validL: V'. have F : dom (um_filter p f1) =i dom f1. - move=>x; apply/idP/idP; first by apply: dom_umfilt_subset. move=>D; move: (D); rewrite -{1}E domUn inE W' /=. by case/orP=>// /dom_umfilt_subset; case: validUn V'=>// _ _ /(_ _ D) /negbTE ->. rewrite -{2}[f1]unitR in E F; move/(dom_prec W' E): F=>X. by rewrite X in E W' *; rewrite (joinxK W' E). Qed.
imports: Coq(ssreflect ssrbool ssrfun) mathcomp(ssrnat eqtype seq path bigop) pcm(options prelude finmap seqperm pred seqext) pcm(pcm morphism)