În general, atunci când modelăm atacul, trebuie să luăm în considerare mai multe faze.
Problemă: În informatică teoretică, folosim mașini Turing $\mathcal{A}$ (eventual cu oracole), care sunt „o-fazice” (iau un șir ca intrare și scot un alt șir).
Apoi, pentru a lua în considerare acest lucru, oamenii aleg să folosească mai mult de o mașină Turing, de exemplu $\mathcal{A}_1$, $\mathcal{A}_2$.
Prin urmare $\mathcal{A}_1$ va reprezenta adversarul în prima fază și $\mathcal{A}_2$ în timpul celei de-a doua faze.
Dar, s-ar putea întâmpla asta $\mathcal{A}_2$ trebuie să utilizeze informațiile calculate în prima fază.
De aceea folosim un șir (legat prin ponyomia, pentru că $\mathcal{A}_1$ este considerată ca o mașină de Turing polinomială în timp), care este produsă de $\mathcal{A}_1$, și ia ca intrare de $\mathcal{A}_2$. Acest șir se numește stare.
Despre monedele interne, este doar pentru că $\mathcal{A}$sunt probabilistică Mașinile Turing, deci folosesc monede aleatorii. (intern înseamnă: nu depinde de intrare).
ps: Uneori, oamenii vor să evite să folosească mai mult de o mașină Turing și iau în considerare cu stare Mașină Turing (opusă cu cea tradițională Fara stare mașini Turing).
pps : În acest context, apatrid nu înseamnă că există într-o singură stare în Mașina Turing, ci înseamnă că fiecare execuție este independentă de cele anterioare, și astfel depinde doar de intrări, și de monedele aleatorii.
https://www.thegeeksclan.com/stateful-and-stateless-programs/