ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»Π½ΠΎΠ³ систСма Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΎΠ΄ Π½ΡƒΠ»Π΅. Π”Π΅ΠΎ 1: Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Ρƒ ПΠ₯П-Ρƒ ΠΈ ΠŸΠΈΡ‚Ρ…ΠΎΠ½-Ρƒ

Π€ΠΎΡ€ΠΌΠ°Π»Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° јС Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° јСдног ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠ³.

Ово јС јСдна ΠΎΠ΄ Π½Π°Ρ˜ΠΌΠΎΡ›Π½ΠΈΡ˜ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° која Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° ΠΏΡ€ΠΎΠ½Π°Ρ’Π΅Ρ‚Π΅ свС Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΡƒ ΠΈΠ»ΠΈ Π΄ΠΎΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ½Π΅ Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅.

Π”Π΅Ρ‚Π°Ρ™Π½ΠΈΡ˜ΠΈ опис Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΌΠΎΠΆΠ΅ сС Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ° Π·Π°Π΄Π°Ρ‚ΠΊΠ° Π’ΡƒΠΊ, ΠΊΠΎΠ·Π° ΠΈ купус Ρƒ ΠΌΠΎΠΌ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ.

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ ΠΏΡ€Π΅Π»Π°Π·ΠΈΠΌ са Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅ ΠΈ ΠΎΠΏΠΈΡΡƒΡ˜Π΅ΠΌ ΠΊΠ°ΠΊΠΎ
ΠΊΠ°ΠΊΠΎ сС ΠΌΠΎΠ³Ρƒ аутоматски ΠΏΡ€Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π΅ систСмС ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Π”Π° Π±ΠΈΡ… Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΠΎ, написао сам сопствСни Π°Π½Π°Π»ΠΎΠ³ Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС, користСћи симболичкС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅.

Он Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° програмски ΠΊΠΎΠ΄ ΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄ΠΈ Π³Π° Ρƒ систСм Ρ˜Π΅Π΄Π½Π°Ρ‡ΠΈΠ½Π° (БМВ), који сС Π²Π΅Ρ› ΠΌΠΎΠΆΠ΅ програмски Ρ€Π΅ΡˆΠΈΡ‚ΠΈ.

ΠŸΠΎΡˆΡ‚ΠΎ су ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΎ симболичким ΠΏΡ€ΠΎΡ€Π°Ρ‡ΡƒΠ½ΠΈΠΌΠ° прСдстављСнС Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½ΠΎ,
Π£ΠΊΡ€Π°Ρ‚ΠΊΠΎ Ρ›Ρƒ описати ΡˆΡ‚Π° јС Ρ‚ΠΎ.

Π‘ΠΈΠΌΠ±ΠΎΠ»ΠΈΡ‡ΠΊΠΎ Ρ€Π°Ρ‡ΡƒΠ½Π°ΡšΠ΅ јС Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС истоврСмСно ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Π½Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ спСктру ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΈ Π³Π»Π°Π²Π½ΠΈ јС Π°Π»Π°Ρ‚ Π·Π° Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Ρƒ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° поставимо ΡƒΠ»Π°Π·Π½Π΅ условС Π³Π΄Π΅ ΠΏΡ€Π²ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡƒΠ·ΠΌΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡ˜Ρƒ ΠΏΠΎΠ·ΠΈΡ‚ΠΈΠ²Π½Ρƒ врСдност, Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π°Π½, Ρ‚Ρ€Π΅Ρ›ΠΈ Π½ΡƒΠ»Ρƒ, Π° ΠΈΠ·Π»Π°Π·Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 42.

Π‘ΠΈΠΌΠ±ΠΎΠ»ΠΈΡ‡ΠΊΠ° ΠΈΠ·Ρ€Π°Ρ‡ΡƒΠ½Π°Π²Π°ΡšΠ° Ρƒ јСдној воТњи Ρ›Π΅ Π½Π°ΠΌ Π΄Π°Ρ‚ΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π΄Π° Π»ΠΈ јС ΠΌΠΎΠ³ΡƒΡ›Π΅ Π΄Π° добијСмо ΠΆΠ΅Ρ™Π΅Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ скупа Ρ‚Π°ΠΊΠ²ΠΈΡ… ΡƒΠ»Π°Π·Π½ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π°. Или Π΄ΠΎΠΊΠ°Π· Π΄Π° Ρ‚Π°ΠΊΠ²ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° Π½Π΅ΠΌΠ°.

Π¨Ρ‚Π°Π²ΠΈΡˆΠ΅, ΠΌΠΎΠΆΠ΅ΠΌΠΎ подСсити ΡƒΠ»Π°Π·Π½Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ Π½Π° свС ΠΌΠΎΠ³ΡƒΡ›Π΅, Π° ΠΈΠ·Π°Π±Ρ€Π°Ρ‚ΠΈ само ΠΎΠ½Π΅ ΠΈΠ·Π»Π°Π·Π½Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, администраторску Π»ΠΎΠ·ΠΈΠ½ΠΊΡƒ.

Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Ρ›Π΅ΠΌΠΎ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ свС Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈΠ»ΠΈ Ρ›Π΅ΠΌΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΠΈ Π΄ΠΎΠΊΠ°Π· Π΄Π° јС администраторска Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° сигурна.

МоТС сС ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ΠΈΡ‚ΠΈ Π΄Π° јС класично ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° са спСцифичним ΡƒΠ»Π°Π·Π½ΠΈΠΌ ΠΏΠΎΠ΄Π°Ρ†ΠΈΠΌΠ° посСбан ΡΠ»ΡƒΡ‡Π°Ρ˜ симболичког ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ°.

Π”Π°ΠΊΠ»Π΅, Π’Πœ ΠΌΠΎΠ³ ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π΄ΠΈ Ρƒ Ρ€Π΅ΠΆΠΈΠΌΡƒ Π΅ΠΌΡƒΠ»Π°Ρ†ΠΈΡ˜Π΅ стандарднС Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС.

Π£ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΌΠ° Π½Π° ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈ Ρ‡Π»Π°Π½Π°ΠΊ ΠΌΠΎΠΆΠ΅ сС Π½Π°Ρ›ΠΈ ΠΏΡ€Π°Π²Π΅Π΄Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ са расправом ΠΎ њСним слабостима.

Π“Π»Π°Π²Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ су:

  1. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½Π° Сксплозија, ΠΏΠΎΡˆΡ‚ΠΎ сС Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΡ€Π°Ρ˜Ρƒ своди Π½Π° П=НП
  2. ΠžΠ±Ρ€Π°Π΄Ρƒ ΠΏΠΎΠ·ΠΈΠ²Π° Ρƒ систСм Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, ΠΌΡ€Π΅ΠΆΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³Ρƒ спољну ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Ρƒ јС Ρ‚Π΅ΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΠΈ
  3. Π“Ρ€Π΅ΡˆΠΊΠ΅ Ρƒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ, ΠΊΠ°Π΄Π° јС ΠΊΡƒΠΏΠ°Ρ† ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ Π½Π°ΠΌΠ΅Ρ€Π°Π²Π°ΠΎ Ρ˜Π΅Π΄Π½Ρƒ ствар, Π°Π»ΠΈ Ρ‚ΠΎ нијС Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΎ описао Ρƒ Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΎΡ˜ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΈ.

Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ³Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Π½ ΠΈ усклађСн са ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜ΠΎΠΌ, Π°Π»ΠΈ Ρ›Π΅ Ρ€Π°Π΄ΠΈΡ‚ΠΈ Π½Π΅ΡˆΡ‚ΠΎ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ Π΄Ρ€ΡƒΠ³Π°Ρ‡ΠΈΡ˜Π΅ ΠΎΠ΄ ΠΎΠ½ΠΎΠ³Π° ΡˆΡ‚ΠΎ су ΠΊΡ€Π΅Π°Ρ‚ΠΎΡ€ΠΈ ΠΎΡ‡Π΅ΠΊΠΈΠ²Π°Π»ΠΈ ΠΎΠ΄ њСга.

ΠŸΠΎΡˆΡ‚ΠΎ Ρƒ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ ΡƒΠ³Π»Π°Π²Π½ΠΎΠΌ Ρ€Π°Π·ΠΌΠ°Ρ‚Ρ€Π°ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π΅ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ Ρƒ пракси, Π·Π° сада Π½Π΅Ρ›Ρƒ Π΄Π° Π»ΡƒΠΏΠ°ΠΌ Π³Π»Π°Π²ΠΎΠΌ ΠΎ Π·ΠΈΠ΄, Π²Π΅Ρ› Ρ›Ρƒ ΠΈΠ·Π°Π±Ρ€Π°Ρ‚ΠΈ систСм Π³Π΄Π΅ су алгоритамска слоТСност ΠΈ Π±Ρ€ΠΎΡ˜ СкстСрних ΠΏΠΎΠ·ΠΈΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ.

ΠŸΠΎΡˆΡ‚ΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈ ΡƒΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π½Π°Ρ˜Π±ΠΎΡ™Π΅ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜Ρƒ ΠΎΠ²ΠΈΠΌ Π·Π°Ρ…Ρ‚Π΅Π²ΠΈΠΌΠ°, ΠΈΠ·Π±ΠΎΡ€ јС ΠΏΠ°ΠΎ Π½Π° Π Π˜Π”Π• ΡƒΠ³ΠΎΠ²ΠΎΡ€Π΅ са ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ВавСс: ΠΎΠ½ΠΈ нису ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΈ ΠΏΠΎ Π’Ρ˜ΡƒΡ€ΠΈΠ½Π³Ρƒ, Π° ΡšΠΈΡ…ΠΎΠ²Π° максимална слоТСност јС Π²Π΅ΡˆΡ‚Π°Ρ‡ΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π°.

Али ΠΌΠΈ Ρ›Π΅ΠΌΠΎ ΠΈΡ… Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ‚ΠΈ искључиво са Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠ΅ странС.

ΠŸΠΎΡ€Π΅Π΄ свСга, Ρ„ΠΎΡ€ΠΌΠ°Π»Π½Π° Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ посСбно Ρ‚Ρ€Π°ΠΆΠ΅Π½Π° Π·Π° свС ΡƒΠ³ΠΎΠ²ΠΎΡ€Π΅: ΠΎΠ±ΠΈΡ‡Π½ΠΎ јС Π½Π΅ΠΌΠΎΠ³ΡƒΡ›Π΅ исправити Π³Ρ€Π΅ΡˆΠΊΡƒ Ρƒ ΡƒΠ³ΠΎΠ²ΠΎΡ€Ρƒ Π½Π°ΠΊΠΎΠ½ ΡˆΡ‚ΠΎ јС ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚Π°.
А Ρ†Π΅Π½Π° Ρ‚Π°ΠΊΠ²ΠΈΡ… Π³Ρ€Π΅ΡˆΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π±ΠΈΡ‚ΠΈ Π²Π΅ΠΎΠΌΠ° висока, Ρ˜Π΅Ρ€ сС ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ Π²Π΅Π»ΠΈΠΊΠ΅ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π΅ срСдстава чСсто Ρ‡ΡƒΠ²Π°Ρ˜Ρƒ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈΠΌ ΡƒΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠ°.

Моја симболичка Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина јС написана Ρƒ ПΠ₯П-Ρƒ ΠΈ ΠŸΠΈΡ‚Ρ…ΠΎΠ½-Ρƒ ΠΈ користи Π—3ΠŸΡ€ΠΎΠ²Π΅Ρ€ ΠΈΠ· ΠœΠΈΡ†Ρ€ΠΎΡΠΎΡ„Ρ‚ РСсСарцх-Π° Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚ΠΈΡ€Π°Ρ˜ΡƒΡ›ΠΈΡ… БМВ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°.

Π£ основи јС ΠΌΠΎΡ›Π½Π° мултитрансакциона ΠΏΡ€Π΅Ρ‚Ρ€Π°Π³Π°, која
ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ½Π°Ρ’Π΅Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅ΡšΠ° ΠΈΠ»ΠΈ Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ, Ρ‡Π°ΠΊ ΠΈ Π°ΠΊΠΎ Π·Π°Ρ…Ρ‚Π΅Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°.
Π§Π°ΠΊ ΠœΠΈΡ‚Ρ…Ρ€ΠΈΠ», јСдан ΠΎΠ΄ Π½Π°Ρ˜ΠΌΠΎΡ›Π½ΠΈΡ˜ΠΈΡ… симболичких ΠΎΠΊΠ²ΠΈΡ€Π° Π·Π° ΠΏΡ€ΠΎΠ½Π°Π»Π°ΠΆΠ΅ΡšΠ΅ Π•Ρ‚Ρ…Π΅Ρ€Π΅ΡƒΠΌ Ρ€Π°ΡšΠΈΠ²ΠΎΡΡ‚ΠΈ, Π΄ΠΎΠ΄Π°ΠΎ јС ΠΎΠ²Ρƒ могућност Ρ‚Π΅ΠΊ ΠΏΡ€Π΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ мСсСци.

Али Π²Ρ€Π΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡƒΡ‚ΠΈ Π΄Π° су Старски ΡƒΠ³ΠΎΠ²ΠΎΡ€ΠΈ слоТСнији ΠΈ Π΄Π° су Π’Ρ˜ΡƒΡ€ΠΈΠ½Π³ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΈ.

ПΠ₯П ΠΏΡ€Π΅Π²ΠΎΠ΄ΠΈ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ ΠΊΠΎΠ΄ Π Π˜Π”Π• ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ ΡƒΠ³ΠΎΠ²ΠΎΡ€Π° Ρƒ ΠΏΠΈΡ‚Ρ…ΠΎΠ½ скрипту, Ρƒ којој јС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌ прСдстављСн ΠΊΠ°ΠΎ Π—3 БМВ-ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π°Π½ систСм ΡΡ‚Π°ΡšΠ° ΡƒΠ³ΠΎΠ²ΠΎΡ€Π° ΠΈ услова Π·Π° ΡšΠΈΡ…ΠΎΠ²Π΅ Ρ‚Ρ€Π°Π½Π·ΠΈΡ†ΠΈΡ˜Π΅:

ΠšΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»Π½ΠΎΠ³ систСма Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ ΠΎΠ΄ Π½ΡƒΠ»Π΅. Π”Π΅ΠΎ 1: Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Ρƒ ПΠ₯П-Ρƒ ΠΈ ΠŸΠΈΡ‚Ρ…ΠΎΠ½-Ρƒ

Π‘Π°Π΄Π° Ρ›Ρƒ Π΄Π΅Ρ‚Π°Ρ™Π½ΠΈΡ˜Π΅ описати ΡˆΡ‚Π° сС дСшава ΡƒΠ½ΡƒΡ‚Ρ€Π°.

Али ΠΏΡ€Π²ΠΎ, Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Ρ€Π΅Ρ‡ΠΈ ΠΎ Ρ˜Π΅Π·ΠΈΠΊΡƒ ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ ΡƒΠ³ΠΎΠ²ΠΎΡ€Π° Π Π˜Π”Π•.

Π’ΠΎ јС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°Π½ програмски јСзик заснован Π½Π° ΠΈΠ·Ρ€Π°Π·Ρƒ који јС ΠΏΠΎ Π΄ΠΈΠ·Π°Ρ˜Π½Ρƒ лСњ.
Π Π˜Π”Π• Ρ€Π°Π΄ΠΈ ΠΈΠ·ΠΎΠ»ΠΎΠ²Π°Π½ΠΎ ΡƒΠ½ΡƒΡ‚Π°Ρ€ Π±Π»ΠΎΠΊ Π»Π°Π½Ρ†Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΡƒΠ·ΠΈΠΌΠ° ΠΈ ΡƒΠΏΠΈΡΡƒΡ˜Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΈΠ· ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΎΠ³ са Π½ΠΎΠ²Ρ‡Π°Π½ΠΈΠΊΠΎΠΌ корисника.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΠΈ Π Π˜Π”Π• ΡƒΠ³ΠΎΠ²ΠΎΡ€ Π·Π° сваки Π½ΠΎΠ²Ρ‡Π°Π½ΠΈΠΊ, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΈΠ·Π²Ρ€ΡˆΠ΅ΡšΠ° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ само ВАЧНО ΠΈΠ»ΠΈ Π›ΠΠ–ΠΠž.

Π’Π Π£Π• Π·Π½Π°Ρ‡ΠΈ Π΄Π° ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈ ΡƒΠ³ΠΎΠ²ΠΎΡ€ Π΄ΠΎΠ·Π²ΠΎΡ™Π°Π²Π° Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Ρƒ, Π° ЀАЛБЕ Π·Π½Π°Ρ‡ΠΈ Π΄Π° јС Π·Π°Π±Ρ€Π°ΡšΡƒΡ˜Π΅.
ΠˆΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: скрипта ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π±Ρ€Π°Π½ΠΈ трансфСр Π°ΠΊΠΎ јС ΡΡ‚Π°ΡšΠ΅ Ρƒ Π½ΠΎΠ²Ρ‡Π°Π½ΠΈΠΊΡƒ мањС ΠΎΠ΄ 100.

Као ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ·Π΅Ρ›Ρƒ исти Π’ΡƒΠΊ, Коза ΠΈ ΠšΡƒΠΏΡƒΡ, Π°Π»ΠΈ Π²Π΅Ρ› прСдстављСни Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ ΡƒΠ³ΠΎΠ²ΠΎΡ€Π°.

ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊ Π½Π΅Ρ›Π΅ ΠΌΠΎΡ›ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΈΠΆΠ΅ Π½ΠΎΠ²Π°Ρ† ΠΈΠ· Π½ΠΎΠ²Ρ‡Π°Π½ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠΌΠ΅ јС ΡƒΠ³ΠΎΠ²ΠΎΡ€ распорСђСн Π΄ΠΎΠΊ свС Π½Π΅ ΠΏΠΎΡˆΠ°Ρ™Π΅ Π½Π° Π΄Ρ€ΡƒΠ³Ρƒ страну.

#ИзвлСкаСм ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°
let contract = tx.sender
let human= extract(getInteger(contract,"human"))
let wolf= extract(getInteger(contract,"wolf"))
let goat= extract(getInteger(contract,"goat"))
let cabbage= extract(getInteger(contract,"cabbage"))

#Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ называСмая Π΄Π°Ρ‚Π°-транзакция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ присылаСт Π½ΠΎΠ²Ρ‹Π΅ 4 ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
#ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ Π΅Ρ‘ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС Ссли всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ останутся Π² сохранности.
match tx {
case t:DataTransaction =>
   #ИзвлСкаСм Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
   let newHuman= extract(getInteger(t.data,"human")) 
   let newWolf= extract(getInteger(t.data,"wolf"))
   let newGoat= extract(getInteger(t.data,"goat"))
   let newCabbage= extract(getInteger(t.data,"cabbage"))
   
   #0 ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Π»Π΅Π²ΠΎΠΌ Π±Π΅Ρ€Π΅Π³Ρƒ, Π° 1 Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΎΠΌ
   let humanSide= human == 0 || human == 1
   let wolfSide= wolf == 0 || wolf == 1
   let goatSide= goat == 0 || goat == 1
   let cabbageSide= cabbage == 0 || cabbage == 1
   let side= humanSide && wolfSide && goatSide && cabbageSide

   #Π‘ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π³Π΄Π΅ с ΠΊΠΎΠ·ΠΎΠΉ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² отсутствии Ρ„Π΅Ρ€ΠΌΠ΅Ρ€Π°.
   let safeAlone= newGoat != newWolf && newGoat != newCabbage
   let safe= safeAlone || newGoat == newHuman
   let humanTravel= human != newHuman 

   #Бпособы ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΡ Ρ„Π΅Ρ€ΠΌΠ΅Ρ€Π° Ρ‚ΡƒΠ΄Π° ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, с ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π»ΠΈΠ±ΠΎ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ.
   let t1= humanTravel && newWolf == wolf + 1 && newGoat == goat && newCabbage == cabbage 
   let t2= humanTravel && newWolf == wolf && newGoat == goat + 1 && newCabbage == cabbage
   let t3= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage + 1
   let t4= humanTravel && newWolf == wolf - 1 && newGoat == goat && newCabbage == cabbage
   let t5= humanTravel && newWolf == wolf && newGoat == goat - 1 && newCabbage == cabbage
   let t6= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage - 1
   let t7= humanTravel && newWolf == wolf && newGoat == goat && newCabbage == cabbage
   let objectTravel = t1 || t2 || t3 || t4 || t5 || t6 || t7
   
   #ПослСдняя строка Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ описываСт Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ условиС.
   #ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ значСния 1 ΠΈΠ»ΠΈ 0, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹
   #Π±Ρ‹Ρ‚ΡŒ Π² бСзопасности, Π° Ρ„Π΅Ρ€ΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΏΠ»Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ 
   #ΠΈΠ»ΠΈ с ΠΊΠ΅ΠΌ-Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡˆΠ°Π³Ρƒ
   side && safe && humanTravel && objectTravel
case s:TransferTransaction =>
   #Вранзакция Π²Ρ‹Π²ΠΎΠ΄Π° срСдств Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС Ссли всС ΠΏΠ΅Ρ€Π΅ΠΏΠ»Ρ‹Π»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π΅Ρ€Π΅Π³
   human == 1 && wolf == 1 && goat == 1 && cabbage == 1

#ВсС ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹
case _ => false

}

ПΠ₯П ΠΏΡ€Π²ΠΎ издваја свС Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅ ΠΈΠ· ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ ΡƒΠ³ΠΎΠ²ΠΎΡ€Π° Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ ΡšΠΈΡ…ΠΎΠ²ΠΈΡ… ΠΊΡ™ΡƒΡ‡Π΅Π²Π° ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ Π‘ΡƒΠ»ΠΎΠ²ΠΎΠ³ ΠΈΠ·Ρ€Π°Π·Π°.

cabbage: extract ( getInteger ( contract , "cabbage" ) )
goat: extract ( getInteger ( contract , "goat" ) )
human: extract ( getInteger ( contract , "human" ) )
wolf: extract ( getInteger ( contract , "wolf" ) )
fState: human== 1 && wolf== 1 && goat== 1 && cabbage== 1
fState: 
wolf: 
goat: 
cabbage: 
cabbageSide: cabbage== 0 || cabbage== 1
human: extract ( getInteger ( contract , "human" ) )
newGoat: extract ( getInteger ( t.data , "goat" ) )
newHuman: extract ( getInteger ( t.data , "human" ) )
goatSide: goat== 0 || goat== 1
humanSide: human== 0 || human== 1
t7: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage
t3: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage + 1
t6: humanTravel && newWolf== wolf && newGoat== goat && newCabbage== cabbage - 1
t2: humanTravel && newWolf== wolf && newGoat== goat + 1 && newCabbage== cabbage
t5: humanTravel && newWolf== wolf && newGoat== goat - 1 && newCabbage== cabbage
t1: humanTravel && newWolf== wolf + 1 && newGoat== goat && newCabbage== cabbage
t4: humanTravel && newWolf== wolf - 1 && newGoat== goat && newCabbage== cabbage
safeAlone: newGoat != newWolf && newGoat != newCabbage
wolfSide: wolf== 0 || wolf== 1
humanTravel: human != newHuman
side: humanSide && wolfSide && goatSide && cabbageSide
safe: safeAlone || newGoat== newHuman
objectTravel: t1 || t2 || t3 || t4 || t5 || t6 || t7

ПΠ₯П ΠΈΡ… Π·Π°Ρ‚ΠΈΠΌ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΡƒΡ˜Π΅ Ρƒ опис систСма ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½ΠΎΠ³ са Π—3ΠŸΡ€ΠΎΠ²Π΅Ρ€ БМВ Ρƒ ΠŸΠΈΡ‚Ρ…ΠΎΠ½-Ρƒ.
ΠŸΠΎΠ΄Π°Ρ†ΠΈ су ΡƒΠΌΠΎΡ‚Π°Π½ΠΈ Ρƒ ΠΏΠ΅Ρ‚Ρ™Ρƒ, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ΡšΠ΅ Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ˜Ρƒ индСкс ΠΈ, Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π΅ индСкс ΠΈ + 1, Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ са ΠΈΠ·Ρ€Π°Π·ΠΈΠΌΠ° ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°Ρ˜Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΠΏΡ€Π΅Π»Π°Π·Π°ΠΊ ΠΈΠ· ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠ³ ΡΡ‚Π°ΡšΠ° Ρƒ слСдСћС.

Ово јС само срцС нашС Π²ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π΅ машинС, која ΠΏΡ€ΡƒΠΆΠ° Π²ΠΈΡˆΠ΅Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΠΎΠ½ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ ΠΏΡ€Π΅Ρ‚Ρ€Π°ΠΆΠΈΠ²Π°ΡšΠ°.

fState:  And( And( And( human[Steps]  ==  1 , wolf[Steps]  ==  1 )  , goat[Steps]  ==  1 )  , cabbage[Steps]  ==  1 )  
final:  fState[Steps] 
fState:   
wolf:   
goat:   
cabbage:   
cabbageSide:  Or( cabbage[i]  ==  0 , cabbage[i]  ==  1 )  
goatSide:  Or( goat[i]  ==  0 , goat[i]  ==  1 )  
humanSide:  Or( human[i]  ==  0 , human[i]  ==  1 )  
t7:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] )  , goat[i+1]  ==  goat[i] )  , cabbage  ==  cabbage[i] )  
t3:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] )  , goat[i+1]  ==  goat[i] )  , cabbage  ==  cabbage[i] + 1 )  
t6:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] )  , goat[i+1]  ==  goat[i] )  , cabbage  ==  cabbage[i] - 1 )  
t2:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] )  , goat[i+1]  ==  goat[i] + 1 )  , cabbage  ==  cabbage[i] )  
t5:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] )  , goat[i+1]  ==  goat[i] - 1 )  , cabbage  ==  cabbage[i] )  
t1:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] + 1 )  , goat[i+1]  ==  goat[i] )  , cabbage  ==  cabbage[i] )  
t4:  And( And( And( humanTravel[i] , wolf  ==  wolf[i] - 1 )  , goat[i+1]  ==  goat[i] )  , cabbage  ==  cabbage[i] )  
safeAlone:  And( goat[i+1] != wolf , goat[i+1] != cabbage )  
wolfSide:  Or( wolf[i]  ==  0 , wolf[i]  ==  1 )  
humanTravel:  human[i] != human[i+1] 
side:  And( And( And( humanSide[i] , wolfSide[i] )  , goatSide[i] )  , cabbageSide[i] )  
safe:  Or( safeAlone[i] , goat[i+1]  ==  human[i+1] )  
objectTravel:  Or( Or( Or( Or( Or( Or( t1[i] , t2[i] )  , t3[i] )  , t4[i] )  , t5[i] )  , t6[i] )  , t7[i] )  
data:  And( And( And( side[i] , safe[i] )  , humanTravel[i] )  , objectTravel[i] )  

Услови сС ΡΠΎΡ€Ρ‚ΠΈΡ€Π°Ρ˜Ρƒ ΠΈ ΡƒΠ±Π°Ρ†ΡƒΡ˜Ρƒ Ρƒ шаблон скриптС Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ Π΄Π° опишС БМВ систСм Ρƒ ΠŸΠΈΡ‚Ρ…ΠΎΠ½-Ρƒ.

ΠŸΡ€Π°Π·Π°Π½ шаблон


import json

from z3 import *

s = Solver()

  
  
    
Steps=7
Num= Steps+1

$code$



#template, only start rest
s.add(data + start)

#template
s.add(final)




ind = 0

f = open("/var/www/html/all/bin/python/log.txt", "a")



while s.check() == sat:
  ind = ind +1
  

  print ind
  m = s.model()
  print m

  print "traversing model..." 
  #for d in m.decls():
	#print "%s = %s" % (d.name(), m[d])

  
 
  f.write(str(m))
  f.write("nn")
  exit()
  #s.add(Or(goat[0] != s.model()[data[0]] )) # prevent next model from using the same assignment as a previous model



print "Total solution number: "
print ind  

f.close()
 


Π—Π° послСдњС ΡΡ‚Π°ΡšΠ΅ Ρƒ Ρ†Π΅Π»ΠΎΠΌ Π»Π°Π½Ρ†Ρƒ ΠΏΡ€ΠΈΠΌΠ΅ΡšΡƒΡ˜Ρƒ сС ΠΏΡ€Π°Π²ΠΈΠ»Π° која су Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρƒ ΠΎΠ΄Π΅Ρ™ΠΊΡƒ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π΅ прСноса.

Π’ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π° Ρ›Π΅ Π—3ΠŸΡ€ΠΎΠ²Π΅Ρ€ Ρ‚Ρ€Π°ΠΆΠΈΡ‚ΠΈ ΡƒΠΏΡ€Π°Π²ΠΎ Ρ‚Π°ΠΊΠ²Π΅ сСтовС услова који Ρ›Π΅ Π½Π° ΠΊΡ€Π°Ρ˜Ρƒ ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ ΠΏΠΎΠ²Π»Π°Ρ‡Π΅ΡšΠ΅ срСдстава ΠΈΠ· ΡƒΠ³ΠΎΠ²ΠΎΡ€Π°.

Као Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, аутоматски добијамо ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°Π½ БМВ ΠΌΠΎΠ΄Π΅Π» нашСг ΡƒΠ³ΠΎΠ²ΠΎΡ€Π°.
Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π° јС Π²Π΅ΠΎΠΌΠ° сличан ΠΌΠΎΠ΄Π΅Π»Ρƒ ΠΈΠ· ΠΌΠΎΠ³ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠ³ Ρ‡Π»Π°Π½ΠΊΠ°, који сам саставио Ρ€ΡƒΡ‡Π½ΠΎ.

Π—Π°Π²Ρ€ΡˆΠ΅Π½ шаблон


import json

from z3 import *

s = Solver()

  
  
    
Steps=7
Num= Steps+1

human = [ Int('human_%i' % (i + 1)) for i in range(Num) ]
wolf = [ Int('wolf_%i' % (i + 1)) for i in range(Num) ]
goat = [ Int('goat_%i' % (i + 1)) for i in range(Num) ]
cabbage = [ Int('cabbage_%i' % (i + 1)) for i in range(Num) ]
nothing= [  And( human[i] == human[i+1], wolf[i] == wolf[i+1], goat[i] == goat[i+1], cabbage[i] == cabbage[i+1] )   for i in range(Num-1) ]


start= [ human[0] == 1, wolf[0] == 0, goat[0] == 1, cabbage[0] == 0 ]

safeAlone= [  And( goat[i+1] != wolf[i+1] , goat[i+1] != cabbage[i+1] )   for i in range(Num-1) ]
safe= [  Or( safeAlone[i] , goat[i+1]  ==  human[i+1] )   for i in range(Num-1) ]
humanTravel= [  human[i] != human[i+1]  for i in range(Num-1) ]
cabbageSide= [  Or( cabbage[i]  ==  0 , cabbage[i]  ==  1 )   for i in range(Num-1) ]
goatSide= [  Or( goat[i]  ==  0 , goat[i]  ==  1 )   for i in range(Num-1) ]
humanSide= [  Or( human[i]  ==  0 , human[i]  ==  1 )   for i in range(Num-1) ]
t7= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] )  , goat[i+1]  ==  goat[i] )  , cabbage[i+1]  ==  cabbage[i] )   for i in range(Num-1) ]
t3= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] )  , goat[i+1]  ==  goat[i] )  , cabbage[i+1]  ==  cabbage[i] + 1 )   for i in range(Num-1) ]
t6= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] )  , goat[i+1]  ==  goat[i] )  , cabbage[i+1]  ==  cabbage[i] - 1 )   for i in range(Num-1) ]
t2= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] )  , goat[i+1]  ==  goat[i] + 1 )  , cabbage[i+1]  ==  cabbage[i] )   for i in range(Num-1) ]
t5= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] )  , goat[i+1]  ==  goat[i] - 1 )  , cabbage[i+1]  ==  cabbage[i] )   for i in range(Num-1) ]
t1= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] + 1 )  , goat[i+1]  ==  goat[i] )  , cabbage[i+1]  ==  cabbage[i] )   for i in range(Num-1) ]
t4= [  And( And( And( humanTravel[i] , wolf[i+1]  ==  wolf[i] - 1 )  , goat[i+1]  ==  goat[i] )  , cabbage[i+1]  ==  cabbage[i] )   for i in range(Num-1) ]
wolfSide= [  Or( wolf[i]  ==  0 , wolf[i]  ==  1 )   for i in range(Num-1) ]
side= [  And( And( And( humanSide[i] , wolfSide[i] )  , goatSide[i] )  , cabbageSide[i] )   for i in range(Num-1) ]
objectTravel= [  Or( Or( Or( Or( Or( Or( t1[i] , t2[i] )  , t3[i] )  , t4[i] )  , t5[i] )  , t6[i] )  , t7[i] )   for i in range(Num-1) ]
data= [ Or(  And( And( And( side[i] , safe[i] )  , humanTravel[i] )  , objectTravel[i] )   , nothing[i]) for i in range(Num-1) ]


fState=  And( And( And( human[Steps]  ==  1 , wolf[Steps]  ==  1 )  , goat[Steps]  ==  1 )  , cabbage[Steps]  ==  1 )  
final=  fState 




#template, only start rest
s.add(data + start)

#template
s.add(final)




ind = 0

f = open("/var/www/html/all/bin/python/log.txt", "a")



while s.check() == sat:
  ind = ind +1
  

  print ind
  m = s.model()
  print m

  print "traversing model..." 
  #for d in m.decls():
	#print "%s = %s" % (d.name(), m[d])

  
 
  f.write(str(m))
  f.write("nn")
  exit()
  #s.add(Or(goat[0] != s.model()[data[0]] )) # prevent next model from using the same assignment as a previous model



print "Total solution number: "
print ind  

f.close()
 


Након Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ°, Π—3ΠŸΡ€ΠΎΠ²Π΅Ρ€ Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΠ°ΠΌΠ΅Ρ‚Π½ΠΈ ΡƒΠ³ΠΎΠ²ΠΎΡ€ ΠΈ ΠΏΡ€ΡƒΠΆΠ° Π½Π°ΠΌ Π»Π°Π½Π°Ρ† Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π° који Ρ›Π΅ Π½Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ Π΄Π° ΠΏΠΎΠ²ΡƒΡ‡Π΅ΠΌΠΎ срСдства:

Winning transaction chain found:
Data transaction: human= 0, wolf= 0, goat= 1, cabbage= 0
Data transaction: human= 1, wolf= 0, goat= 1, cabbage= 1
Data transaction: human= 0, wolf= 0, goat= 0, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 0, cabbage= 1
Data transaction: human= 0, wolf= 1, goat= 0, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1
Data transaction: human= 1, wolf= 1, goat= 1, cabbage= 1
Transfer transaction

ΠŸΠΎΡ€Π΅Π΄ ΡƒΠ³ΠΎΠ²ΠΎΡ€Π° ΠΎ Ρ‚Ρ€Π°Ρ˜Π΅ΠΊΡ‚Ρƒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ СкспСримСнтисати са сопствСним ΡƒΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠ° ΠΈΠ»ΠΈ испробати овај Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ који сС Ρ€Π΅ΡˆΠ°Π²Π° Ρƒ 2 Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π΅.

let contract = tx.sender
let a= extract(getInteger(contract,"a"))
let b= extract(getInteger(contract,"b"))
let c= extract(getInteger(contract,"c"))
let d= extract(getInteger(contract,"d"))

match tx {
case t:DataTransaction =>
let na= extract(getInteger(t.data,"a")) 
let nb= extract(getInteger(t.data,"b"))
let nc= extract(getInteger(t.data,"c"))
let nd= extract(getInteger(t.data,"d"))
   
   nd == 0 || a == 100 - 5
case s:TransferTransaction =>
   ( a + b - c ) * d == 12

case _ => true

}

ΠŸΠΎΡˆΡ‚ΠΎ јС ΠΎΠ²ΠΎ ΠΏΡ€Π²Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°, синтакса јС Π²Π΅ΠΎΠΌΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ΄Π° ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠ°ΠΊΠ°.
Π£ Π½Π°Ρ€Π΅Π΄Π½ΠΈΠΌ Ρ‡Π»Π°Π½Ρ†ΠΈΠΌΠ° ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌ Π΄Π° ΠΏΠΎΠΊΡ€ΠΈΡ˜Π΅ΠΌ Π΄Π°Ρ™ΠΈ Ρ€Π°Π·Π²ΠΎΡ˜ Π’Πœ-Π° ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊΠΎ ΡƒΠ· ΡšΠ΅Π³ΠΎΠ²Ρƒ ΠΏΠΎΠΌΠΎΡ› ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Π½Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚Π½Π΅ ΡƒΠ³ΠΎΠ²ΠΎΡ€Π΅, Π° Π½Π΅ само Π΄Π° ΠΈΡ… Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚Π΅.

Π’ΠΈΡ€Ρ‚ΡƒΠ΅Π»Π½Π° машина ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° јС доступна Π½Π° http://2.59.42.98/hyperbox/
Након ΡˆΡ‚ΠΎ сам ΡƒΡ€Π΅Π΄ΠΈΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈ ΠΊΠΎΠ΄ симболичкС Π’Πœ ΠΈ Π΄ΠΎΠ΄Π°ΠΎ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€Π΅, ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌ Π΄Π° Π³Π° ставим Π½Π° Π“ΠΈΡ‚Π₯ΡƒΠ± Π·Π° слободан приступ.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

Π”ΠΎΠ΄Π°Ρ˜ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€