αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž–αžΈαžŠαŸ†αž”αžΌαž„αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžαž½αž’αž€αŸ’αžŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ PHP αž“αž·αž„ Python

αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž‚αžΊαž‡αžΆαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™ αž¬αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αž”αŸ†αž•αž»αžαž˜αž½αž™ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŸαŸ’αžœαŸ‚αž„αžšαž€αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž¬αž”αž„αŸ’αž αžΆαž‰αžαžΆαžœαžΆαž˜αž·αž“αž˜αžΆαž“αŸ”

αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸƒ αž…αž…αž€ αž–αž–αŸ‚ αž“αž·αž„αžŸαŸ’αž–αŸƒαž€αŸ’αžαŸ„αž” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž˜αž»αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αžΈαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αŸƒαž”αž‰αŸ’αž αžΆαž‘αŸ…αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž αžΎαž™αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžšαž”αŸ€αž”
αžαžΎαž–αž½αž€αž‚αŸαž’αžΆαž…αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αŸ…αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž…αŸ’αž”αžΆαž”αŸ‹αž•αŸ’αž›αžΌαžœαž€αžΆαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž”αžΆαž“αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžšαžŸαŸαžš analogue αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαŸ”

αžœαžΆαž‰αŸ‚αž€αž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž αžΎαž™αž”αž€αž”αŸ’αžšαŸ‚αžœαžΆαž‘αŸ…αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŸαž˜αžΈαž€αžΆαžš (SMT) αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžαžΆαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž½αž…αž αžΎαž™αŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž‚αžŽαž“αžΆαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž›αžΎαž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαž‡αžΆαž•αŸ’αž“αŸ‚αž€αŸ—αŸ”
αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαŸ€αž”αžšαžΆαž”αŸ‹αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αžαžΆαžœαžΆαž‡αžΆαž’αŸ’αžœαžΈαŸ”

αž€αžΆαžšαž‚αžŽαž“αžΆαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž‚αžΊαž‡αžΆαžœαž·αž’αžΈαž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαž‡αž½αžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸαž’αŸ†αž‘αžΌαž›αžΆαž™ αž“αž·αž„αž‡αžΆαž§αž”αž€αžšαžŽαŸαž…αž˜αŸ’αž”αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž›αžΌαžœαž€αžΆαžšαŸ”

αž§αž‘αžΆαž αžšαžŽαŸ αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž”αž‰αŸ’αž…αžΌαž› αžŠαŸ‚αž›αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž‘αžΈαž˜αž½αž™αž’αžΆαž…αž™αž€αžαž˜αŸ’αž›αŸƒαžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αžŽαžΆαž˜αž½αž™ αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž‘αžΈαž–αžΈαžš αžŸαžΌαž“αŸ’αž™αž‘αžΈαž”αžΈ αž“αž·αž„αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž›αž‘αŸ’αž’αž•αž› αž§αž‘αžΆαž αžšαžŽαŸ 42αŸ”

αž€αžΆαžšαž‚αžŽαž“αžΆαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαžαŸ‹αž˜αž½αž™αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαž…αž˜αŸ’αž›αžΎαž™αžαžΆαžαžΎαžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αž“αž·αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αž‰αŸ’αž…αžΌαž›αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž¬αž—αžŸαŸ’αžαž»αžαžΆαž„αžαžΆαž˜αž·αž“αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αŸ‚αž”αž“αŸαŸ‡αž‘αŸαŸ”

αž›αžΎαžŸβ€‹αž–αžΈβ€‹αž“αŸαŸ‡β€‹αž‘αŸ…β€‹αž‘αŸ€αž αž™αžΎαž„β€‹αž’αžΆαž…β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‘αŸ…β€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž’αžΆαž…β€‹αž’αŸ’αžœαžΎβ€‹αž”αžΆαž“ αž αžΎαž™β€‹αž‡αŸ’αžšαžΎαžŸβ€‹αž™αž€β€‹αžαŸ‚β€‹αž’αžΆαžαž»β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž§αž‘αžΆαž αžšαžŽαŸ αž–αžΆαž€αŸ’αž™β€‹αžŸαž˜αŸ’αž„αžΆαžαŸ‹β€‹αž’αŸ’αž“αž€β€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ”

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αžšαž€αžƒαžΎαž‰αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž¬αž‘αž‘αž½αž›αž”αžΆαž“αž—αžŸαŸ’αžαž»αžαžΆαž„αžαžΆαž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž˜αžΆαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αŸ”

αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αž»αžšαžΆαžŽαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž‚αžΊαž‡αžΆαž€αžšαžŽαžΈαž–αž·αžŸαŸαžŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ VM αžαž½αž’αž€αŸ’αžŸαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž•αž„αžŠαŸ‚αžšαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž‘αŸ…αž’αžαŸ’αžαž”αž‘αž˜αž»αž“ αž‚αŸαž’αžΆαž…αžšαž€αžƒαžΎαž‰αž€αžΆαžšαžšαž·αŸ‡αž‚αž“αŸ‹αžŠαŸ„αž™αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž—αžΆαž–αž‘αž“αŸ‹αžαŸ’αžŸαŸ„αž™αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž”αž‰αŸ’αž αžΆαž…αž˜αŸ’αž”αž„αž‚αžΊαŸ–

  1. αž€αžΆαžšαž•αŸ’αž‘αž»αŸ‡αžšαž½αž˜αž‚αŸ’αž“αžΆαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αŸ…αž‘αžΈαž”αŸ†αž•αž»αžαž”αžΆαž“αž’αŸ’αž›αžΆαž€αŸ‹αž…αž»αŸ‡αžŠαž›αŸ‹ P=NP
  2. αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž αŸ…αž‘αŸ…αž€αžΆαž“αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžš αž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αž€αž“αŸ’αž›αŸ‚αž„αž•αŸ’αž‘αž»αž€αžαžΆαž„αž€αŸ’αžšαŸ…αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‚αžΊαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹
  3. αž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αžαž·αžαž·αž‡αž“ αž¬αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αžΆαž“αž”αŸ†αžŽαž„αž’αŸ’αžœαžΈαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžœαžΆαž±αŸ’αž™αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžŽαŸˆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž“αŸ„αŸ‡αž‘αŸαŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αžΉαž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž˜αž½αž™αžαž»αžŸαž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžšαŸ†αž–αžΉαž„αž‘αž»αž€αž–αžΈαžœαžΆαŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž–αž·αž…αžΆαžšαžŽαžΆαž‡αžΆαž…αž˜αŸ’αž”αž„αž›αžΎαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αžœαžΆαž™αž€αŸ’αž”αžΆαž›αžαŸ’αž‰αž»αŸ†αž‘αž›αŸ‹αž“αžΉαž„αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡αž‘αŸ αž αžΎαž™αž“αžΉαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž“αž·αž„αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αžΆαž“αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαžŸαŸαž€αŸ’αžαž·αžŸαž˜αž”αŸ†αž•αž»αžαž“αžΉαž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž‡αž˜αŸ’αžšαžΎαžŸαž”αžΆαž“αž’αŸ’αž›αžΆαž€αŸ‹αž›αžΎαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆ RIDE αž–αžΈαžœαŸαž‘αž·αž€αžΆ WavesαŸ– αž–αž½αž€αž‚αŸαž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ Turing αž αžΎαž™αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž’αžαž·αž”αžšαž˜αžΆαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžŸαž·αž”αŸ’αž”αž“αž·αž˜αŸ’αž˜αž·αžαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž–αžΈαž•αŸ’αž“αŸ‚αž€αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαŸ”

αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αžΉαž„αž˜αžΆαž“αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαžŽαžΆαž˜αž½αž™αŸ– αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžœαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”
αž αžΎαž™αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αŸ†αž αž»αžŸαž”αŸ‚αž”αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αž–αžŸαŸ‹αžŽαžΆαžŸαŸ‹ αž–αŸ’αžšαŸ„αŸ‡αžαžΆαž…αŸ†αž“αž½αž“αž‘αžΉαž€αž”αŸ’αžšαžΆαž€αŸ‹αžŠαŸαž…αŸ’αžšαžΎαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž›αžΎαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž“αž·αž˜αŸ’αž˜αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ PHP αž“αž·αž„ Python αž αžΎαž™αž”αŸ’αžšαžΎ Z3Prover αž–αžΈ Microsoft Research αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαžΌαž”αž˜αž“αŸ’αž SMT αž›αž‘αŸ’αž’αž•αž›αŸ”

αž“αŸ…αžŸαŸ’αž“αžΌαž›αžšαž”αžŸαŸ‹αžœαžΆαž‚αžΊαž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž–αž αž»αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›, αžŠαŸ‚αž›
αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž¬αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸαžŠαŸ„αž™αŸ”
αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚ MythrilαžŠαŸ‚αž›αž‡αžΆαž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αž”αŸ†αž•αž»αžαž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž—αžΆαž–αž„αžΆαž™αžšαž„αž‚αŸ’αžšαŸ„αŸ‡ Ethereum αž‘αžΎαž”αžαŸ‚αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αžαŸ’αžαž—αžΆαž–αž“αŸαŸ‡αž€αžΆαž›αž–αžΈαž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αžαŸ‚αž˜αž»αž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž’αŸαž’αžΎαžšαž‚αžΊαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž‡αžΆαž„αž αžΎαž™ Turing αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ”

PHP αž”αž€αž”αŸ’αžšαŸ‚αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž“αŸƒαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒ RIDE αž‘αŸ…αž‡αžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž” python αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž“αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’ Z3 SMT-compatible αž“αŸƒαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆ αž“αž·αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ–

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž–αžΈαžŠαŸ†αž”αžΌαž„αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžαž½αž’αž€αŸ’αžŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ PHP αž“αž·αž„ Python

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαŸ€αž”αžšαžΆαž”αŸ‹αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž™αŸ‰αžΆαž„αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž–αžΆαž€αŸ’αž™αž–αžΈαžšαž”αžΈαž’αŸ†αž–αžΈαž—αžΆαžŸαžΆαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒ RIDE αŸ”

αžœαžΆαž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž˜αž»αžαž„αžΆαžš αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž…αŸαž‰αž˜αžαž· αžŠαŸ‚αž›αžαŸ’αž‡αž·αž›αžαžΆαž˜αž€αžΆαžšαžšαž…αž“αžΆαŸ”
RIDE αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž—αžΆαž–αž―αž€αŸ„αž“αŸ…αž€αŸ’αž“αž»αž„ blockchain αž αžΎαž™αž’αžΆαž…αž‘αžΆαž‰αž™αž€ αž“αž·αž„αžŸαžšαžŸαŸαžšαž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈαž€αžΆαžšαž•αŸ’αž‘αž»αž€αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž“αžΉαž„αž€αžΆαž”αžΌαž”αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆ RIDE αž‘αŸ…αž“αžΉαž„αž€αžΆαž”αžΌαž”αž“αžΈαž˜αž½αž™αŸ— αž αžΎαž™αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž“αžΉαž„αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž€αžΆαžšαž–αž·αž αž¬αž˜αž·αž“αž–αž·αžαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

TRUE αž˜αžΆαž“αž“αŸαž™αžαžΆαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αžœαžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž αžΎαž™ FALSE αž˜αžΆαž“αž“αŸαž™αžαžΆαžœαžΆαž αžΆαž˜αžƒαžΆαžαŸ‹αžœαžΆαŸ”
αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αŸ– αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž’αžΆαž…αž αžΆαž˜αžƒαžΆαžαŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸαžš αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαž˜αžαž»αž›αŸ’αž™αž€αžΆαž”αžΌαž”αž˜αžΆαž“αžαž·αž…αž‡αžΆαž„ 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

}

PHP αžŠαŸ†αž”αžΌαž„αž‘αžΆαž‰αž™αž€αž’αžαŸαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž…αŸαž‰αž–αžΈαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž€αžΌαž“αžŸαŸ„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž“αž·αž„αž’αžαŸαžšαž€αž“αŸ’αžŸαŸ„αž˜αž”αŸŠαžΌαž›αžΈαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ”

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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ PHP αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž–αž½αž€αžœαžΆαž‘αŸ…αž‡αžΆ Z3Prover SMT-compatible system description αž“αŸ…αž€αŸ’αž“αž»αž„ PythonαŸ”
αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž»αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ†αžŠαŸ‚αž›αž’αžαŸαžšαž•αŸ’αž‘αž»αž€αž‘αž‘αž½αž›αž”αžΆαž“αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸ i αžŸαž“αŸ’αž‘αžŸαŸ’αžŸαž“αŸαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž’αžαŸαžš i + 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] )  

αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαŸ€αž” αž“αž·αž„αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αžšαžΌαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’ SMT αž“αŸ…αž€αŸ’αž“αž»αž„ Python αŸ”

αž‚αŸ†αžšαžΌαž‘αž‘αŸ


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()
 


αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‘αžΆαŸ†αž„αž˜αžΌαž› αž…αŸ’αž”αžΆαž”αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αž‘αŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαŸ”

αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆ Z3Prover αž“αžΉαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž™αŸ‰αžΆαž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αžΌαžœαž›αž€αŸ’αžαžαžŽαŸ’αžŒαž”αŸ‚αž”αž“αŸαŸ‡αžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŠαž€αž”αŸ’αžšαžΆαž€αŸ‹αž…αŸαž‰αž–αžΈαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‚αŸ†αžšαžΌ SMT αžŠαŸ‚αž›αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”
αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰αžαžΆαžœαžΆαžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„αž‚αŸ†αžšαžΌαž–αžΈαž’αžαŸ’αžαž”αž‘αž˜αž»αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αžŠαŸ„αž™αžŠαŸƒαŸ”

αž‚αŸ†αžšαžΌαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹


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()
 


αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Z3Prover αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒ αž“αž·αž„αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαžαŸ’αžŸαŸ‚αžŸαž„αŸ’αžœαžΆαž€αŸ‹αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αžŠαž€αž”αŸ’αžšαžΆαž€αŸ‹αŸ–

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

}

αžŠαŸ„αž™αžŸαžΆαžšαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αž”αŸ†αž•αž»αž αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαžαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™αž’αžΆαž…αž˜αžΆαž“αž€αŸ†αž αž»αžŸαŸ”
αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒ VM αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžœαžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αž‘αŸαŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžαž½αž’αž€αŸ’αžŸαžšαž˜αžΆαž“αž“αŸ… http://2.59.42.98/hyperbox/
αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαžΆαž€αŸ‹αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž“αŸƒαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ VM αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™ αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αžŠαžΆαž€αŸ‹αžœαžΆαž“αŸ…αž›αžΎ GitHub αžŠαŸ„αž™αž₯αžαž‚αž·αžαžαŸ’αž›αŸƒαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹