Section Minsky_Machine_alternate.
Variable (n : nat).
Notation "i // s -1> t" := (@mma_sss n i s t).
Notation "P // s -[ k ]-> t" := (sss_steps (@mma_sss n) P k s t).
Notation "P // s -+> t" := (sss_progress (@mma_sss n) P s t).
Notation "P // s ->> t" := (sss_compute (@mma_sss n) P s t).
Fact mma_sss_fun i s t1 t2 : i // s -1> t1 -> i // s -1> t2 -> t1 = t2.
Fact mma_sss_total ii s : { t | ii // s -1> t }.
Fact mma_sss_total_ni ii s : exists t, ii // s -1> t.
Fact mma_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 mma_sss_DEC1_inv x k u i v j w : v#>x = S u -> DEC x k // (i,v) -1> (j,w) -> j=k /\ w = v[u/x].
Fact mma_sss_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 mma_sss_compute_DEC_0 P i x k v st : (i,DEC x k::nil) <sc P -> v#>x = O -> P // (1+i,v) ->> st -> P // (i,v) ->> st.