End EXTEN.
Ltac splitall := repeat (match goal with |- _ /\ _ => split end).

(* Specifications: *)
Lemma valnum_reg_holds:
forall valu1 ge sp rs m n r n' v,
numbering_holds valu1 ge sp rs m n ->
valnum_reg n r = (n', v) ->
exists valu2,
numbering_holds valu2 ge sp rs m n'
/\ rs#r = valu2 v
/\ valu_agree valu1 valu2 n.(num_next)
/\ Plt v n'.(num_next)
/\ Ple n.(num_next) n'.(num_next).
Lemma valnum_regs_holds:
forall rl valu1 ge sp rs m n n' vl,
numbering_holds valu1 ge sp rs m n ->
valnum_regs n rl = (n', vl) ->
exists valu2,
numbering_holds valu2 ge sp rs m n'
/\ rs##rl = map valu2 vl
/\ valu_agree valu1 valu2 n.(num_next)
/\ (forall v, In v vl -> Plt v n'.(num_next))
/\ Ple n.(num_next) n'.(num_next).
Lemma find_valnum_rhs_charact:
forall rh v eqs,
find_valnum_rhs rh eqs = Some v -> In (Eq v true rh) eqs.
Lemma find_valnum_rhs'_charact:
forall rh v eqs,
find_valnum_rhs' rh eqs = Some v -> exists strict, In (Eq v strict rh) eqs.
Lemma find_valnum_num_charact:
forall v r eqs, find_valnum_num v eqs = Some r -> In (Eq v true r) eqs.
Lemma reg_valnum_sound:
forall n v r valu ge sp rs m,
reg_valnum n v = Some r ->
numbering_holds valu ge sp rs m n ->
rs#r = valu v.
Lemma regs_valnums_sound:
forall n valu ge sp rs m,
numbering_holds valu ge sp rs m n ->
forall vl rl,
regs_valnums n vl = Some rl ->
rs##rl = map valu vl.
Lemma find_rhs_sound:
forall n rh r valu ge sp rs m,
find_rhs n rh = Some r ->
numbering_holds valu ge sp rs m n ->
exists v, rhs_eval_to valu ge sp m rh v /\ Val.lessdef v rs#r.