我需要一个函数后置条件的证明

时间:2011-03-19 10:11:43

标签: proof proof-of-correctness

这是一个家庭作业,但我无法通过撰写正式的证据来了解整个业务。任何人都可以破解这个并写下这个fnc的后置条件的正式证据:

string REPLACE_BY(string s,char c,char d)

后置条件返回的值是通过替换每个匹配项从s形成的字符串 c由d表示(否则保持不变)。

1 个答案:

答案 0 :(得分:1)

为了证明函数的正确性(即如果输入符合给定的前置条件,则符合后置条件),您需要函数的实现。

我会让你开始给你一些你需要工作的假设,但是因为它是家庭作业而把证明留给你。

假设是:

  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;
    }
    
  2. 前提是s != null /\ s.size() < Integer.MAX_VALUE

  3. old(s)用于在输入功能之前引用s的值

  4. 散文中给出的后置条件的正式规范是

    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运算符,\/是'或'而/\是'和')

  5. 有了这个,您应该能够基于Hoare logic构建证明。