แคแแ แแแแฃแ แ แแแแแแแฌแแแแ แแ แแก แแ แแ แแ แแแ แแแแก แแ แแแแแ แแแแแก แแแแแแแฌแแแแ แแแแ แแก แแแแแงแแแแแแ.
แแก แแ แแก แแ แ-แแ แแ แงแแแแแแ แซแแแแ แ แแแแแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแ แงแแแแ แแแฃแชแแแแแแ แแ แแแ แแแแจแ แแ แแแแแขแแแชแแ, แ แแ แแกแแแ แแ แแ แกแแแแแก.
แคแแ แแแแฃแ แ แแแแแแแฌแแแแแก แฃแคแ แ แแแขแแแฃแ แ แแฆแฌแแ แ แจแแแแซแแแแ แแฎแแแแ แแ แแแแแแแก แแแแแญแ แแก แแแแแแแแจแ
แแ แกแขแแขแแแจแ แแ แแแแแแแแแแ แแ แแแแแแแแแก แแคแแชแแแแฃแ แ แแแแแแแฌแแแแแแแ แแ แแแ แแแแแแ แแ แแฆแแฌแแ แ แแแแ
แ แแแแ แจแแแซแแแแ แแกแแแ แแแขแแแแขแฃแ แแ แแแ แแแแฅแแแแก แคแแ แแแแฃแ แ แฌแแกแแแแก แกแแกแขแแแแแแ.
แแแแกแแแแแก แแ แแแแฌแแ แ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แกแแแฃแแแ แ แแแแแแแ แกแแแแแแฃแ แ แแ แแแชแแแแแแก แแแแแงแแแแแแ.
แแก แแแแแแแแแแก แแ แแแ แแแแก แแแแก แแ แแแ แแแแแก แแแก แแแแขแแแแแแแ แกแแกแขแแแแ (SMT), แ แแแแแก แแแแฎแกแแ แฃแแแ แจแแกแแซแแแแแแแ แแ แแแ แแแฃแแแ.
แแแแแแแแ แกแแแแแแฃแ แ แแแแแแแแแแแก แจแแกแแฎแแ แแแคแแ แแแชแแ แแแขแแ แแแขแจแ แกแแแแแแ แคแ แแแแแแขแฃแแแ แแ แแก แฌแแ แแแแแแแแแ,
แแแแแแ แแฆแแฌแแ แ แ แแ แแก.
แกแแแแแแฃแ แ แแแแแแแแ แแ แแก แแ แแแ แแแแก แแ แแแ แแฃแแ แแแแฎแแ แชแแแแแแแก แกแแจแฃแแแแแ แแแแแชแแแแ แคแแ แแ แแแแแแแแแแ แแ แแ แแก แแ แแแ แแแแก แแคแแชแแแแฃแ แ แแแแแแแฌแแแแแก แแแแแแ แ แแแกแขแ แฃแแแแขแ.
แแแแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแงแแแแ แจแแงแแแแแก แแแ แแแแแ, แกแแแแช แแแ แแแ แแ แแฃแแแแขแก แจแแฃแซแแแ แแแแฆแแก แแแแแกแแแแ แ แแแแแแแแ แแแแจแแแแแแแ, แแแแ แ แฃแแ แงแแคแแแ, แแแกแแแ แแฃแแ แแ แแแแแแแแแแ แแ แแฃแแแแขแ, แแแแแแแแแ, 42.
แกแแแแแแฃแ แ แแแแแแแแแแ แแ แ แแแ แกแแแฅแขแแแแจแ แแแแแชแแแก แแแกแฃแฎแก, แจแแกแแซแแแแแแแ แแฃ แแ แ แฉแแแแแแแก แกแแกแฃแ แแแแ แจแแแแแแก แแแฆแแแ แแ แแกแแแ แจแแงแแแแแก แแแ แแแแขแ แแแแก แแแแ แแแแก แแแแแแแแ. แแ แแขแแแชแแแฃแแแแ แแแแกแ, แ แแ แแกแแแ แแแ แแแแขแ แแแ แแ แแ แกแแแแแก.
แฃแคแ แ แแแขแแช, แฉแแแ แจแแแแแซแแแ แแแแแงแแแแ แจแแงแแแแแก แแ แแฃแแแแขแแแ แงแแแแ แจแแกแแซแแแแ แแ แจแแแแ แฉแแแ แแฎแแแแ แแแแแแแแแแ แแ แแฃแแแแขแแแ, แแแแแแแแแ, แแแแแแแกแขแ แแขแแ แแก แแแ แแแ.
แแ แจแแแแฎแแแแแจแ, แฉแแแ แแแแแแแ แแ แแแ แแแแก แงแแแแ แแแฃแชแแแแแแแก แแ แแแแแฆแแแ แแขแแแชแแแฃแแแแแก, แ แแ แแแแแแแกแขแ แแขแแ แแก แแแ แแแ แฃแกแแคแ แแฎแแ.
แจแแแซแแแแ แแฆแแแแจแแแก, แ แแ แแ แแแ แแแแก แแแแกแแแฃแ แ แจแแกแ แฃแแแแ แแแแแ แแขแฃแแ แจแแงแแแแแก แแแแแชแแแแแแ แแ แแก แกแแแแแแฃแ แ แจแแกแ แฃแแแแแก แแแแกแแแฃแแ แแแฃแแ แจแแแแฎแแแแ.
แแแแขแแ, แฉแแแก แแแ แกแแแแ VM-แก แจแแฃแซแแแ แแแฃแจแแแก แกแขแแแแแ แขแฃแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แแแฃแแแชแแแก แ แแแแแจแ.
แฌแแแ แกแขแแขแแแก แแแแแแขแแ แแแจแ แจแแแแซแแแแ แแฎแแแแ แแคแแชแแแแฃแ แ แแแแแแแฌแแแแแก แกแแแแ แแแแแแ แแ แแขแแแ แแแกแ แกแแกแฃแกแขแแแแแก แแแแฎแแแแแ.
แซแแ แแแแแ แแ แแแแแแแแแ:
- แแแแแแแแขแแ แฃแแ แแคแแแฅแแแ, แแแแแแแแ แคแแ แแแแฃแ แ แแแแแแแฌแแแแ แกแแแแแแแ แแชแแ แแแแ P=NP-แแแ
- แแแ แแแแก แแแแฃแจแแแแแ แคแแแแฃแ แกแแกแขแแแแจแ, แฅแกแแแแแจแ แแ แกแฎแแ แแแ แ แกแแชแแแแแจแ แฃแคแ แ แ แแฃแแแ แแแแแแแฌแแแแ
- แฎแแ แแแแแแ แกแแแชแแคแแแแชแแแจแ, แ แแแแกแแช แแแแฎแแแ แแแแแแ แแ แแ แแแ แแแแกแขแแ แแแแแแ แแฎแ แแ แแ แ แแ, แแแแ แแ แกแแแแแ แแกแแ แแฃแกแขแแ แแ แแฆแฌแแ แก แแแก แขแแฅแแแแฃแ แกแแแชแแคแแแแชแแแจแ.
แจแแแแแแ, แแ แแแ แแแ แแแแแแแฌแแแแฃแแ แแฅแแแแ แแ แจแแแกแแแแแแแ แกแแแชแแคแแแแชแแแก, แแแแ แแ แแแแแแแแแก แ แแฆแแช แกแ แฃแแแแ แแแแกแฎแแแแแแฃแแก, แ แแกแแช แจแแแฅแแแแแแแ แแแกแแแ แแแแแแแแแ.
แแแแแแแแ แแ แกแขแแขแแแจแ แแ แซแแ แแแแแแ แแแแแแฎแแแแ แแ แแฅแขแแแแจแ แคแแ แแแแฃแ แ แแแแแแแฌแแแแแก แแแแแงแแแแแแก, แแ แแ แแแกแแแแก แแแแก แแแแแแก แแ แแแแแแแแฃแแแ แแ แแแแ แฉแแ แกแแกแขแแแแก, แกแแแแช แแแแแ แแแแฃแแ แกแแ แแฃแแ แแ แแแ แ แแแ แแแแก แ แแแแแแแแ แแแแแแแแฃแ แแ.
แแแแแแแแ แญแแแแแแ แแแแขแ แแฅแขแแแ แกแแฃแแแแแกแแ แแ แแแแ แแ แแแแฎแแแแแแก, แแ แฉแแแแแ แแแแชแ RIDE แแแแขแ แแฅแขแแแแ Waves แแแแขแคแแ แแแแแ: แแกแแแ แแ แแ แแแ แขแฃแ แแแแ แแแกแ แฃแแแแฃแแ แแ แแแแ แแแฅแกแแแแแฃแ แ แกแแ แแฃแแ แฎแแแแแแฃแ แแ แจแแแฆแฃแแฃแแแ.
แแแแ แแ แฉแแแ แแแแแแฎแแแแแ แแแ แแฅแกแแแฃแแแฃแ แแ แขแแฅแแแแฃแ แ แแฎแ แแแแ.
แงแแแแแคแ แแก แแแ แแ, แคแแ แแแแฃแ แ แแแแแแแฌแแแแ แแแแกแแแฃแแ แแแแ แแแแฎแแแแแแ แแฅแแแแ แแแแแกแแแแ แแแแขแ แแฅแขแแ: แ แแแแ แช แฌแแกแ, แจแแฃแซแแแแแแแ แฎแแแจแแแ แฃแแแแแก แจแแชแแแแแก แแแแแกแฌแแ แแแ แแแกแ แแแจแแแแแก แจแแแแแ.
แแ แแกแแแ แจแแชแแแแแแแก แฆแแ แแแฃแแแแ แจแแแซแแแแ แแงแแก แซแแแแแ แแแฆแแแ, แ แแแแแ แกแแแแแแ แแแแ แแแแฎแแแ แฎแจแแ แแ แแแแฎแแแ แญแแแแแ แแแแขแ แแฅแขแแแแ.
แฉแแแ แกแแแแแแฃแ แ แแแ แขแฃแแแฃแ แ แแแแฅแแแ แแแฌแแ แแแแ PHP-แจแ แแ Python-แจแ แแ แแงแแแแแก Z3Prover-แก Microsoft Research-แแกแแแ แแแฆแแแฃแแ SMT แคแแ แแฃแแแแแก แแแแแกแแญแ แแแแ.
แแแก แแแ แแแจแ แแ แแก แแซแแแแ แ แแ แแแแแขแ แแแแแฅแชแแแก แซแแแแ, แ แแแแแแช
แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแ แแแแแฌแงแแแขแแแแแแแ แแ แแแฃแชแแแแแแ, แแแจแแแแช แแ, แแฃ แแก แแแแแฎแแแก แแแแ แขแ แแแแแฅแชแแแก.
แแแจแแแแช แแ,
แแแแ แแ แแฆแกแแแแจแแแแแ, แ แแ แแแแ แฃแแ แแแแขแ แแฅแขแแแ แฃแคแ แ แ แแฃแแแ แแ แขแฃแ แแแแแก แกแ แฃแแ.
PHP แแแ แแแแแก RIDE แญแแแแแแ แแแแขแ แแฅแขแแก แกแแฌแงแแก แแแแก แแแแแแแก แกแแ แแแขแจแ, แ แแแแแจแแช แแ แแแ แแแ แฌแแ แแแแแแแแแแ แ แแแแ แช Z3 SMT-แแแ แแแแกแแแแแ แฎแแแจแแแ แฃแแแแแก แแแแแแแ แแแแแแแกแ แแ แแแแ แแแแแกแแแแก แแแ แแแแแแก แกแแฎแแ:
แแฎแแ แฃแคแ แ แแแขแแแฃแ แแ แแฆแแฌแแ แ แ แฎแแแแ แจแแแแแ.
แแแแ แแ แแแ แแแแ, แ แแแแแแแแ แกแแขแงแแ RIDE แญแแแแแแ แแแแขแ แแฅแขแแก แแแแก แจแแกแแฎแแ.
แแก แแ แแก แคแฃแแฅแชแแฃแ แ แแ แแฅแกแแ แแกแแแแ แแแคแฃแซแแแแฃแแ แแ แแแ แแแแ แแแแก แแแ, แ แแแแแแช แแแแแแแแ แแแ แแแชแแ.
RIDE แแฃแจแแแแก แแแแแแ แแแฃแแแ แแแแแฉแแแแจแ แแ แจแแฃแซแแแ แแแคแแ แแแชแแแก แแแซแแแแ แแ แฉแแฌแแ แ แแแแฎแแแ แแแแแก แกแแคแฃแแแกแแแ แแแแแแจแแ แแแฃแแ แกแแชแแแแแแ.
แแฅแแแ แจแแแแซแแแแ แแแฃแ แแแ RIDE แแแแขแ แแฅแขแ แแแแแแฃแ แกแแคแฃแแแแ แแ แจแแกแ แฃแแแแแก แจแแแแแ แแฅแแแแ แแฎแแแแ TRUE แแ FALSE.
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-แแแ แแแแกแแแแแ แกแแกแขแแแแก แแฆแฌแแ แแแแแแจแ 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] )
แแแ แแแแแ แแแแแแแแฃแแแ แแ แฉแแกแแฃแแแ แกแแ แแแขแแก แจแแแแแแจแ, แ แแแแแแช แจแแฅแแแแแแ Python-แจแ 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-แแก แจแแแแแแแ แแแแแแแแ แแแ แแ แแแฉแแแแ, แแฃ แ แแแแ แจแแแแซแแแแ แจแแฅแแแแ แแคแแชแแแแฃแ แแ แแแแแฌแแแแฃแแ แญแแแแแแ แแแแขแ แแฅแขแแแ แแแกแ แแแฎแแแ แแแแ แแ แแ แ แแฎแแแแ แแแแ แแแแแญแ แ.
แแแ แกแแแแแแก แแแ แขแฃแแแฃแ แ แแแแฅแแแ แฎแแแแแกแแฌแแแแแแ
แกแแแแแแฃแ แ VM-แแก แกแแฌแงแแก แแแแแก แแแฌแแกแ แแแแแแก แแ แแฅ แแแแแแขแแ แแแแก แแแแแขแแแแก แจแแแแแ, แแแแแแแ แแแก แแแแแแแกแแแแก GitHub-แแ แฃแคแแกแ แฌแแแแแแกแแแแก.
แฌแงแแ แ: www.habr.com