ืฉืึทืคึฟืŸ ืึท ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืกื™ืกื˜ืขื ืคึฟื•ืŸ ืงืจืึทืฆืŸ. ื˜ื™ื™ืœ 1: ื›ืึทืจืึทืงื˜ืขืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืื™ืŸ ืคืคึผ ืื•ืŸ ืคึผื™ื˜ื”ืึธืŸ

ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื“ื™ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ืื™ื™ืŸ ืคึผืจืึธื’ืจืึทื ืึธื“ืขืจ ืึทืœื’ืขืจื™ื“ืึทื ื ื™ืฆืŸ ืื ื“ืขืจืŸ.

ื“ืึธืก ืื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ืฉื˜ืึทืจืง ืžืขื˜ื”ืึธื“ืก ืึทื– ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืึทืœืข ื•ื•ืึทืœื ืขืจืึทื‘ื™ืœื™ื˜ื™ื– ืื™ืŸ ืึท ืคึผืจืึธื’ืจืึทื ืึธื“ืขืจ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืึทื– ื–ื™ื™ ื˜ืึธืŸ ื ื™ื˜ ืขืงืกื™ืกื˜ื™ืจืŸ.

ื ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื–ืขืŸ ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืกืึทืœื•ื•ื™ื ื’ ื“ื™ ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ื•ื•ืึธืœืฃ, ืฆื™ื’ ืื•ืŸ ืงืจื•ื™ื˜ ืื™ืŸ ืžื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ืึทืจื˜ื™ืงืœ.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ืžืึทืš ืคื•ืŸ ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืคื•ืŸ ืคึผืจืึธื‘ืœืขืžืก ืฆื• ืžื’ื™ืœื” ืื•ืŸ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื•ื•ื™
ื•ื•ื™ ืงืขื ืขืŸ ื–ื™ื™ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืงืึธื ื•ื•ืขืจื˜ืขื“ ืื™ืŸ ืคืึธืจืžืึทืœ ื”ืขืจืฉืŸ ืกื™ืกื˜ืขืžืขืŸ.

ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืš ื’ืขืฉืจื™ื‘ืŸ ืžื™ื™ืŸ ืื™ื™ื’ืขื ืข ืึทื ืึทืœืึธื’ ืคื•ืŸ ืึท ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืžื™ื˜ ืกื™ืžื‘ืึธืœื™ืฉ ืคึผืจื™ื ืกืึทืคึผืึทืœื–.

ืขืก ืคึผืึทืจืกื™ื– ื“ื™ ืคึผืจืึธื’ืจืึทื ืงืึธื“ ืื•ืŸ ื˜ืจืึทื ืกืœื™ื™ืฅ ืขืก ืื™ืŸ ืึท ืกื™ืกื˜ืขื ืคื•ืŸ ื™ืงื•ื•ื™ื™ื–ืฉืึทื ื– (SMT), ื•ื•ืึธืก ืงืขื ืขืŸ ืฉื•ื™ืŸ ื–ื™ื™ืŸ ืกืึทืœื•ื•ื“ ืคึผืจืึธื’ืจืึทืžืžืึทื˜ื™ืงืึทืœืœื™.

ื–ื™ื ื˜ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ืกื™ืžื‘ืึธืœื™ืฉ ื—ืฉื‘ื•ื ื•ืช ืื™ื– ื“ืขืจืœืื ื’ื˜ ืื•ื™ืฃ ื“ื™ ืื™ื ื˜ืขืจื ืขื˜ ื’ืึทื ืฅ ืคืจืึทื’ืžืึทื ื˜ืขืจืึทืœื™,
ืื™ืš ื•ื•ืขืœ ื‘ืขืงื™ืฆืขืจ ื‘ืืฉืจื™ื™ื‘ืŸ ื•ื•ืืก ืขืก ืื™ื–.

ืกื™ืžื‘ืึธืœื™ืฉ ืงืึทืžืคึผื™ืึทื˜ื™ื™ืฉืึทืŸ ืื™ื– ืึท ื•ื•ืขื’ ืฆื• ืกื™ื™ืžืึทืœื˜ื™ื™ื ื™ืึทืกืœื™ ื•ื™ืกืคื™ืจืŸ ืึท ืคึผืจืึธื’ืจืึทื ืื•ื™ืฃ ืึท ื‘ืจื™ื™ื˜ ืงื™ื™ื˜ ืคื•ืŸ ื“ืึทื˜ืŸ ืื•ืŸ ืื™ื– ื“ื™ ื”ื•ื™ืคึผื˜ ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ืคืึธืจืžืึทืœ ืคึผืจืึธื’ืจืึทื ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ.

ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื˜ื ืึธื™ื ื•ื•ื• ื“ืขืจ ืขืจืฉื˜ืขืจ ืึทืจื’ื•ืžืขื ื˜ ืงืขื ืขืŸ ื ืขืžืขืŸ ืงื™ื™ืŸ positive ื•ื•ืึทืœื•ืขืก, ื“ื™ ืจื’ืข ื ืขื’ืึทื˜ื™ื•ื•, ื“ื™ ื“ืจื™ื˜ ื ื•ืœ, ืื•ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืึทืจื’ื•ืžืขื ื˜, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, 42.

ืกื™ืžื‘ืึธืœื™ืฉ ื—ืฉื‘ื•ื ื•ืช ืื™ืŸ ืื™ื™ืŸ ืœื•ื™ืคืŸ ื•ื•ืขื˜ ื’ืขื‘ืŸ ืื•ื ื“ื– ื“ื™ ืขื ื˜ืคืขืจ ืฆื• ืฆื™ ืขืก ืื™ื– ืžืขื’ืœืขืš ืคึฟืึทืจ ืื•ื ื“ื– ืฆื• ื‘ืึทืงื•ืžืขืŸ ื“ื™ ื’ืขื•ื•ืืœื˜ ืจืขื–ื•ืœื˜ืึทื˜ ืื•ืŸ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืึท ืกื›ื•ื ืคื•ืŸ ืึทื–ืึท ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืคึผืึทืจืึทืžืขื˜ืขืจืก. ืึธื“ืขืจ ื“ืขืจื•ื•ื™ื™ึทื– ืึทื– ืขืก ื–ืขื ืขืŸ ื ื™ื˜ ืึทื–ืึท ืคึผืึทืจืึทืžืขื˜ืขืจืก.

ื“ืขืจืฆื•, ืžื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ืึทืจื’ื•ืžืขื ื˜ืŸ ืฆื• ืึทืœืข ืžืขื’ืœืขืš ืึธื ืขืก, ืื•ืŸ ืกืขืœืขืงื˜ื™ืจืŸ ื‘ืœื•ื™ื– ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืึธื ืขืก, ืœืžืฉืœ, ื“ื™ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ืคึผืึทืจืึธืœ.

ืื™ืŸ ื“ืขื ืคืึทืœ, ืžื™ืจ ื•ื•ืขืœืŸ ื’ืขืคึฟื™ื ืขืŸ ืึทืœืข ื“ื™ ื•ื•ืึทืœื ืขืจืึทื‘ื™ืœื™ื˜ื™ื– ืคื•ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ืึธื“ืขืจ ื‘ืึทืงื•ืžืขืŸ ื“ืขืจื•ื•ื™ื™ึทื– ืึทื– ื“ืขืจ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ืก ืคึผืึทืจืึธืœ ืื™ื– ื–ื™ื›ืขืจ.

ืขืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื ื’ืขื•ื•ื™ื–ืŸ ืึทื– ื“ื™ ืงืœืึทืกื™ืฉ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ืึท ืคึผืจืึธื’ืจืึทื ืžื™ื˜ ืกืคึผืขืฆื™ืคื™ืฉ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื“ืึทื˜ืŸ ืื™ื– ืึท ืกืคึผืขืฆื™ืขืœ ืคืึทืœ ืคื•ืŸ ืกื™ืžื‘ืึธืœื™ืฉ ื“ื•ืจื›ืคื™ืจื•ื ื’.

ื“ืขืจื™ื‘ืขืจ, ืžื™ื™ืŸ ื›ืึทืจืึทืงื˜ืขืจ VM ืงืขื ืขืŸ ืื•ื™ืš ืึทืจื‘ืขื˜ืŸ ืื™ืŸ ืขืžื™ืึทืœื™ื™ืฉืึทืŸ ืžืึธื“ืข ืคื•ืŸ โ€‹โ€‹ืึท ื ืึธืจืžืึทืœ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ.

ืื™ืŸ ื“ื™ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ืฆื• ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืึทืจื˜ื™ืงืœ ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืึท ืฉื™ื™ืŸ ืงืจื™ื˜ื™ืง ืคื•ืŸ ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืžื™ื˜ ืึท ื“ื™ืกืงื•ืกื™ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ึทืŸ ื•ื•ื™ืงื ืึทืกืึทื–.

ื“ื™ ื”ื•ื™ืคื˜ ืคืจืื‘ืœืขืžืขืŸ ื–ืขื ืขืŸ:

  1. ืงืึธืžื‘ื™ื ืึทื˜ืึธืจื™ืึทืœ ื™ืงืกืคึผืœืึธื•ื–ืฉืึทืŸ, ื–ื™ื ื˜ ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืœืขืกืึธืฃ ืงื•ืžื˜ ืึทืจืึธืคึผ ืฆื• ืคึผ = ื ืคึผ
  2. ืคึผืจืึทืกืขืกื™ื ื’ ืงืึทืœืœืก ืฆื• ื“ื™ ื˜ืขืงืข ืกื™ืกื˜ืขื, ื ืขื˜ื•ื•ืึธืจืงืก ืื•ืŸ ืื ื“ืขืจืข ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืกื˜ืึธืจื™ื“ื–ืฉ ืื™ื– ืžืขืจ ืฉื•ื•ืขืจ ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ
  3. ื‘ืึทื’ื– ืื™ืŸ ื“ื™ ืกืคึผืขืกื™ืคื™ืงืึทื˜ื™ืึธืŸ, ื•ื•ืขืŸ ื“ืขืจ ืงื•ื ื” ืึธื“ืขืจ ืคึผืจืึธื’ืจืึทืžื™ืกื˜ ื‘ื“ืขื” ืื™ื™ืŸ ื–ืึทืš, ืึธื‘ืขืจ ื”ืื˜ ื ื™ืฉื˜ ื“ื™ืกืงืจื™ื™ื‘ื“ ืขืก ืึทืงื™ืขืจืึทื˜ืœื™ ื’ืขื ื•ื’ ืื™ืŸ ื“ื™ ื˜ืขื›ื ื™ืฉ ืกืคึผืขืกืึทืคืึทืงื™ื™ืฉืึทื ื–.

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ื“ื™ ืคึผืจืึธื’ืจืึทื ื•ื•ืขื˜ ื–ื™ื™ืŸ ื•ื•ืขืจืึทืคื™ื™ื“ ืื•ืŸ ื ืึธื›ืงื•ืžืขืŸ ืžื™ื˜ ื“ื™ ืกืคึผืขืกืึทืคืึทืงื™ื™ืฉืึทื ื–, ืึธื‘ืขืจ ื•ื•ืขื˜ ื˜ืึธืŸ ืขืคึผืขืก ื’ืึธืจ ืึทื ื“ืขืจืฉ ืคื•ืŸ ื•ื•ืึธืก ื“ื™ ืงืจื™ื™ื™ื˜ืขืจื– ื“ืขืจื•ื•ืึทืจื˜ ืคื•ืŸ ืื™ื.

ื–ื™ื ื˜ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ื‘ื™ืŸ ื“ืขืจ ื”ื•ื™ืคึผื˜ ืงืึทื ืกื™ื“ืขืจื™ื ื’ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืคื™ืจ, ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ืงืœืึทืคึผ ืžื™ื™ืŸ ืงืึธืคึผ ืงืขื’ืŸ ื“ื™ ื•ื•ืึทื ื˜ ืคึฟืึทืจ ืื™ืฆื˜, ืื•ืŸ ื•ื•ืขืœ ืงืœื™ื™ึทื‘ืŸ ืึท ืกื™ืกื˜ืขื ื•ื•ื• ื“ื™ ืึทืœื’ืขืจื™ื“ืžื™ืง ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืื•ืŸ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืจื•ืคื˜ ื–ืขื ืขืŸ ืžื™ื ื™ืžืึทืœ.

ื–ื™ื ื˜ ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ื‘ืขืกื˜ืขืจ ืคึผืึทืกืŸ ื“ื™ ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ, ื“ื™ ื‘ืจื™ืจื” ืื™ื– ื’ืขืคืืœืŸ ืื•ื™ืฃ RIDE ืงืึทื ื˜ืจืึทืงืฅ ืคื•ืŸ ื“ื™ ื•ื•ืึทื•ื•ืขืก ืคึผืœืึทื˜ืคืึธืจืžืข: ื–ื™ื™ ื–ืขื ืขืŸ ื ื™ืฉื˜ ื˜ื•ืจื™ื ื’ ื’ืึทื ืฅ, ืื•ืŸ ื–ื™ื™ืขืจ ืžืึทืงืกื™ืžื•ื ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืื™ื– ืึทืจื˜ืึทืคื™ืฉืึทืœื™ ืœื™ืžื™ื˜ืขื“.

ืื‘ืขืจ ืžื™ืจ ื•ื•ืขืœืŸ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื–ื™ื™ ืื•ื™ืกืฉืœื™ืกืœืขืš ืคื•ืŸ ื“ื™ ื˜ืขื›ื ื™ืฉ ื–ื™ื™ึทื˜.

ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ืึทืœืฅ, ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืกืคึผืขืฆื™ืขืœ ืื™ืŸ ืคืึธื“ืขืจื•ื ื’ ืคึฟืึทืจ ืงื™ื™ืŸ ืงืึทื ื˜ืจืึทืงืฅ: ืขืก ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืื•ืžืžืขื’ืœืขืš ืฆื• ืคืึทืจืจื™ื›ื˜ืŸ ืึท ืงืึธื ื˜ืจืึทืงื˜ ื˜ืขื•ืช ื ืึธืš ืขืก ืื™ื– ืœืึธื ื˜ืฉื˜.
ืื•ืŸ ื“ื™ ืคึผืจื™ื™ึทื– ืคื•ืŸ ืึทื–ืึท ืขืจืจืึธืจืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ื”ื•ื™ืš, ื•ื•ื™ื™ึทืœ ื’ืึทื ืฅ ื’ืจื•ื™ืก ืึทืžืึทื•ื ืฅ ืคื•ืŸ ื’ืขืœื˜ ื–ืขื ืขืŸ ืึธืคื˜ ืกื˜ืึธืจื“ ืื•ื™ืฃ ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ.

ืžื™ื™ึทืŸ ืกื™ืžื‘ืึธืœื™ืฉ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ PHP ืื•ืŸ Python, ืื•ืŸ ื ื™ืฆื˜ Z3Prover ืคึฟื•ืŸ Microsoft Research ืฆื• ืกืึธืœื•ื•ืข ื“ื™ ืจื™ื–ืึทืœื˜ื™ื ื’ ืกืžื˜ ืคืึธืจืžื•ืœืึทืก.

ืื™ืŸ ื–ื™ื™ึทืŸ ื”ืึทืจืฅ ืื™ื– ืึท ืฉื˜ืึทืจืง ืžืึทืœื˜ื™-ื˜ืจืึทื ืกืึทืงืฉืึทื ืึทืœ ื–ื•ื›ืŸ, ื•ื•ืึธืก
ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืกืึทืœื•ืฉืึทื ื– ืึธื“ืขืจ ื•ื•ืึทืœื ืขืจืึทื‘ื™ืœื™ื˜ื™ื–, ืืคื™ืœื• ืื•ื™ื‘ ืขืก ืจื™ืงื•ื•ื™ื™ืขืจื– ืคื™ืœืข ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–.
ืืคื™ืœื• ืžื™ื˜ื˜ืจื™ืœ, ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืžืขืจืกื˜ ืฉื˜ืึทืจืง ืกื™ืžื‘ืึธืœื™ืฉ ืคืจืึทืžืขื•ื•ืึธืจืงืก ืคึฟืึทืจ ื“ืขืจื’ื™ื™ื•ื ื’ ืขื˜ื”ืขืจืขื•ื ื•ื•ืึทืœื ืขืจืึทื‘ื™ืœื™ื˜ื™ื–, ื‘ืœื•ื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ ื“ืขื ืคื™ื™ื™ืงื™ื™ื˜ ืึท ื‘ื™ืกืœ ื—ื“ืฉื™ื ืฆื•ืจื™ืง.

ืื‘ืขืจ ืขืก ืื™ื– ื›ื“ืื™ ืฆื• ื‘ืืžืขืจืงืŸ ืึทื– ื™ื˜ืขืจ ืงืึทื ื˜ืจืึทืงืฅ ื–ืขื ืขืŸ ืžืขืจ ืงืึธืžืคึผืœื™ืฆื™ืจื˜ ืื•ืŸ ื˜ื•ืจื™ื ื’ ื’ืึทื ืฅ.

PHP ื˜ืจืึทื ืกืœื™ื™ืฅ ื“ื™ ืžืงื•ืจ ืงืึธื“ ืคื•ืŸ ื“ื™ RIDE ืงืœื•ื’ ืงืึธื ื˜ืจืึทืงื˜ ืื™ืŸ ืึท ืคึผื™ื˜ื”ืึธืŸ ืฉืจื™ืคื˜, ืื™ืŸ ื•ื•ืึธืก ื“ื™ ืคึผืจืึธื’ืจืึทื ืื™ื– ื“ืขืจืœืื ื’ื˜ ื•ื•ื™ ืึท Z3 SMT-ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืกื™ืกื˜ืขื ืคื•ืŸ ืงืึธื ื˜ืจืึทืงื˜ ืฉื˜ืึทื˜ืŸ ืื•ืŸ ื˜ื ืึธื™ื ืคึฟืึทืจ ื–ื™ื™ืขืจ ื˜ืจืึทื ื–ื™ืฉืึทื ื–:

ืฉืึทืคึฟืŸ ืึท ืคืึธืจืžืึทืœ ื•ื•ืขืจืึทืคืึทืงื™ื™ืฉืึทืŸ ืกื™ืกื˜ืขื ืคึฟื•ืŸ ืงืจืึทืฆืŸ. ื˜ื™ื™ืœ 1: ื›ืึทืจืึทืงื˜ืขืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืื™ืŸ ืคืคึผ ืื•ืŸ ืคึผื™ื˜ื”ืึธืŸ

ืื™ืฆื˜ ืื™ืš ื•ื•ืขืœ ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื•ื•ืึธืก ืื™ื– ื’ืขืฉืขืขื ื™ืฉ ืื™ื ืขื•ื•ื™ื™ื ื™ืง ืื™ืŸ ืžืขืจ ื“ืขื˜ืึทืœ.

ืึธื‘ืขืจ ืขืจืฉื˜ืขืจ, ืึท ื‘ื™ืกืœ ื•ื•ืขืจื˜ืขืจ ื•ื•ืขื’ืŸ ื“ื™ RIDE ืงืœื•ื’ ืงืึธื ื˜ืจืึทืงื˜ ืฉืคึผืจืึทืš.

ืขืก ืื™ื– ืึท ืคืึทื ื’ืงืฉืึทื ืึทืœ ืื•ืŸ ืื•ื™ืกื“ืจื•ืง-ื‘ืื–ื™ืจื˜ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ื•ื•ืึธืก ืื™ื– ืคื•ื™ืœ ื“ื•ืจืš ืคึผืœืึทืŸ.
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 ื“ืขืžืึธืœื˜ ืงืึทื ื•ื•ืขืจืฅ ื–ื™ื™ ืื™ืŸ ืึท Z3Prover SMT-ืงืึทืžืคึผืึทื˜ืึทื‘ืึทืœ ืกื™ืกื˜ืขื ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ.
ื“ื™ ื“ืึทื˜ืŸ ื–ืขื ืขืŸ ืืœื ื’ืขื•ื•ื™ืงืœื˜ ืื™ืŸ ืึท ืฉืœื™ื™ืฃ, ื•ื•ื• ืกื˜ืึธืจื™ื“ื–ืฉ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื‘ืึทืงื•ืžืขืŸ ืื™ื ื“ืขืงืก ืื™ืš, ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืื™ื ื“ืขืงืก 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] )  

ื“ื™ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ ื–ืขื ืขืŸ ืื•ื™ืกื’ืขืฉื˜ืขืœื˜ ืื•ืŸ ื™ื ืกืขืจื˜ืึทื“ ืื™ืŸ ืึท ืฉืจื™ืคื˜ ืžื•ืกื˜ืขืจ ื“ื™ื–ื™ื™ื ื“ ืฆื• ื‘ืึทืฉืจื™ื™ึทื‘ืŸ ื“ื™ ืกืžื˜ ืกื™ืกื˜ืขื ืื™ืŸ ืคึผื™ื˜ื”ืึธืŸ.

ืœื™ื™ื“ื™ืง ืžื•ืกื˜ืขืจ


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 ื•ื•ืขื˜ ืงื•ืงืŸ ืคึฟืึทืจ ืคึผื•ื ืงื˜ ืึทื–ืึท ืกืขื˜ ืคื•ืŸ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ ื•ื•ืึธืก ืœืขืกืึธืฃ ืœืึธื–ืŸ ื’ืขืœื˜ ืฆื• ื–ื™ื™ืŸ ื•ื•ื™ื˜ื“ืจืึธืŸ ืคื•ืŸ ื“ื™ ืงืึธื ื˜ืจืึทืงื˜.

ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืžื™ืจ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื‘ืึทืงื•ืžืขืŸ ืึท ื’ืึธืจ ืคืึทื ื’ืงืฉืึทื ืึทืœ ืกืžื˜ ืžืึธื“ืขืœ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืงืึธื ื˜ืจืึทืงื˜.
ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– ืขืก ืื™ื– ื–ื™ื™ืขืจ ืขื ืœืขืš ืฆื• ื“ื™ ืžืึธื“ืขืœ ืคื•ืŸ ืžื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ืึทืจื˜ื™ืงืœ, ื•ื•ืึธืก ืื™ืš ืฆื•ื ื•ื™ืคื’ืขืฉื˜ืขืœื˜ ืžืึทื ื™ื•ืึทืœื™.

ื’ืขืขื ื“ื™ืงื˜ ืžื•ืกื˜ืขืจ


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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’