Kupanga dongosolo lotsimikizira kuyambira pachiyambi. Gawo 1: Character Virtual Machine mu PHP ndi Python

Kutsimikizira kovomerezeka ndikutsimikizira pulogalamu imodzi kapena algorithm pogwiritsa ntchito ina.

Iyi ndi imodzi mwa njira zamphamvu kwambiri zomwe zimakupatsani mwayi wopeza zofooka zonse mu pulogalamu kapena kutsimikizira kuti kulibe.

Kufotokozera mwatsatanetsatane za kutsimikizika kovomerezeka kungawonekere mu chitsanzo cha kuthetsa vuto la Nkhandwe, Mbuzi, ndi Kabichi m'nkhani yanga yapita.

M'nkhaniyi ndimachoka kutsimikizira zovuta kupita ku mapulogalamu ndikufotokozera momwe angachitire
angasinthidwe bwanji kukhala machitidwe ovomerezeka okha.

Kuti ndichite izi, ndinalemba analogue yanga ya makina enieni, pogwiritsa ntchito mfundo zophiphiritsira.

Imagawa khodi ya pulogalamuyo ndikuimasulira kukhala system of equations (SMT), yomwe imatha kuthetsedwa kale mwadongosolo.

Popeza zambiri zamawerengedwe ophiphiritsa zimaperekedwa pa intaneti pang'onopang'ono,
Ndifotokoza mwachidule chomwe chiri.

Kuwerengera kofananira ndi njira yochitira nthawi imodzi pulogalamu pamitundu yambiri ndipo ndiye chida chachikulu chotsimikizira pulogalamu yovomerezeka.

Mwachitsanzo, titha kukhazikitsa mikhalidwe yolowera pomwe mkangano woyamba ukhoza kutenga zabwino zilizonse, wachiwiri woyipa, wachitatu ziro, ndi mkangano wotuluka, mwachitsanzo, 42.

Mawerengedwe ophiphiritsa pakuthamanga kumodzi adzatipatsa yankho loti ndizotheka kuti tipeze zotsatira zomwe tikufuna komanso chitsanzo cha magawo olowetsamo. Kapena umboni kuti palibe magawo oterowo.

Komanso, titha kuyika mfundo zolowera kwa onse omwe tingathe, ndikusankha zotuluka zokha, mwachitsanzo, mawu achinsinsi a administrator.

Pankhaniyi, tipeza zovuta zonse za pulogalamuyo kapena tipeze umboni kuti mawu achinsinsi a woyang'anira ndi otetezeka.

ZingadziΕ΅ike kuti kuchitidwa kwachikale kwa pulogalamu yokhala ndi deta yeniyeni yolowera ndizochitika zapadera za kuphedwa kophiphiritsira.

Chifukwa chake, mawonekedwe anga a VM amathanso kugwira ntchito motsanzira makina okhazikika.

Mu ndemanga ku nkhani yapitayi munthu angapeze kutsutsidwa koyenera kwa kutsimikiziridwa kovomerezeka ndi kukambirana za zofooka zake.

Mavuto akulu ndi awa:

  1. Kuphulika kophatikizana, popeza kutsimikizira kovomerezeka kumatsikira ku P=NP
  2. Kukonza mafoni kumafayilo, ma network ndi malo ena osungira kunja ndikovuta kutsimikizira
  3. Nsikidzi mu ndondomeko, pamene kasitomala kapena mapulogalamu ankafuna chinthu chimodzi, koma sanafotokoze molondola mokwanira mu specifications.

Zotsatira zake, pulogalamuyi idzatsimikiziridwa ndikutsatira ndondomeko, koma idzachita zosiyana kwambiri ndi zomwe opanga amayembekezera kuchokera.

Popeza m'nkhaniyi ndikuganizira makamaka kugwiritsa ntchito chitsimikiziro chovomerezeka pochita, sindidzagwedeza mutu wanga pakhoma pakalipano, ndipo ndidzasankha dongosolo limene zovuta za algorithmic ndi chiwerengero cha mafoni akunja ndi ochepa.

Popeza kuti makontrakitala anzeru amakwaniritsa zofunikira izi, chisankhocho chinagwera pamakontrakitala a RIDE kuchokera pa nsanja ya Waves: sali Turing wathunthu, ndipo zovuta zawo zazikulu ndizochepa.

Koma tidzawalingalira mwapadera kuchokera kumbali yaukadaulo.

Kuphatikiza pa chilichonse, chitsimikiziro chovomerezeka chidzakhala chofunikira kwambiri pamakontrakitala aliwonse: nthawi zambiri sizingatheke kukonza cholakwika chamgwirizano pambuyo pokhazikitsidwa.
Ndipo mtengo wa zolakwika zotere ukhoza kukhala wokwera kwambiri, chifukwa ndalama zambiri zimasungidwa pamapangano anzeru.

Makina anga ophiphiritsa amalembedwa mu PHP ndi Python, ndipo amagwiritsa ntchito Z3Prover kuchokera ku Microsoft Research kuti athetse zotsatira za SMT.

Pakatikati pake pali kusaka kwamphamvu kwamitundu yambiri, komwe
amakulolani kuti mupeze mayankho kapena zofooka, ngakhale zitafunika kuchita zambiri.
Ngakhale Mythril, imodzi mwazinthu zophiphiritsira zamphamvu kwambiri zopezera zovuta za Ethereum, zinangowonjezera lusoli miyezi ingapo yapitayo.

Koma ndizoyenera kudziwa kuti mapangano a ether ndi ovuta kwambiri ndipo Turing amamaliza.

PHP imamasulira code source ya RIDE smart contract kukhala python script, momwe pulogalamuyo imawonetsedwa ngati dongosolo logwirizana ndi Z3 SMT la mayiko a mgwirizano ndi mikhalidwe ya kusintha kwawo:

Kupanga dongosolo lotsimikizira kuyambira pachiyambi. Gawo 1: Character Virtual Machine mu PHP ndi Python

Tsopano ndifotokoza zomwe zikuchitika mkatimo mwatsatanetsatane.

Koma choyamba, mawu ochepa okhudza chilankhulo chanzeru cha RIDE.

Ndichilankhulidwe chogwiritsa ntchito komanso chofotokozera chomwe chimakhala chaulesi popanga.
RIDE imayenda payokha mkati mwa blockchain ndipo imatha kutenganso ndikulemba zambiri kuchokera pazosungira zomwe zimalumikizidwa ndi chikwama cha wogwiritsa ntchito.

Mutha kulumikiza mgwirizano wa RIDE pachikwama chilichonse, ndipo zotsatira za kuphedwa zidzakhala ZOONA kapena ZABODZA.

TRUE amatanthauza kuti mgwirizano wanzeru umalola kuti achite, ndipo FALSE amatanthauza kuti imaletsa.
Chitsanzo chosavuta: script ikhoza kuletsa kusamutsa ngati ndalama za chikwama zili zosakwana 100.

Mwachitsanzo, nditenga Nkhandwe, Mbuzi, ndi Kabichi zomwezo, koma zaperekedwa kale ngati mgwirizano wanzeru.

Wogwiritsa ntchitoyo sangathe kuchotsa ndalama m'chikwama chomwe mgwirizanowu ukugwiritsidwa ntchito mpaka atatumiza aliyense kumbali ina.

#ИзвлСкаСм ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°
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 poyamba imatulutsa zosintha zonse kuchokera ku mgwirizano wanzeru mu mawonekedwe a makiyi awo ndi kusinthasintha kwa Boolean expression.

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 ndiye imawasintha kukhala mafotokozedwe a Z3Prover SMT-compatible system mu Python.
Detayo imakulungidwa mu loop, kumene zosungirako zosungiramo zosungiramo zimalandira index i, zosintha zosinthika index i + 1, ndipo zosinthika ndi mawu zimayika malamulo osinthira kuchoka ku dziko lapitalo kupita ku lotsatira.

Uwu ndiye mtima wa makina athu enieni, omwe amapereka makina osakira amitundu yambiri.

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

Mikhalidwe imasanjidwa ndikuyikidwa mu template yopangidwa kuti ifotokoze dongosolo la SMT mu Python.

Template yopanda kanthu


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


Kwa boma lomaliza mu unyolo wonse, malamulo omwe akufotokozedwa mu gawo la transaction transaction amagwiritsidwa ntchito.

Izi zikutanthauza kuti Z3Prover idzayang'ana momwe zinthu ziliri zomwe zidzalola kuti ndalama zichotsedwe mu mgwirizano.

Zotsatira zake, timangolandira basi mtundu wa SMT womwe umagwira ntchito bwino pa mgwirizano wathu.
Mutha kuwona kuti ndizofanana kwambiri ndi chitsanzo cha nkhani yanga yapitayi, yomwe ndidalemba pamanja.

Template yomalizidwa


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


Pambuyo poyambitsa, Z3Prover imathetsa mgwirizano wanzeru ndikutipatsa mndandanda wazinthu zomwe zingatilole kutaya ndalama:

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

Kuphatikiza pa mgwirizano wapamadzi, mutha kuyesa mapangano anu kapena kuyesa chitsanzo chosavuta ichi, chomwe chimathetsedwa muzochita ziwiri.

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

}

Popeza iyi ndiye mtundu woyamba, mawuwo ndi ochepa kwambiri ndipo pakhoza kukhala nsikidzi.
M'nkhani zotsatirazi, ndikukonzekera kubisala kupititsa patsogolo kwa VM, ndikuwonetsa momwe mungapangire mapangano anzeru otsimikiziridwa ndi chithandizo chake, osati kungowathetsa.

The character virtual machine ikupezeka pa http://2.59.42.98/hyperbox/
Nditayika gwero la VM yophiphiritsa ndikuwonjezera ndemanga pamenepo, ndikukonzekera kuziyika pa GitHub kuti mupeze mwayi waulere.

Source: www.habr.com

Kuwonjezera ndemanga