(* Extending two environments with a new variable preserves subsumption. *)

(* Specifications: *)
Lemma subsume_insert:
forall e1 e2,
subsume e1 e2 ->
forall x o1 o2,
osub o1 o2 ->
subsume (raw_insert x o1 e1) (raw_insert x o2 e2).
Lemma subsume_cons:
forall o e1 e2,
osub o (lookup 0 e2) ->
subsume e1 (tl e2) ->
subsume (o :: e1) e2.
Lemma subsume_cons_cons_inversion:
forall o1 o2 e1 e2,
subsume (o1 :: e1) (o2 :: e2) ->
osub o1 o2 /\
subsume e1 e2.
Lemma subsume_insert_inversion:
forall e1 x a2 e2,
subsume e1 (insert x a2 e2) ->
exists f1 a1,
e1 = insert x a1 f1 /\
subsume f1 e2 /\
sub a1 a2.