Definition reducts_incl {A B: Type} (C: A -> B) (res1: reducts A) (res2: reducts B) : Prop :=
  forall C1 rd, In (C1, rd) res1 -> In ((fun x => C(C1 x)), rd) res2.

(* Specifications: *)
Lemma reducts_incl_trans: forall (A1 A2: Type) (C: A1 -> A2) res1 res2, reducts_incl C res1 res2 -> forall (A3: Type) (C': A2 -> A3) res3, reducts_incl C' res2 res3 -> reducts_incl (fun x => C'(C x)) res1 res3.
Lemma reducts_incl_nil: forall (A B: Type) (C: A -> B) res, reducts_incl C nil res.
Lemma reducts_incl_val: forall (A: Type) a m v ty (C: expr -> A) res, is_val a = Some(v, ty) -> reducts_incl C (step_expr RV a m) res.
Lemma reducts_incl_loc: forall (A: Type) a m b ofs ty (C: expr -> A) res, is_loc a = Some(b, ofs, ty) -> reducts_incl C (step_expr LV a m) res.
Lemma reducts_incl_listval: forall (A: Type) a m vtl (C: exprlist -> A) res, is_val_list a = Some vtl -> reducts_incl C (step_exprlist a m) res.
Lemma reducts_incl_incontext: forall (A B: Type) (C: A -> B) res, reducts_incl C res (incontext C res).
Lemma reducts_incl_incontext2_left: forall (A1 A2 B: Type) (C1: A1 -> B) res1 (C2: A2 -> B) res2, reducts_incl C1 res1 (incontext2 C1 res1 C2 res2).
Lemma reducts_incl_incontext2_right: forall (A1 A2 B: Type) (C1: A1 -> B) res1 (C2: A2 -> B) res2, reducts_incl C2 res2 (incontext2 C1 res1 C2 res2).
Lemma step_expr_context: forall from to C, context from to C -> forall a m, reducts_incl C (step_expr from a m) (step_expr to (C a) m) with step_exprlist_context: forall from C, contextlist from C -> forall a m, reducts_incl C (step_expr from a m) (step_exprlist (C a) m).
Lemma not_stuckred_imm_safe: forall m a k, (forall C, ~In (C, Stuckred) (step_expr k a m)) -> imm_safe_t k a m.
Lemma not_imm_safe_stuck_red: forall m a k C, context k RV C -> ~imm_safe_t k a m -> exists C', In (C', Stuckred) (step_expr RV (C a) m).
Lemma imm_safe_imm_safe_t: forall k a m, imm_safe ge e k a m -> imm_safe_t k a m \/ exists C, exists a1, exists t, exists a1', exists m', context RV k C /\ a = C a1 /\ rred ge a1 m t a1' m' /\ forall w', ~possible_trace w t w'.