হোয়ের-স্টাইলের সঠিকতার প্রমাণের সময় অ্যারেগুলি কীভাবে মোকাবেলা করবেন


11

এই প্রশ্নের চারপাশের আলোচনায় , গিলস সঠিকভাবে উল্লেখ করেছেন যে অ্যারে ব্যবহার করে এমন একটি অ্যালগরিদমের কোনও নির্ভুলতার প্রমাণ প্রমাণ করতে হবে যে কোনও সীমার বাইরে অ্যারে প্রবেশ নেই; রানটাইম মডেলের উপর নির্ভর করে এটি রানটাইম ত্রুটি বা অ-অ্যারে উপাদানগুলিতে অ্যাক্সেসের কারণ হতে পারে।

এই জাতীয় নির্ভুলতার প্রমাণগুলি সম্পাদনের জন্য একটি সাধারণ কৌশল (অন্ততপক্ষে আন্ডারগ্র্যাড স্টাডিতে এবং সম্ভবত স্বয়ংক্রিয় যাচাইকরণে) Hoare যুক্তি ব্যবহার করে । আমি জানিনা যে স্ট্যান্ডার্ড নিয়মের সেটগুলিতে অ্যারে সম্পর্কিত কোনও কিছু রয়েছে; এগুলি monadic ভেরিয়েবলের মধ্যে সীমাবদ্ধ বলে মনে হচ্ছে।

আমি ফর্মের অ্যাক্সিমোমগুলি যুক্ত করার কল্পনা করতে পারি

{0i<A.lengthP[A[i]/E]} A[i]:=E; {P}

যাইহোক, এটা আপনি ডান দিকে একটি অ্যারের অ্যাক্সেস, অর্থাত কিভাবে মোকাবেলা করবে যদি এটি একটি জটিল অভিব্যক্তি অংশ আমার কাছে স্পষ্ট নয় কিছু বিবৃতিতে ।x : = EEx:=E

কীভাবে অ্যারে অ্যাক্সেসগুলি হোয়ার যুক্তিতে মডেল করা যায় যাতে অবৈধ প্রবেশের অনুপস্থিতি প্রোগ্রামের নির্ভুলতার জন্য প্রমাণিত হতে পারে?

উত্তর অনুমান হতে পারে যে আমরা অ্যারে উপাদান অনুমতি ছাড়া অন্য বিবৃতি ব্যবহৃত হবে বা কিছু অংশ হিসেবে মধ্যে এই expressiveness সীমাবদ্ধ করে না যেমন; আমরা সর্বদা একটি অস্থায়ী পরিবর্তনশীলকে পছন্দসই মান নির্ধারণ করতে পারি, যেমন লিখুন of instead এর পরিবর্তে ।এক্স : = টি : = [ আই ] ; i f ( t > 0 ) i f ( A [ i ] > 0 ) A[i]:=EEx:=Et:=A[i]; if(t>0)if(A[i]>0)

উত্তর:


8

আপনার অ্যাক্সিয়ামটি আসলে একটি অট্টালিকা নয়, এটি অনুমান অনুপস্থিত। Hoare লজিকের সহজ উপস্থাপনা form ফর্মের সূত্রগুলিকে হেরফের করে যেখানে এবং লজিকাল সূত্র এবং একটি আদেশ। আপনার অবশ্যই এটি নিশ্চিত করা দরকার যে সুগঠিত । সাধারণ ভাষায় যেমন হোরের যুক্তির প্রথম পরিচিতির জন্য প্রায়শই ব্যবহৃত হয়, সুগঠনটি সিনট্যাকটিক: এটি সাধারণত এটি পরীক্ষা করার বিষয় checkingP P C C{P}C{P}PPCCCএকটি প্রসঙ্গ-মুক্ত ব্যাকরণ অনুসারে এবং সম্ভবত ফ্রি ভেরিয়েবলগুলি অনুমোদিত সেটের মধ্যে থাকে। যদি ভাষাটিতে একটি শব্দার্থবিজ্ঞানের যথাযথতা যেমন অ্যারে উপাদানগুলিতে অ্যাক্সেসের মতো অন্তর্ভুক্ত থাকে তবে আপনাকে এই শব্দার্থক নির্ভুলতা প্রকাশ করতে অনুমান যুক্ত করতে হবে।

সাধারণত, আপনি মত প্রকাশ এবং আদেশের সংশোধন প্রকাশ করতে রায় যুক্ত করতে পারেন। যদি এক্সপ্রেশনগুলির কোনও পার্শ্ব প্রতিক্রিয়া না থাকে তবে তাদের কোনও পোস্টকন্ডিশন দরকার নেই, কেবল পূর্বশর্ত। উদাহরণস্বরূপ, আপনি সু-গঠনের নিয়ম যেমন লিখতে পারেন এবং কেবলমাত্র আদেশগুলিতে সু-গঠনযুক্ত অভিব্যক্তিগুলিকে অনুমতি দেয়: {P[xE]}

{P}E wf{P0E<length(A)}A[E] wf{P}E1 wf{P}E2 wf{P}E1+E2 wf
{P[xE]}E wf{P[xE]}x:=E{P}

একটি ভিন্ন পদ্ধতির সব এক্সপ্রেশন সুগঠিত হিসেবে বিবেচনা, কিন্তু করতে কোন একটি মন্দ গঠিত হিসাব জড়িত অভিব্যক্তি একটি বিশেষ মূল্য আছে । রান-টাইম সীমানা যাচাই করা ভাষায়, অর্থ "এই প্রোগ্রামটি মারাত্মক ব্যতিক্রম উত্থাপন করেছে"। এরপরে আপনি কোনও প্রোগ্রাম কোনও লজিক্যাল প্রিকিকেট মাধ্যমে ভুল হয়ে গেছে কিনা তা ট্র্যাক করে রাখবেন ; একটি প্রোগ্রাম শুধুমাত্র বৈধ যদি প্রমাণ করতে পারেন যে তার postcondition বোঝা হয় । ¬ errorerrorError¬Error

{P[xE]}x:=E{PError}P[xE]Eerror{P[xE]}x:=E{P}

তবুও আরেকটি পদ্ধতি হল যদি প্রোগ্রামটি সঠিকভাবে শেষ হয় তবে কেবল হোয়ার ট্রিপল বিবেচনা করা। এটি নির্বিঘ্নিত প্রোগ্রামগুলির জন্য সাধারণ পদ্ধতি: কমান্ডটি সমাপ্ত হওয়ার পরে পোস্টকন্ডিশন হোল্ড হয় যা সর্বদা ঘটে না। আপনি যদি রান-টাইম ত্রুটিগুলি অবসানহান হিসাবে বিবেচনা করে থাকেন তবে আপনি সমস্ত সঠিকতার বিষয়টি হুডের নীচে সাফ করেন। আপনার এখনও প্রোগ্রামের সঠিকতা প্রমাণ করতে হবে, তবে আপনি যদি সেই কাজের জন্য অন্য কিছু ফর্মালিজম পছন্দ করেন তবে হোয়ার যুক্তিতে এটির দরকার নেই।

যাইহোক, নোট করুন যে কোনও অ্যারে যেমন একটি যৌগিক পরিবর্তনশীল পরিবর্তিত হয় তখন তা প্রকাশ করা আপনার লেখার সাথে আরও জড়িত। ধরুন ছিল বলে, : প্রতিকল্পন পরিবর্তন করবে না , এখনো নিয়োগ বাতিল পারে । এমনকি আপনি যদি পরমাণু সম্পর্কে শুধুমাত্র কথা predicates বাক্য গঠন প্রণালী সীমিত, নিয়োগ বিবেচনা পূর্বশর্ত অধীনে : আপনি সঠিক পোস্টকন্ডিশন জন্য কোনও সহজ প্রতিস্থাপন করতে পারবেন না , আপনাকে মূল্যায়ন করতে হবেPIsSorted(A)A[i]EPA[i]PPA[A[0]1]:=A[0]A[0]=2A[1]=3[ 0 ] [ 0 ] [ আই ]A[0]=1A[1]=1A[0](যা সাধারণভাবে কঠিন হতে পারে, যেহেতু পূর্বশর্ত জন্য একটি একক সম্ভাব্য মান নির্দিষ্ট করে না )। আপনাকে অ্যারেতে প্রতিস্থাপনটি সম্পাদন করতে হবে: । মাইক গর্ডনের বক্তৃতা নোটগুলিতে অ্যারে (তবে ত্রুটি পরীক্ষা না করে) সহ একটি ভাল উপস্থাপনা রয়েছে হোয়ের যুক্তি।A[0]AA[iE]


0

গিলস দ্বারা উল্লিখিত হিসাবে, একটি অ্যারে অ্যাসাইনমেন্ট অ্যাক্সিয়ম রয়েছে ( গর্ডনের নোটগুলি দেখুন, সেকশন ২.১.১০ ): f dfrac words কথায় কথায়, আপনার যদি অ্যারে অ্যাসাইনমেন্ট থাকে, তবে মূল অ্যারে দ্বারা মূল অ্যারেটি প্রতিস্থাপন করুন যার মান রয়েছে । মনে রাখবেন যে আপনার যদি ইতিমধ্যে পোস্টে থাকে এবং নির্ধারিত হয়ে থাকে তবে আপনাকে পূর্ব হিসাবে নেওয়া উচিত (হ্যাঁ, এই ক্রমে - সাম্প্রতিক আপডেটটি প্রথমে কার্যকর করা হবে!)।

{Q[AA.store(i,expr)]}A[i]=expr{Q}
A.store(i,expr)iexprA.store(i,vi)A[j]=vjA.store(j,vj).store(i,vi)

উপরন্তু, আমরা অ্যারে এক্সেস সবর্জনবিদিত প্রয়োজন: A.store(i,v)[i]দ্বারা প্রতিস্থাপিত হতে পারে v( "যদি আপনি অ্যাক্সেস তম উপাদান যে আপনি শুধু আপডেট, তারপর নির্ধারিত মান")।i

আমি মনে করি অ্যারে সহ কোনও প্রোগ্রাম প্রমাণ করার জন্য সঠিক ("কোনও বাহিরের অ্যাক্সেস নেই"), উপরের অক্ষগুলি যথেষ্ট। আসুন প্রোগ্রামটি বিবেচনা করুন:

...
A[i] = 12
...

আমরা এই প্রোগ্রামটি বর্ণনা করি:

...
@ {0<i<A_length}
A[i] = 12
...

A_lengthএমন একটি পরিবর্তনশীল যেখানে অ্যারের দৈর্ঘ্য নির্দিষ্ট করে। এখন টীকাটি প্রমাণ করার চেষ্টা করুন - যথা, পিছনের দিকে এটি কাজ করুন (নীচে থেকে উপরে, "সাধারণভাবে" হোয়ের প্রমাণগুলিতে)। যদি আপনি শীর্ষে থাকেন {false}তবে সীমাবদ্ধ অ্যাক্সেসের বাইরে চলে যেতে পারে, অন্যথায়, আপনি যে অভিব্যক্তিটি পেয়েছেন তা হ'ল পূর্বশর্ত যার অধীনে কোনও বাহ্যিক অ্যাক্সেস সম্ভব নয়। (এছাড়াও, আমাদের নিশ্চিত করা দরকার যে যখন অ্যারে তখন তৈরি হয় int A=int[10];তখন আমাদের মতো অবস্থা পরে থাকে {A_length==10}))


আপনার অক্ষগুলি সীমানা অ্যাক্সেসকে মডেল করে না: তারা দৈর্ঘ্যের কথাও উল্লেখ করে না! আপনার উদাহরণ অনুষ্ঠানে, আপনি কিভাবে কহা কি lengthকরতে A?
গিলস 21'12

ঠিক আছে, অ্যাকিমিয়ামগুলি আবদ্ধ অ্যাক্সেসগুলির বাইরে মডেল করে না। প্রথমত, কোনও প্রোগ্রামটি সঠিক প্রমাণ করার জন্য আমি টীকাগুলি যুক্ত করি যার জন্য প্রয়োজন যে অ্যাক্সেসের সীমানা থাকা উচিত। ( lengthনতুন নামকরণ করা হয়েছিল A_length)) দ্বিতীয়ত, আমাদের অ্যারে "ক্রিয়েশন" এর মতো অ্যাক্সিয়মগুলি দরকার int[] a = int[length] {a_length==length}। আমি মনে করি এটি যথেষ্ট হওয়া উচিত।
আয়রাত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.