这是一个家庭作业,但我无法通过撰写正式的证据来了解整个业务。任何人都可以破解这个并写下这个fnc的后置条件的正式证据:
string REPLACE_BY(string s,char c,char d)
后置条件返回的值是通过替换每个匹配项从s形成的字符串 c由d表示(否则保持不变)。
答案 0 :(得分:1)
为了证明函数的正确性(即如果输入符合给定的前置条件,则符合后置条件),您需要函数的实现。
我会让你开始给你一些你需要工作的假设,但是因为它是家庭作业而把证明留给你。
假设是:
该方法定义如下:
String replace_by(String s, char c, char d) {
for (int i = 0; i < s.size();++i) {
if (s[i] == c) {
s[i] = d;
}
}
return s;
}
前提是s != null /\ s.size() < Integer.MAX_VALUE
old(s)
用于在输入功能之前引用s
的值
散文中给出的后置条件的正式规范是
old(s) != null /\ s != null /\
\-/i in 0..(old(s).size()-1): (
((old(s)[i] == old(c)) && (s[i] == old(d)))
\/ ((old(s)[i] != old(c)) && (s[i] == old(s)[i]))
)
/\ old(s).size() == s.size()
(\-/
是合乎逻辑的for-all运算符,\/
是'或'而/\
是'和')
有了这个,您应该能够基于Hoare logic构建证明。