(* A element of type redexes is said to be regular if its true marks label redexes *)
Fixpoint regular (U : redexes) : Prop :=
match U with
| Var n => True
| Fun V => regular V
| Ap true (Fun _ as V) W => regular V /\ regular W
| Ap true _ W => False
| Ap false V W => regular V /\ regular W
end.

(* Specifications: *)
Lemma union_preserve_regular :
forall U V W : redexes, union U V W -> regular U -> regular V -> regular W.