End FilterLemmas.
(*********)
(* valid *)
(*********)
Section ValidLemmas.
Variables (K : ordType) (V : Type) (U : union_map_class K V).
Implicit Types (k : K) (v : V) (f g : U).

(* Specifications: *)
Lemma invalidE f : ~~ valid f <-> f = um_undef.
Lemma validF k f : valid (free k f) = valid f.
Lemma validFUn k f1 f2 :
valid (f1 \+ f2) -> valid (free k f1 \+ f2).
Lemma validUnF k f1 f2 :
valid (f1 \+ f2) -> valid (f1 \+ free k f2).
Lemma validUUn k v f1 f2 :
k \in dom f1 -> valid (upd k v f1 \+ f2) = valid (f1 \+ f2).
Lemma domeq0E f : dom_eq f Unit -> f = Unit.
Lemma domeq_trans f1 f2 f3 :
dom_eq f1 f2 -> dom_eq f2 f3 -> dom_eq f1 f3.
Lemma domeqVUnE f1 f2 f1' f2' :
dom_eq f1 f2 -> dom_eq f1' f2' ->
valid (f1 \+ f1') = valid (f2 \+ f2').
Lemma domeqVUn f1 f2 f1' f2' :
dom_eq f1 f2 -> dom_eq f1' f2' ->
valid (f1 \+ f1') -> valid (f2 \+ f2').
Lemma domeqfUn f f1 f2 f1' f2' :
dom_eq (f \+ f1) f2 -> dom_eq f1' (f \+ f2') ->
dom_eq (f1 \+ f1') (f2 \+ f2').
Lemma domeqUnf f f1 f2 f1' f2' :
dom_eq f1 (f \+ f2) -> dom_eq (f \+ f1') f2' ->
dom_eq (f1 \+ f1') (f2 \+ f2').
Lemma domeqK f1 f2 f1' f2' :
valid (f1 \+ f1') ->
dom_eq (f1 \+ f1') (f2 \+ f2') ->
dom_eq f1 f2 -> dom_eq f1' f2'.