Section X86WD.
Variable f: memren.
Definition regset_wd rs : Prop :=
forall r, valid_val f (Pregmap.get r rs).
Definition core_wd c : Prop :=
match c with State rs _ => regset_wd rs end.
Definition ge_wd (the_ge: genv) : Prop :=
(forall b, Maps.PTree.get b (genv_defs the_ge) ->
f b) /\
(forall id ofs v, Senv.symbol_address the_ge id ofs = v ->
valid_val f v).
End X86WD.
(* Lemma decode_longs_valid_val: forall f vals tys, valid_val_list f vals -> valid_val_list f (val_casted.decode_longs tys vals). *)
Hint Extern 1 (valid_val _ (@Pregmap.set _ _ _ _ _)) => eapply regset_wd_set : wd.
Hint Resolve regset_wd_set regset_wd_set_res : wd.
Proof with eauto with wd.
intros.
induction regs as [|r regs]; simpl; auto.
intros r'.
rewrite undef_regs_comm;
rewrite Pregmap.gsspec;
unfold Pregmap.get;
destruct (Pregmap.elt_eq r' r); simpl...
Qed.
Hint Extern 0 (valid_val _ (undef_regs _ _ # _ <- _ _)) => eapply regset_wd_set : wd.
Hint Resolve regset_wd_domain
valid_val_list_incr valid_val_domain
valid_val_list_domain regset_wd_undef : wd.

Lemma valid_symb:
forall f fg g id i
(Hge_wd: ge_wd fg g)
(Hincr: ren_domain_incr fg f),
valid_val f (symbol_address g id i).