我希望有人可以帮助我解决以下问题,答案是最好的,但如果你能指出我正确的方向也会有所帮助。 我是大学毕业生的最后一年,这些问题来自之前的正式方法考试,我可以知道今年论文的答案。我们的讲师似乎并不是最好的,并没有涵盖很多这样的内容,所以找到确切的答案已被证明是不可能的。谷歌没有太多的帮助,也没有推荐的书籍。
1 - 假设∃x•P(x)在逻辑上等于¬∀x•¬P(x)并且 ∀x∈S•P(x)表示∀x•x∈S⇒P(x),推导出∃x∈S•P(x) 是指∃x•x∈S∧P(x)
2 - 描述必须证明的两个陈述 定义:
max(i, j)
if i>j
then i
else j
是规范的正确实现:
max(i : Z, j : Z)r : Z
pre true
post (r = i ∨ r = j) ∧ i ≤ r ∧ j ≤ r
答案 0 :(得分:2)
第一个实际上只是使用给定的和其他两个众所周知的逻辑等价来操纵符号:
(1) ∃x • P(x) is logically equivalent to ¬∀x • ¬P(x)
(2) ∀x∈S • P(x) means ∀x • x∈S ⇒ P(x)
∃x∈S • P(x)
== ¬∀x∈S • ¬P(x) (from (1))
== ¬∀x • x∈S ⇒ ¬P(x) (from (2))
== ¬∀x • ¬x∈S v ¬P(x) (from def. of ⇒)
== ¬∀x • ¬(x∈S ∧ P(x)) (from ¬A v ¬B == ¬(A ∧ B))
== ∃x • x∈S ∧ P(x) (from (1) -- the other way around)
对于第二个,你需要认识到max(i, j)
的结果将沿着两条路径之一计算:一条是i<j
,另一条是i>=j
(逻辑否定) i<j
)
所以你需要展示
true ∧ i<j
(前置条件),则(r=i ∨ r=j) ∧ i≤r ∧ j≤r
(发布条件)和true ∧ i>=j
(precond。)然后(r=i ∨ r=j) ∧ i≤r ∧ j≤r
(发布cond。),其中r
是max(i, j)
答案 1 :(得分:1)
但是你问题的第2部分没有意义,因为任何返回i或j的实现都是正确的。
规范错误。
正确的后置条件是
post (i > j => r = i) v (i <= j => r = j)