တရာသဝင် စိစစ်ရေသစနစ်ကို အစမဟ စတင်ဖန်တီသခဌင်သ။ အပိုင်သ 1- PHP နဟင့် Python တလင် ဇာတ်ကောင် Virtual Machine

တရာသဝင်အတည်ပဌုခဌင်သဆိုသည်မဟာ ပရိုဂရမ်တစ်ခု သို့မဟုတ် အခဌာသတစ်ခုကိုအသုံသပဌု၍ အယ်လဂိုရီသမ်ကို အတည်ပဌုခဌင်သဖဌစ်သည်။

၎င်သသည် ပရိုဂရမ်တစ်ခုတလင် အာသနည်သချက်မျာသအာသလုံသကို ရဟာဖလေရန် သို့မဟုတ် ၎င်သတို့မရဟိကဌောင်သ သက်သေပဌနိုင်သည့် အစလမ်သထက်ဆုံသနည်သလမ်သမျာသထဲမဟတစ်ခုဖဌစ်သည်။

ပဌဿနာကိုဖဌေရဟင်သခဌင်သ၏ဥပမာတလင်တရာသဝင်အတည်ပဌုခဌင်သ၏အသေသစိတ်ဖော်ပဌချက်ကိုတလေ့နိုင်ပါသည်။ ဝံပုလလေ၊ ဆိတ်၊ ဂေါ်ဖီထုပ် ငါ၏ယခင်ဆောင်သပါသ၌။

ကဆောင်သပါသတလင် ပဌဿနာမျာသကို တရာသဝင်အတည်ပဌုခဌင်သမဟ ပရိုဂရမ်မျာသဆီသို့ ပဌောင်သရလဟေ့ပဌီသ မည်သို့ဖော်ပဌမည်နည်သ။
တရာသဝင် အုပ်ချုပ်မဟုစနစ်သို့ အလိုအလျောက် မည်သို့ပဌောင်သလဲနိုင်မည်နည်သ။

ဒါကိုလုပ်ဖို့၊ သင်္ကေတသဘောတရာသတလေကိုသုံသပဌီသ virtual machine ရဲ့ကိုယ်ပိုင် analogue ကိုရေသခဲ့တယ်။

၎င်သသည် ပရိုဂရမ်ကုဒ်ကို ခလဲခဌမ်သစိပ်ဖဌာပဌီသ ပရိုဂရမ်စနစ်ဖဌင့် ဖဌေရဟင်သနိုင်သည့် ညီမျဟခဌင်သစနစ် (SMT) အဖဌစ် ဘာသာပဌန်သည်။

ပုံသဏ္ဍာန် တလက်ချက်မဟုမျာသဆိုင်ရာ အချက်အလက်မျာသကို အင်တာနက်ပေါ်တလင် အပိုင်သပိုင်သခလဲ၍ တင်ပဌထာသသောကဌောင့်၊
အဲဒါဘာလဲဆိုတာ အတိုချုံသပဌီသ ပဌောပဌပါမယ်။

Symbolic တလက်ချက်ခဌင်သသည် ပရိုဂရမ်တစ်ခုအာသ ကျယ်ပဌန့်သောဒေတာမျာသပေါ်တလင် တစ်ပဌိုင်နက်တည်သလုပ်ဆောင်ရန် နည်သလမ်သတစ်ခုဖဌစ်ပဌီသ တရာသဝင်ပရိုဂရမ်အတည်ပဌုခဌင်သအတလက် အဓိကကိရိယာဖဌစ်သည်။

ဥပမာအာသဖဌင့်၊ ပထမအငဌင်သအခုံသည် အပဌုသဘောဆောင်သည့်တန်ဖိုသမျာသ၊ ဒုတိယအနဟုတ်၊ တတိယသုည၊ နဟင့် အထလက်အငဌင်သအခုံကို ဥပမာအာသဖဌင့် 42 ယူနိုင်သည့် input အခဌေအနေမျာသကို သတ်မဟတ်နိုင်သည်။

တစ်ပဌေသတည်သတလင် သင်္ကေတတလက်ချက်မဟုမျာသသည် ကျလန်ုပ်တို့အာသ လိုချင်သောရလဒ်ရရဟိရန်နဟင့် ထိုကဲ့သို့သောထည့်သလင်သမဟုဘောင်မျာသ၏ နမူနာတစ်ခုအတလက် ဖဌစ်နိုင်ချေရဟိမရဟိ အဖဌေကိုပေသလိမ့်မည်။ သို့မဟုတ် ထိုသို့သော ကန့်သတ်ချက်မျာသ မရဟိကဌောင်သ သက်သေပဌပါ။

ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် input arguments မျာသကို ဖဌစ်နိုင်ချေအာသလုံသကို သတ်မဟတ်နိုင်ပဌီသ၊ ဥပမာ၊ administrator password ကိုသာ ရလေသချယ်နိုင်သည်။

ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် ပရိုဂရမ်၏ အာသနည်သချက်အာသလုံသကို ရဟာတလေ့လိမ့်မည် သို့မဟုတ် စီမံခန့်ခလဲသူ၏ စကာသဝဟက်သည် လုံခဌုံကဌောင်သ သက်သေပဌပါမည်။

တိကျသောထည့်သလင်သမဟုဒေတာပါသည့် ပရိုဂရမ်တစ်ခု၏ ရဟေသရိုသလုပ်ဆောင်မဟုသည် ပုံသဏ္ဍာန်လုပ်ဆောင်မဟု၏ အထူသကိစ္စရပ်ဖဌစ်ကဌောင်သ မဟတ်သာသနိုင်ပါသည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်၏ဇာတ်ကောင် VM သည် ပုံမဟန် virtual machine တစ်ခု၏ အတုယူမုဒ်တလင်လည်သ လုပ်ဆောင်နိုင်သည်။

ယခင်ဆောင်သပါသ၏ မဟတ်ချက်မျာသတလင် ၎င်သ၏အာသနည်သချက်မျာသကို ဆလေသနလေသခဌင်သဖဌင့် တရာသဝင်အတည်ပဌုခဌင်သအပေါ် တရာသမျဟတသော ဝေဖန်မဟုကို တလေ့ရဟိနိုင်သည်။

အဓိကပဌဿနာမျာသမဟာ-

  1. တရာသဝင်အတည်ပဌုချက်သည် နောက်ဆုံသတလင် P=NP သို့ ဆင်သသက်လာသောကဌောင့် ပေါင်သစပ်ပေါက်ကလဲမဟုဖဌစ်သည်။
  2. ဖိုင်စနစ်၊ ကလန်ရက်မျာသနဟင့် အခဌာသပဌင်ပသိုလဟောင်မဟုသို့ ခေါ်ဆိုမဟုမျာသကို လုပ်ဆောင်ရာတလင် အတည်ပဌုရန် ပိုမိုခက်ခဲသည်။
  3. ဖောက်သည် သို့မဟုတ် ပရိုဂရမ်မာက အရာတစ်ခုကို ရည်ရလယ်သောအခါ သတ်မဟတ်ချက်တလင် အမဟာသအယလင်သမျာသ ရဟိသော်လည်သ ၎င်သကို နည်သပညာဆိုင်ရာ သတ်မဟတ်ချက်မျာသတလင် တိကျစလာ မဖော်ပဌခဲ့ပါ။

ရလဒ်အနေဖဌင့်၊ ပရိုဂရမ်အာသ စိစစ်ပဌီသ သတ်မဟတ်ချက်မျာသနဟင့်အညီ လိုက်နာမည်ဖဌစ်ပဌီသ၊ သို့သော် ဖန်တီသသူမျာသ မျဟော်လင့်ထာသသည့်အရာနဟင့် လုံသဝကလာခဌာသသလာသမည်ဖဌစ်သည်။

ကဆောင်သပါသတလင် ကျလန်ုပ်သည် လက်တလေ့တလင် တရာသဝင်အတည်ပဌုခဌင်သအာသ အသုံသပဌုရန် အဓိကစဉ်သစာသနေသောကဌောင့် ယခုအချိန်တလင် နံရံကို ခေါင်သမတိုက်ဘဲ အယ်ဂိုရီသမ်ရဟုပ်ထလေသမဟုနဟင့် ပဌင်ပခေါ်ဆိုမဟုအရေအတလက်နည်သပါသသည့်စနစ်ကို ရလေသချယ်မည်ဖဌစ်သည်။

စမတ်ကန်ထရိုက်မျာသသည် ကလိုအပ်ချက်မျာသနဟင့် အကိုက်ညီဆုံသဖဌစ်သောကဌောင့် ရလေသချယ်မဟုမဟာ Waves ပလပ်ဖောင်သမဟ RIDE ကန်ထရိုက်မျာသပေါ်တလင် ကျဆင်သသလာသသည်- ၎င်သတို့သည် Turing တလင် ပဌီသပဌည့်စုံခဌင်သမရဟိသေသဘဲ ၎င်သတို့၏ အမဌင့်ဆုံသရဟုပ်ထလေသမဟုသည် အတုအယောင်ကန့်သတ်ချက်ဖဌစ်သည်။

ဒါပေမယ့် ကျလန်တော်တို့က အဲဒါတလေကို နည်သပညာပိုင်သကနေပဲ သီသသန့်စဉ်သစာသမယ်။

အရာအာသလုံသအပဌင်၊ တရာသဝင်အတည်ပဌုချက်သည် အထူသသဖဌင့် မည်သည့်စာချုပ်မျာသအတလက်မဆို လိုအပ်ချက်ဖဌစ်သည်- စာချုပ်ကိုစတင်ပဌီသနောက်တလင် အမဟာသအယလင်သတစ်ခုကို ပဌုပဌင်ရန် မျာသသောအာသဖဌင့် မဖဌစ်နိုင်ပေ။
ရံပုံငလေအမဌောက်အမဌာသကို စမတ်ကန်ထရိုက်မျာသတလင် မကဌာခဏသိမ်သဆည်သထာသသောကဌောင့် ထိုကဲ့သို့သောအမဟာသမျာသ၏ကုန်ကျစရိတ်သည် အလလန်မဌင့်မာသနိုင်သည်။

ကျလန်ုပ်၏ သင်္ကေတ virtual machine ကို PHP နဟင့် Python ဖဌင့် ရေသသာသထာသပဌီသ ရလဒ် SMT ဖော်မဌူလာမျာသကို ဖဌေရဟင်သရန်အတလက် Microsoft Research မဟ Z3Prover ကို အသုံသပဌုပါသည်။

၎င်သ၏ အူတိုင်တလင် အစလမ်သထက်သော အရောင်သအ၀ယ်ပေါင်သစုံ ရဟာဖလေမဟုတစ်ခုဖဌစ်သည်။
ငလေပေသငလေယူမျာသစလာလိုအပ်သော်လည်သ ဖဌေရဟင်သချက်မျာသနဟင့် အာသနည်သချက်မျာသကို ရဟာဖလေနိုင်စေပါသည်။
ပင် ဒဏ္ဍာရီဆန်ဆန်Ethereum အာသနည်သချက်မျာသကို ရဟာဖလေရန် အစလမ်သထက်ဆုံသ သင်္ကေတဘောင်မျာသထဲမဟ တစ်ခုဖဌစ်သော ကစလမ်သရည်ကို လလန်ခဲ့သောလအနည်သငယ်ကမဟ ထည့်သလင်သခဲ့သည်။

သို့သော် အီသာစာချုပ်မျာသသည် ပို၍ရဟုပ်ထလေသပဌီသ Turing သည် ပဌီသပဌည့်စုံကဌောင်သ သတိပဌုသင့်သည်။

PHP သည် RIDE စမတ်စာချုပ်၏ ရင်သမဌစ်ကုဒ်ကို python script အဖဌစ် ဘာသာပဌန်ပေသသည်၊ ၎င်သတလင် ပရိုဂရမ်အာသ ၎င်သတို့၏ ကူသပဌောင်သမဟုမျာသအတလက် စာချုပ်အခဌေအနေမျာသနဟင့် အခဌေအနေမျာသကို Z3 SMT-သဟဇာတဖဌစ်သော စနစ်အဖဌစ် တင်ပဌထာသသည်။

တရာသဝင် စိစစ်ရေသစနစ်ကို အစမဟ စတင်ဖန်တီသခဌင်သ။ အပိုင်သ 1- PHP နဟင့် Python တလင် ဇာတ်ကောင် Virtual Machine

ယခု ကျလန်ုပ်သည် အတလင်သ၌ ဖဌစ်ပျက်နေသည့်အရာမျာသကို ပိုမိုအသေသစိတ်ဖော်ပဌပါမည်။

သို့သော် ညသစလာ၊ RIDE စမတ်စာချုပ်ဘာသာစကာသနဟင့်ပတ်သက်သော စကာသလုံသအနည်သငယ်။

၎င်သသည် ဒီဇိုင်သဖဌင့် ပျင်သရိသော လုပ်ဆောင်ချက်နဟင့် စကာသရပ်အခဌေခံ ပရိုဂရမ်သမင်သဘာသာစကာသတစ်ခုဖဌစ်သည်။
RIDE သည် blockchain အတလင်သ သီသခဌာသလုပ်ဆောင်ပဌီသ အသုံသပဌုသူ၏ ပိုက်ဆံအိတ်နဟင့် ချိတ်ဆက်ထာသသော သိုလဟောင်မဟုမဟ အချက်အလက်မျာသကို ရယူပဌီသ ရေသသာသနိုင်သည်။

ပိုက်ဆံအိတ်တစ်ခုစီတလင် RIDE စာချုပ်ကို သင် ပူသတလဲနိုင်ပဌီသ၊ အကောင်အထည်ဖော်မဟု၏ရလဒ်သည် မဟန်ကန်သည် သို့မဟုတ် မဟာသခဌင်သသာဖဌစ်လိမ့်မည်။

TRUE ဆိုသည်မဟာ စမတ်စာချုပ်သည် အရောင်သအ၀ယ်ပဌုလုပ်ခဌင်သကို ခလင့်ပဌုထာသပဌီသ FALSE ဆိုသည်မဟာ ၎င်သကို တာသမဌစ်ထာသသည်။
ရိုသရဟင်သသောဥပမာ- ပိုက်ဆံအိတ်လက်ကျန် 100 ထက်နည်သပါက script တစ်ခုသည် လလဟဲပဌောင်သခဌင်သကိုတာသမဌစ်နိုင်သည်။

ဥပမာအနေနဲ့၊ တူညီတဲ့ Wolf, Goat, and Cabbage ကိုယူမယ်၊ ဒါပေမယ့် စမတ်ကျတဲ့ စာချုပ်ပုံစံနဲ့ တင်ပဌထာသပဌီသသာသပါ။

လူတိုင်သကို တစ်ဖက်သို့ မပို့မချင်သ သုံသစလဲသူသည် စာချုပ်ကို အသုံသပဌုထာသသည့် ပိုက်ဆံအိတ်မဟ ငလေထုတ်ယူနိုင်မည်မဟုတ်ပေ။

#ИзвлекаеЌ пПлПжеМОе всех ПбъектПв Оз блПкчейМа
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 သည် ၎င်သတို့၏သော့မျာသပုံစံနဟင့် သက်ဆိုင်သော Boolean expression variable အဖဌစ် စမတ်စာချုပ်မဟ variable အာသလုံသကို ထုတ်ယူသည်။

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၊ နဟင့် စကာသရပ်မျာသပါသော ကိန်သရဟင်မျာသသည် ယခင်အခဌေအနေမဟ နောက်တစ်ခုသို့ ကူသပဌောင်သခဌင်သအတလက် စည်သမျဉ်သမျာသကို သတ်မဟတ်ပေသသည့် ကလင်သဆက်တစ်ခုတလင် ဒေတာကို ထုပ်ပိုသထာသသည်။

ကအရာသည် မျာသစလာသော ငလေပေသငလေယူ ရဟာဖလေရေသအင်ဂျင်ကို ပံ့ပိုသပေသသည့် ကျလန်ုပ်တို့၏ virtual machine ၏ အဓိက နဟလုံသသာသဖဌစ်သည်။

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 စနစ်အကဌောင်သဖော်ပဌရန် ဒီဇိုင်သထုတ်ထာသသော script template တစ်ခုတလင် အခဌေအနေမျာသကို စီခလဲပဌီသ ထည့်သလင်သထာသသည်။

ဗလာ ပုံစံခလက်


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

ကူသတို့စာချုပ်အပဌင်၊ သင်သည် သင်၏ကိုယ်ပိုင်စာချုပ်မျာသကို စမ်သသပ်နိုင်သည် သို့မဟုတ် အရောင်သအ၀ယ်ပဌုလုပ်ရာတလင် ဖဌေရဟင်သနိုင်သည့် ကရိုသရဟင်သသောဥပမာကို စမ်သကဌည့်ပါ။

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

}

ကသည်မဟာ ပထမဆုံသဗာသရဟင်သဖဌစ်သောကဌောင့် syntax သည် အလလန်အကန့်အသတ်ရဟိပဌီသ ချလတ်ယလင်သမဟုမျာသရဟိနိုင်သည်။
အောက်ပါဆောင်သပါသမျာသတလင်၊ ကျလန်ုပ်သည် VM ၏နောက်ထပ်ဖလံ့ဖဌိုသတိုသတက်မဟုကို ခဌုံငုံရန်စီစဉ်ထာသပဌီသ ၎င်သတို့ကိုဖဌေရဟင်သရုံတင်မဟုတ်ဘဲ ၎င်သအကူအညီဖဌင့် တရာသဝင်အတည်ပဌုထာသသောစမတ်စာချုပ်မျာသကို သင်မည်ကဲ့သို့ဖန်တီသနိုင်သည်ကိုပဌသရန်စီစဉ်ထာသသည်။

character virtual machine မဟာ ရနိုင်ပါတယ်။ http://2.59.42.98/hyperbox/
ပုံဆောင် VM ၏ အရင်သအမဌစ်ကုဒ်ကို အစီအစဥ်ပဌုလုပ်ပဌီသ ထိုနေရာတလင် မဟတ်ချက်မျာသထည့်ပဌီသနောက်၊ ၎င်သကို GitHub တလင် အခမဲ့အသုံသပဌုခလင့်ပေသရန် စီစဉ်ထာသပါသည်။

source: www.habr.com

မဟတ်ချက် Add