(*  Lemma threadStep_not_unhalts: forall g i tp m cnt cmpt tp' m' tr, @threadStep g i tp m cnt cmpt tp' m' tr -> forall j cnt cnt', (@threadHalted j tp cnt) -> (@threadHalted j tp' cnt') .  (* The initial machine has to be redefined. Right now its build by default with empty maps, but it should be built with the correct juice, corresponding to global variables, arguments and function specs. *)
(*Lemma onePos: (0<1)%coq_nat. auto. Qed.*)
Definition initial_machine rmap c:=
mk
(mkPos (le_n 1))
(fun _ => (Krun c))
(fun _ => rmap)
(AMap.empty _).
Definition init_mach rmap (m: mem) (tp:thread_pool) (v:val) (args:list val) : Prop :=
exists c, initial_core the_sem 0 m c v args /\
match rmap with Some rmap => tp = initial_machine rmap c | None => False end.
Section InvMachineLemmas.

Lemma getThreadR_age: forall js i age,
forall (cnt: containsThread js i)
(cnt': containsThread (age_tp_to age js) i),
age_to age (getThreadR cnt) = getThreadR cnt'.