เชถเชฐเซ‚เช†เชคเชฅเซ€ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€ เชธเชฟเชธเซเชŸเชฎ เชฌเชจเชพเชตเชตเซ€. เชญเชพเช— 1: PHP เช…เชจเซ‡ Python เชฎเชพเช‚ เช…เช•เซเชทเชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ

เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€ เช เชเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช…เชฅเชตเชพ เชฌเซ€เชœเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ€ เชšเช•เชพเชธเชฃเซ€ เช›เซ‡.

เช† เชเช• เชธเซŒเชฅเซ€ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชชเชฆเซเชงเชคเชฟเช“ เช›เซ‡ เชœเซ‡ เชคเชฎเชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚ เชฌเชงเซ€ เชจเชฌเชณเชพเชˆเช“ เชถเซ‹เชงเชตเชพ เช…เชฅเชตเชพ เชธเชพเชฌเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจเชฅเซ€.

เชจเซ€ เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€เชจเซเช‚ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ เชตเชฐเซ, เชฌเช•เชฐเซ€ เช…เชจเซ‡ เช•เซ‹เชฌเซ€ เชฎเชพเชฐเชพ เช…เช—เชพเช‰เชจเชพ เชฒเซ‡เช–เชฎเชพเช‚.

เช† เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เชธเชฎเชธเซเชฏเชพเช“เชจเซ€ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€เชฅเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เชคเชฐเชซ เช†เช—เชณ เชตเชงเซ€เชถ เช…เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซเช‚ เช›เซเช‚
เชคเซ‡เช“เชจเซ‡ เช”เชชเชšเชพเชฐเชฟเช• เชจเชฟเชฏเชฎ เชชเซเชฐเชฃเชพเชฒเซ€เชฎเชพเช‚ เช†เชชเชฎเซ‡เชณเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เชชเซเชฐเชคเซ€เช•เชพเชคเซเชฎเช• เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจเชจเซเช‚ เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชเชจเชพเชฒเซ‹เช— เชฒเช–เซเชฏเซเช‚.

เชคเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เซ‹เชกเชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเชฎเซ€เช•เชฐเชฃเซ‹เชจเซ€ เชธเชฟเชธเซเชŸเชฎ (เชเชธเชเชฎเชŸเซ€) เชฎเชพเช‚ เช…เชจเซเชตเชพเชฆเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซ‡เชŸเชฟเช• เชฐเซ€เชคเซ‡ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชธเชพเช‚เช•เซ‡เชคเชฟเช• เช—เชฃเชคเชฐเซ€เช“ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐ เช–เช‚เชกเชฟเชค เชฐเซ€เชคเซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเซ‹เชตเชพเชฅเซ€,
เชนเซเช‚ เชคเซ‡ เชถเซเช‚ เช›เซ‡ เชคเซ‡เชจเซเช‚ เชŸเซ‚เช‚เช•เชฎเชพเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถ.

เชธเชพเช‚เช•เซ‡เชคเชฟเช• เช—เชฃเชคเชฐเซ€ เช เชกเซ‡เชŸเชพเชจเซ€ เชตเชฟเชถเชพเชณ เชถเซเชฐเซ‡เชฃเซ€ เชชเชฐ เชเช• เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชšเชฒเชพเชตเชตเชพเชจเซ‹ เชเช• เชฎเชพเชฐเซเช— เช›เซ‡ เช…เชจเซ‡ เช”เชชเชšเชพเชฐเชฟเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชšเช•เชพเชธเชฃเซ€ เชฎเชพเชŸเซ‡เชจเซเช‚ เชฎเซเช–เซเชฏ เชธเชพเชงเชจ เช›เซ‡.

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ เช‡เชจเชชเซเชŸ เชถเชฐเชคเซ‹ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซเชฏเชพเช‚ เชชเซเชฐเชฅเชฎ เชฆเชฒเซ€เชฒ เช•เซ‹เชˆเชชเชฃ เชนเช•เชพเชฐเชพเชคเซเชฎเช• เชฎเซ‚เชฒเซเชฏเซ‹ เชฒเชˆ เชถเช•เซ‡ เช›เซ‡, เชฌเซ€เชœเซ€ เชจเช•เชพเชฐเชพเชคเซเชฎเช•, เชคเซเชฐเซ€เชœเซ€ เชถเซ‚เชจเซเชฏ เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชฆเชฒเซ€เชฒ, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, 42.

เชเช• เชฐเชจเชฎเชพเช‚ เชธเชพเช‚เช•เซ‡เชคเชฟเช• เช—เชฃเชคเชฐเซ€เช“ เช†เชชเชฃเชจเซ‡ เช‡เชšเซเช›เชฟเชค เชชเชฐเชฟเชฃเชพเชฎ เชฎเซ‡เชณเชตเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡เชจเซ‹ เชœเชตเชพเชฌ เช…เชจเซ‡ เช†เชตเชพ เช‡เชจเชชเซเชŸ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเชพ เชธเชฎเซ‚เชนเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช†เชชเชถเซ‡. เช…เชฅเชตเชพ เชชเซเชฐเชพเชตเชพ เช›เซ‡ เช•เซ‡ เช†เชตเชพ เช•เซ‹เชˆ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชจเชฅเซ€.

เชคเชฆเซเชชเชฐเชพเช‚เชค, เช…เชฎเซ‡ เชคเชฎเชพเชฎ เชธเช‚เชญเชตเชฟเชค เชฎเซเชฆเซเชฆเชพเช“ เชชเชฐ เช‡เชจเชชเซเชŸ เชฆเชฒเซ€เชฒเซ‹ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เช…เชจเซ‡ เชซเช•เซเชค เช†เช‰เชŸเชชเซเชŸ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐ เชชเชพเชธเชตเชฐเซเชก.

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช…เชฎเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ€ เชคเชฎเชพเชฎ เชจเชฌเชณเชพเชˆเช“ เชถเซ‹เชงเซ€เชถเซเช‚ เช…เชฅเชตเชพ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐเชจเซ‹ เชชเชพเชธเชตเชฐเซเชก เชธเซเชฐเช•เซเชทเชฟเชค เช›เซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฌเชฟเชคเซ€ เชฎเซ‡เชณเชตเซ€เชถเซเช‚.

เชคเซ‡ เชจเซ‹เช‚เชงเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช•เซ‡ เชšเซ‹เช•เซเช•เชธ เช‡เชจเชชเซเชŸ เชกเซ‡เชŸเชพ เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซเช‚ เช•เซเชฒเชพเชธเชฟเช•เชฒ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เช เชธเชฟเชฎเซเชฌเซ‹เชฒเชฟเช• เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจเชจเซ‹ เชเช• เช–เชพเชธ เช•เซ‡เชธ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชฎเชพเชฐเซเช‚ เชชเชพเชคเซเชฐ VM เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจเชจเชพ เช‡เชฎเซเชฏเซเชฒเซ‡เชถเชจ เชฎเซ‹เชกเชฎเชพเช‚ เชชเชฃ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เช…เช—เชพเช‰เชจเชพ เชฒเซ‡เช–เชจเซ€ เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชคเซ‡เชจเซ€ เชจเชฌเชณเชพเชˆเช“เชจเซ€ เชšเชฐเซเชšเชพ เชธเชพเชฅเซ‡ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€เชจเซ€ เชตเชพเชœเชฌเซ€ เชŸเซ€เช•เชพ เชฎเชณเซ€ เชถเช•เซ‡ เช›เซ‡.

เชฎเซเช–เซเชฏ เชธเชฎเชธเซเชฏเชพเช“ เช›เซ‡:

  1. เชธเช‚เชฏเซเช•เซเชค เชตเชฟเชธเซเชซเซ‹เชŸ, เช•เชพเชฐเชฃ เช•เซ‡ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€ เช†เช–เชฐเซ‡ P=NP เชชเชฐ เช†เชตเซ‡ เช›เซ‡
  2. เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ, เชจเซ‡เชŸเชตเชฐเซเช•เซเชธ เช…เชจเซ‡ เช…เชจเซเชฏ เชฌเชพเชนเซเชฏ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชชเชฐเชจเชพ เช•เซ‰เชฒเซเชธเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชšเช•เชพเชธเชตเซ€ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡
  3. เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชฎเชพเช‚ เชญเซ‚เชฒเซ‹, เชœเซเชฏเชพเชฐเซ‡ เช—เซเชฐเชพเชนเช• เช…เชฅเชตเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฐ เชเช• เชตเชธเซเชคเซเชจเซ‹ เช‡เชฐเชพเชฆเซ‹ เชงเชฐเชพเชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเช•เชจเซ€เช•เซ€ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชฎเชพเช‚ เชคเซ‡เชจเซเช‚ เชšเซ‹เช•เซเช•เชธ เชตเชฐเซเชฃเชจ เช•เชฐเซเชฏเซเช‚ เชจเชฅเซ€.

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชšเช•เชพเชธเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เช…เชจเซ‡ เชธเซเชชเชทเซเชŸเซ€เช•เชฐเชฃเชจเซเช‚ เชชเชพเชฒเชจ เช•เชฐเชถเซ‡, เชชเชฐเช‚เชคเซ เชจเชฟเชฐเซเชฎเชพเชคเชพเช“ เชคเซ‡เชจเชพเชฅเซ€ เชœเซ‡ เช…เชชเซ‡เช•เซเชทเชพ เชฐเชพเช–เชคเชพ เชนเชคเชพ เชคเซ‡เชจเชพเชฅเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฒเช— เช•เช‚เชˆเช• เช•เชฐเชถเซ‡.

เช† เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เชฎเซเช–เซเชฏเชคเซเชตเซ‡ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธเชฎเชพเช‚ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซเช‚ เชตเชฟเชšเชพเชฐเซ€ เชฐเชนเซเชฏเซ‹ เชนเซ‹เชตเชพเชฅเซ€, เชนเซเช‚ เชนเชฎเชฃเชพเช‚ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซเช‚ เชฎเชพเชฅเซเช‚ เชฆเซ€เชตเชพเชฒ เชธเชพเชฅเซ‡ เช…เชฅเชกเชพเชตเซ€เชถ เชจเชนเซ€เช‚, เช…เชจเซ‡ เชเชตเซ€ เชธเชฟเชธเซเชŸเชฎ เชชเชธเช‚เชฆ เช•เชฐเซ€เชถ เชœเซเชฏเชพเช‚ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชฟเช• เชœเชŸเชฟเชฒเชคเชพ เช…เชจเซ‡ เชฌเชพเชนเซเชฏ เช•เซ‰เชฒเซเชธเชจเซ€ เชธเช‚เช–เซเชฏเชพ เชจเซเชฏเซ‚เชจเชคเชฎ เชนเซ‹เชฏ.

เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸเซเชธ เช† เชœเชฐเซ‚เชฐเชฟเชฏเชพเชคเซ‹เชจเซ‡ เชถเซเชฐเซ‡เชทเซเช  เชฐเซ€เชคเซ‡ เช…เชจเซเชฐเซ‚เชช เชนเซ‹เชตเชพเชฅเซ€, เชชเชธเช‚เชฆเช—เซ€ เชตเซ‡เชตเซเช เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐเชฅเซ€ เชฐเชพเช‡เชก เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชชเชฐ เชชเชกเซ€: เชคเซ‡ เชŸเซเชฏเซเชฐเชฟเช‚เช— เชชเซ‚เชฐเซเชฃ เชจเชฅเซ€, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชฎเชนเชคเซเชคเชฎ เชœเชŸเชฟเชฒเชคเชพ เช•เซƒเชคเซเชฐเชฟเชฎ เชฐเซ€เชคเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช›เซ‡.

เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชซเช•เซเชค เชคเช•เชจเซ€เช•เซ€ เชฌเชพเชœเซเชฅเซ€ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเชˆเชถเซเช‚.

เชตเชงเซเชฎเชพเช‚, เช•เซ‹เชˆเชชเชฃ เช•เชฐเชพเชฐ เชฎเชพเชŸเซ‡ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชฎเชพเช‚เช—เชฎเชพเช‚ เชนเชถเซ‡: เช•เชฐเชพเชฐเชจเซ€ เชญเซ‚เชฒ เชถเชฐเซ‚ เชฅเชฏเชพ เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชธเซเชงเชพเชฐเชตเชพเชจเซเช‚ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช…เชถเช•เซเชฏ เช›เซ‡.
เช…เชจเซ‡ เช†เชตเซ€ เชญเซ‚เชฒเซ‹เชจเซ€ เช•เชฟเช‚เชฎเชค เช˜เชฃเซ€ เชตเชงเชพเชฐเซ‡ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เช˜เชฃเซ€ เชตเช–เชค เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชชเชฐ เชฎเซ‹เชŸเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เชญเช‚เชกเซ‹เชณ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชฎเชพเชฐเซเช‚ เชธเชพเช‚เช•เซ‡เชคเชฟเช• เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ PHP เช…เชจเซ‡ Python เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒเซเช‚ เช›เซ‡, เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ SMT เชธเซ‚เชคเซเชฐเซ‹เชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡ Microsoft เชธเช‚เชถเซ‹เชงเชจเชฎเชพเช‚เชฅเซ€ Z3Prover เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.

เชคเซ‡เชจเชพ เชฎเซ‚เชณเชฎเชพเช‚ เชเช• เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชฎเชฒเซเชŸเชฟ-เชŸเซเชฐเชพเชจเซเชเซ‡เช•เซเชถเชจเชฒ เชถเซ‹เชง เช›เซ‡, เชœเซ‡
เชคเชฎเชจเซ‡ เช‰เช•เซ‡เชฒเซ‹ เช…เชฅเชตเชพ เชจเชฌเชณเชพเชˆเช“ เชถเซ‹เชงเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เชญเชฒเซ‡ เชคเซ‡เชจเซ‡ เช˜เชฃเชพ เชตเซเชฏเชตเชนเชพเชฐเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ.
เชชเชฃ เชฎเชฟเชฅเซเชฐเชฟเชฒ, Ethereum เชจเชฌเชณเชพเชˆเช“ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชธเชพเช‚เช•เซ‡เชคเชฟเช• เชฎเชพเชณเช–เชพเชฎเชพเช‚เชจเซ€ เชเช•, เชฎเชพเชคเซเชฐ เชฅเซ‹เชกเชพ เชฎเชนเชฟเชจเชพ เชชเชนเซ‡เชฒเชพ เชœ เช† เช•เซเชทเชฎเชคเชพ เช‰เชฎเซ‡เชฐเชพเชˆ.

เชชเชฐเช‚เชคเซ เช เชจเซ‹เช‚เชงเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เชˆเชฅเชฐ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชตเชงเซ เชœเชŸเชฟเชฒ เช…เชจเซ‡ เชŸเซเชฏเซเชฐเชฟเช‚เช— เชชเซ‚เชฐเซเชฃ เช›เซ‡.

PHP RIDE เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเซ‡เช•เซเชŸเชจเชพ เชธเซ‹เชฐเซเชธ เช•เซ‹เชกเชจเซ‡ เชชเชพเชฏเชฅเซ‹เชจ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ เช…เชจเซเชตเชพเชฆเชฟเชค เช•เชฐเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‡ Z3 SMT-เชธเซเชธเช‚เช—เชค เชธเชฟเชธเซเชŸเชฎ เชคเชฐเซ€เช•เซ‡ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชธเซเชŸเซ‡เชŸเซเชธ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เชธเช‚เช•เซเชฐเชฎเชฃเซ‹ เชฎเชพเชŸเซ‡เชจเซ€ เชถเชฐเชคเซ‹ เชคเชฐเซ€เช•เซ‡ เชฐเชœเซ‚ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡:

เชถเชฐเซ‚เช†เชคเชฅเซ€ เช”เชชเชšเชพเชฐเชฟเช• เชšเช•เชพเชธเชฃเซ€ เชธเชฟเชธเซเชŸเชฎ เชฌเชจเชพเชตเชตเซ€. เชญเชพเช— 1: PHP เช…เชจเซ‡ Python เชฎเชพเช‚ เช…เช•เซเชทเชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ

เชนเชตเซ‡ เชนเซเช‚ เช…เช‚เชฆเชฐ เชถเซเช‚ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเซเช‚ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถ.

เชชเชฐเช‚เชคเซ เชชเซเชฐเชฅเชฎ, RIDE เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‹เชจเซเชŸเซเชฐเชพเช•เซเชŸ เชฒเซ‡เช‚เช—เซเชตเซ‡เชœ เชตเชฟเชถเซ‡ เชฅเซ‹เชกเชพเช• เชถเชฌเซเชฆเซ‹.

เชคเซ‡ เชเช• เช•เชพเชฐเซเชฏเชพเชคเซเชฎเช• เช…เชจเซ‡ เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ-เช†เชงเชพเชฐเชฟเชค เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพ เช›เซ‡ เชœเซ‡ เชกเชฟเชเชพเช‡เชจ เชฆเซเชตเชพเชฐเชพ เช†เชณเชธเซ เช›เซ‡.
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 เชชเช›เซ€ เชคเซ‡เชฎเชจเซ‡ Python เชฎเชพเช‚ Z3Prover SMT-เชธเซเชธเช‚เช—เชค เชธเชฟเชธเซเชŸเชฎ เชตเชฐเซเชฃเชจเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡.
เชกเซ‡เชŸเชพเชจเซ‡ เชฒเซ‚เชชเชฎเชพเช‚ เชตเซ€เช‚เชŸเชพเชณเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชตเซ‡เชฐเซ€เชเชฌเชฒเซเชธ เช‡เชจเซเชกเซ‡เช•เซเชธ 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 เชธเชฟเชธเซเชŸเชฎเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชจเชฎเซ‚เชจเชพเชฎเชพเช‚ เชธเซ‰เชฐเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เช–เชพเชฒเซ€ เชจเชฎเซ‚เชจเซ‹


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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹