Kev pov thawj raug cai yog kev txheeb xyuas ntawm ib qho kev pab cuam lossis algorithm siv lwm qhov.
Qhov no yog ib txoj hauv kev muaj zog tshaj plaws uas tso cai rau koj los nrhiav txhua qhov tsis zoo hauv qhov program lossis ua pov thawj tias lawv tsis muaj.
Cov lus piav qhia ntxaws ntxiv ntawm kev txheeb xyuas qhov tseeb tuaj yeem pom hauv qhov piv txwv ntawm kev daws qhov teeb meem ntawm
Hauv tsab xov xwm no kuv txav los ntawm kev txheeb xyuas cov teeb meem rau cov kev pab cuam thiab piav qhia yuav ua li cas
yuav ua li cas lawv yuav tsum tau hloov dua siab tshiab rau hauv txoj cai txoj cai txiav.
Ua li no, kuv tau sau kuv tus kheej analogue ntawm lub tshuab virtual, siv cov ntsiab lus cim.
Nws parses qhov program code thiab txhais nws mus rau hauv ib qho system ntawm kev sib npaug (SMT), uas tuaj yeem daws tau qhov programmatically.
Txij li cov ntaub ntawv hais txog kev suav cov cim tau nthuav tawm hauv Is Taws Nem es fragmentarily,
Kuv yuav piav luv luv tias nws yog dab tsi.
Symbolic suav yog ib txoj hauv kev ua kom tiav ib qho kev pab cuam ntawm ntau cov ntaub ntawv thiab yog cov cuab yeej tseem ceeb rau kev txheeb xyuas qhov program.
Piv txwv li, peb tuaj yeem teeb tsa cov kev xav tau uas qhov kev sib cav thawj zaug tuaj yeem coj qhov txiaj ntsig zoo, qhov tsis zoo thib ob, qhov thib peb xoom, thiab cov lus sib cav, piv txwv li, 42.
Kev suav cov cim hauv ib qho kev khiav yuav muab cov lus teb rau peb seb puas tuaj yeem ua tau rau peb kom tau txais cov txiaj ntsig xav tau thiab ua piv txwv ntawm cov txheej txheem ntawm cov khoom nkag. Los yog pov thawj tias tsis muaj qhov tsis zoo li no.
Ntxiv mus, peb tuaj yeem teeb tsa cov lus sib cav rau txhua qhov ua tau, thiab xaiv tsuas yog cov khoom tso tawm, piv txwv li, tus thawj tswj hwm tus password.
Hauv qhov no, peb yuav pom tag nrho cov kev pab cuam qhov tsis zoo lossis tau txais pov thawj tias tus thawj tswj hwm tus password muaj kev nyab xeeb.
Nws tuaj yeem raug sau tseg tias qhov kev ua tiav classical ntawm ib qho kev pab cuam nrog cov ntaub ntawv tshwj xeeb yog qhov tshwj xeeb ntawm kev ua tiav cov cim.
Yog li ntawd, kuv tus cwj pwm VM tuaj yeem ua haujlwm hauv emulation hom ntawm tus qauv virtual tshuab.
Nyob rau hauv cov lus rau tsab xov xwm dhau los ib qho tuaj yeem nrhiav kev thuam ncaj ncees ntawm kev lees paub tseeb nrog kev sib tham txog nws qhov tsis muaj zog.
Cov teeb meem tseem ceeb yog:
- Combinatorial explosion, txij li thaum cov ntaub ntawv pov thawj thaum kawg los rau P = NP
- Kev hu xov tooj mus rau cov ntaub ntawv kaw lus, tes hauj lwm thiab lwm qhov chaw cia sab nraud yog qhov nyuaj dua los txheeb xyuas
- Kab laum nyob rau hauv specification, thaum tus neeg muas zaub los yog programmer npaj ib yam, tab sis tsis tau piav qhia kom meej txaus nyob rau hauv kev specification.
Yog li ntawd, qhov kev zov me nyuam yuav raug txheeb xyuas thiab ua raws li qhov tshwj xeeb, tab sis yuav ua ib yam dab tsi txawv kiag li ntawm qhov uas cov neeg tsim khoom xav tau los ntawm nws.
Txij li thaum nyob rau hauv tsab xov xwm no kuv tsuas yog xav txog kev siv cov ntaub ntawv pov thawj hauv kev xyaum, kuv yuav tsis bang kuv lub taub hau tiv thaiv phab ntsa rau tam sim no, thiab yuav xaiv ib qho system uas algorithmic complexity thiab tus xov tooj ntawm sab nraud hu yog tsawg.
Txij li cov ntawv cog lus ntse zoo tshaj plaws haum rau cov kev xav tau no, qhov kev xaiv poob rau RIDE cov ntawv cog lus los ntawm Waves platform: lawv tsis Turing ua tiav, thiab lawv qhov siab tshaj plaws yog kev txwv tsis pub muaj.
Tab sis peb yuav txiav txim siab lawv tsuas yog los ntawm kev sab laj.
Ntxiv rau txhua yam, kev pov thawj raug cai yuav yog qhov tshwj xeeb tshaj yog xav tau rau txhua daim ntawv cog lus: nws feem ntau tsis tuaj yeem kho qhov kev cog lus yuam kev tom qab nws tau pib.
Thiab tus nqi ntawm cov kev ua yuam kev no tuaj yeem siab heev, vim tias cov nyiaj ntau heev feem ntau khaws cia rau ntawm daim ntawv cog lus ntse.
Kuv lub tshuab virtual cim tau sau rau hauv PHP thiab Python, thiab siv Z3Prover los ntawm Microsoft Kev Tshawb Fawb los daws qhov tshwm sim SMT qauv.
Nyob rau hauv nws cov tub ntxhais yog ib tug haib multi-transactional nrhiav, uas
tso cai rau koj los nrhiav kev daws teeb meem lossis qhov tsis zoo, txawm tias nws xav tau ntau yam kev hloov pauv.
Txawm tias lub
Tab sis nws tsim nyog sau cia tias daim ntawv cog lus ether yog qhov nyuaj dua thiab Turing ua tiav.
PHP txhais cov cai ntawm RIDE ntse daim ntawv cog lus rau hauv daim ntawv python, nyob rau hauv uas qhov kev pab cuam tau nthuav tawm raws li Z3 SMT-tshaj qhov system ntawm cov ntawv cog lus thiab cov xwm txheej rau lawv cov kev hloov pauv:
Tam sim no kuv yuav piav qhia txog dab tsi tshwm sim sab hauv kom ntxaws ntxiv.
Tab sis ua ntej, ob peb lo lus hais txog RIDE cov lus cog lus ntse.
Nws yog ib qho kev ua haujlwm thiab kev qhia-raws li programming lus uas yog tub nkeeg los ntawm kev tsim.
RIDE khiav hauv kev sib cais hauv blockchain thiab tuaj yeem khaws thiab sau cov ntaub ntawv los ntawm kev khaws cia txuas rau tus neeg siv lub hnab nyiaj.
Koj tuaj yeem xa daim ntawv cog lus RIDE rau txhua lub hnab nyiaj, thiab qhov tshwm sim ntawm kev ua tiav tsuas yog TRUE lossis FALSE.
TRUE txhais tau hais tias daim ntawv cog lus ntse tso cai rau kev sib pauv, thiab FALSE txhais tau tias txwv tsis pub nws.
Ib qho piv txwv yooj yim: ib tsab ntawv tuaj yeem txwv tsis pub hloov pauv yog tias lub hnab nyiaj tshuav tsawg dua 100.
Ua piv txwv, kuv yuav coj tib yam hma, tshis, thiab Cabbage, tab sis twb tau nthuav tawm hauv daim ntawv cog lus ntse.
Tus neeg siv yuav tsis tuaj yeem thim nyiaj los ntawm lub hnab nyiaj uas daim ntawv cog lus tau xa mus txog thaum nws tau xa txhua tus mus rau sab nraud.
#ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°
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 thawj zaug rho tawm txhua qhov sib txawv los ntawm daim ntawv cog lus ntse nyob rau hauv daim ntawv ntawm lawv cov yuam sij thiab qhov sib thooj Boolean qhia sib txawv.
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 ces hloov lawv mus rau hauv Z3Prover SMT-tshaj kab lus piav qhia hauv Python.
Cov ntaub ntawv tau muab qhwv rau hauv lub voj, qhov chaw khaws cia hloov pauv tau txais index i, hloov pauv hloov pauv index i + 1, thiab cov hloov pauv nrog cov kab lus teeb tsa cov cai hloov pauv ntawm lub xeev dhau los mus rau tom ntej.
Qhov no yog lub plawv ntawm peb lub tshuab virtual, uas muab ntau lub tshuab tshawb nrhiav.
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] )
Cov xwm txheej raug txheeb xyuas thiab muab tso rau hauv daim ntawv qauv tsim los piav txog SMT system hauv Python.
Cov qauv dawb
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()
Rau lub xeev kawg nyob rau hauv tag nrho cov saw, cov kev cai uas tau teev tseg nyob rau hauv cov kev hloov pauv seem yog siv.
Qhov no txhais tau hais tias Z3Prover yuav nrhiav qhov tseeb xws li cov xwm txheej uas yuav tso cai rau cov nyiaj rho tawm ntawm daim ntawv cog lus.
Raws li qhov tshwm sim, peb tau txais qhov ua tau zoo SMT qauv ntawm peb daim ntawv cog lus.
Koj tuaj yeem pom tias nws zoo ib yam li tus qauv los ntawm kuv tsab xov xwm dhau los, uas kuv tau muab sau ua ke.
Ua tiav template
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()
Tom qab tso tawm, Z3Prover daws cov ntawv cog lus ntse thiab muab peb cov saw hlau ntawm kev lag luam uas yuav tso cai rau peb rho nyiaj:
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
Ntxiv nrog rau daim ntawv cog lus ferry, koj tuaj yeem sim nrog koj tus kheej cov ntawv cog lus lossis sim ua piv txwv yooj yim no, uas tau daws hauv 2 kev lag luam.
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
}
Txij li qhov no yog thawj version, cov syntax tsawg heev thiab tej zaum yuav muaj kab.
Hauv cov ntawv hauv qab no, kuv npaj yuav npog qhov kev txhim kho ntxiv ntawm VM, thiab qhia seb koj tuaj yeem tsim cov ntawv cog lus ntse uas tau lees paub nrog nws cov kev pab, thiab tsis yog daws lawv xwb.
Lub cim virtual tshuab muaj nyob ntawm
Tom qab muab lub hauv paus code ntawm lub cim VM nyob rau hauv kev txiav txim thiab ntxiv cov lus nyob rau ntawd, kuv npaj yuav muab tso rau hauv GitHub rau pub dawb.
Tau qhov twg los: www.hab.com