在 Haskell 中筛选
Filter in Haskell
我有以下问题。
证明对于某种类型的所有有限列表 xs 和该类型的谓词 p 和 q:
filter p (filter q xs) = filter q ( filter p xs)
我需要一些示例 xs 列表来解决这个问题吗?或者必须如何解决这个问题?
谢谢
不,提供一些 xs
个示例不是本练习所需要的。
此练习要求您证明 p,q,xs
的所有可能值,方程成立。请注意,p,q,xs
有无限多个可能的值,因此暴力破解所有可能的情况是不可行的:必须提供一般的数学证明,利用一些逻辑原理。
只是为了做个比较,假设你被要求在练习中证明 2*x+x = 3*x
。预期的解决方案不是 "well, it holds on x=4
and x=10
",忽略了 x
的所有其他(无限多)值。一个合理的解决方案可能是:“我有 x=1*x
,所以根据分配律
2*x+x = 2*x + 1*x = (2+1)*x = 3*x
",适用于 all x
.
在这种练习中,往往需要对某些东西进行归纳。在这里,xs
看起来很适合归纳。所以,要证明等式对所有 xs
成立,需要证明
- 等式适用于
xs=[]
- 如果等式适用于
xs=ys
(ys
是任意值),那么它必须适用于 xs=y:ys
(y
是任意值)
如果你证明了 1. 和 2. 那么你就完成了。
只是一个额外的提示:由于 y
是任意的,您不知道它是否满足谓词 p
and/or q
。但是,您可以在那里检查所有可能的四种情况:p,q
都成立,只有 p
,只有 q
,两者都没有。
我有以下问题。
证明对于某种类型的所有有限列表 xs 和该类型的谓词 p 和 q:
filter p (filter q xs) = filter q ( filter p xs)
我需要一些示例 xs 列表来解决这个问题吗?或者必须如何解决这个问题? 谢谢
不,提供一些 xs
个示例不是本练习所需要的。
此练习要求您证明 p,q,xs
的所有可能值,方程成立。请注意,p,q,xs
有无限多个可能的值,因此暴力破解所有可能的情况是不可行的:必须提供一般的数学证明,利用一些逻辑原理。
只是为了做个比较,假设你被要求在练习中证明 2*x+x = 3*x
。预期的解决方案不是 "well, it holds on x=4
and x=10
",忽略了 x
的所有其他(无限多)值。一个合理的解决方案可能是:“我有 x=1*x
,所以根据分配律
2*x+x = 2*x + 1*x = (2+1)*x = 3*x
",适用于 all x
.
在这种练习中,往往需要对某些东西进行归纳。在这里,xs
看起来很适合归纳。所以,要证明等式对所有 xs
成立,需要证明
- 等式适用于
xs=[]
- 如果等式适用于
xs=ys
(ys
是任意值),那么它必须适用于xs=y:ys
(y
是任意值)
如果你证明了 1. 和 2. 那么你就完成了。
只是一个额外的提示:由于 y
是任意的,您不知道它是否满足谓词 p
and/or q
。但是,您可以在那里检查所有可能的四种情况:p,q
都成立,只有 p
,只有 q
,两者都没有。