Section Minsky_Machine.
Variable (n : nat).
Notation "i // s -1> t" := (@mm_sss n i s t).
Notation "P // s -[ k ]-> t" := (sss_steps (@mm_sss n) P k s t).
Notation "P // s -+> t" := (sss_progress (@mm_sss n) P s t).
Notation "P // s ->> t" := (sss_compute (@mm_sss n) P s t).
Fact mm_sss_fun i s t1 t2 : i // s -1> t1 -> i // s -1> t2 -> t1 = t2.
Fact mm_sss_total ii s : { t | ii // s -1> t }.
Fact mm_sss_INC_inv x i v j w : INC x // (i,v) -1> (j,w) -> j=1+i /\ w = v[(S (v#>x))/x].
Fact mm_sss_DEC1_inv x k u i v j w : v#>x = S u -> DEC x k // (i,v) -1> (j,w) -> j=1+i /\ w = v[u/x].
Fact mm_progress_INC P i x v st :
(i,INC x::nil) <sc P
-> P // (1+i,v[(S (v#>x))/x]) ->> st
-> P // (i,v) -+> st.

Corollary mm_compute_DEC_S P i x k v u st : (i,DEC x k::nil) <sc P -> v#>x = S u -> P // (1+i,v[u/x]) ->> st -> P // (i,v) ->> st.