Scheme context_ind2 := Minimality for context Sort Prop
  with contextlist_ind2 := Minimality for contextlist Sort Prop.Combined Scheme context_contextlist_ind from context_ind2, contextlist_ind2.

(* Specifications: *)
Lemma invert_expr_context: (forall from to C, context from to C -> forall a m, invert_expr_prop a m -> invert_expr_prop (C a) m) /\(forall from C, contextlist from C -> forall a m, invert_expr_prop a m -> ~exprlist_all_values (C a)).
Lemma imm_safe_t_inv: forall k a m, imm_safe_t k a m -> match a with | Eloc _ _ _ => True | Eval _ _ => True | _ => invert_expr_prop a m end.
Lemma context_compose: forall k2 k3 C2, context k2 k3 C2 -> forall k1 C1, context k1 k2 C1 -> context k1 k3 (fun x => C2(C1 x)) with contextlist_compose: forall k2 C2, contextlist k2 C2 -> forall k1 C1, context k1 k2 C1 -> contextlist k1 (fun x => C2(C1 x)).
Lemma invert_expr_context: (forall from to C, context from to C -> forall a m, invert_expr_prop a m -> invert_expr_prop (C a) m) /\(forall from C, contextlist from C -> forall a m, invert_expr_prop a m -> ~exprlist_all_values (C a)).
Lemma imm_safe_inv: forall k a m, imm_safe ge e k a m -> match a with | Eloc _ _ _ => True | Eval _ _ => True | _ => invert_expr_prop a m end.
Lemma safe_inv: forall k C f a K m, safe (ExprState f (C a) K e m) -> context k RV C -> match a with | Eloc _ _ _ => True | Eval _ _ => True | _ => invert_expr_prop a m end.
Lemma eval_simple_steps: (forall a v, eval_simple_rvalue e m a v -> forall C, context RV RV C -> star Csem.step ge (ExprState f (C a) k e m) E0 (ExprState f (C (Eval v (typeof a))) k e m)) /\ (forall a b ofs, eval_simple_lvalue e m a b ofs -> forall C, context LV RV C -> star Csem.step ge (ExprState f (C a) k e m) E0 (ExprState f (C (Eloc b ofs (typeof a))) k e m)).