(* 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.