haskell - 如何检查生成无限列表的函数的实现?
问题描述
编写一个函数,接收函数
f
和数字n
并返回列表[f n, f (n + 1), f (n + 2), f (n + 3), f (n + 4) ... ]
。
这是我的解决方案:
func f n = f n : func f (n+1)
但我不确定它是否正确。如何检查我的实施?
解决方案
你可以给出一个共归纳证明。共归纳推理类似于归纳推理,但它允许“无限”结构。这是推理数据流和无限列表等事物的自然选择。
你想func
拥有的财产是这样的
∀ f : Int -> a, ∀ n : Int, ∀ i : Int, (i >= 0 ⟹ (func f n) !! i == f (n + i))
通过共归纳证明某事类似于归纳:假设它是所有子结构的共归纳假设,然后为上层结构证明它。由于只有一个定义func
,所以只有这样的证明义务。
这意味着,如果你能证明
∀ f : Int -> a, ∀ n : Int, ∀ i : Int, (i ≥ 0 ⟹ (func f n) !! i == f (n + i))
⟹
∀ f : Int -> a, ∀ n : Int, ∀ i : Int, (i ≥ 0 ⟹ (f n : (func f (n + 1))) !! i == f (n + i))
那么您将证明您的函数定义是正确的。
由于您实际上可以证明上述陈述,因此您的函数定义是正确的。
推荐阅读
- javascript - How to remove double quotes from JS string?
- r - invalid 'type' (character of argument
- html - How to delete the extra white space of the body height when I move my sections up
- django - Django validation - avoiding multiple full_cleans()
- javascript - Javascript检测用户是否有鼠标
- python - 将 Dataframe 值设置为另一个 Dataframe 中的值
- regex - 如何为 VBA 调整正则表达式模式
- css - 需要所有 SVG 属性值的 JSON 格式表
- python - 创建一个新的 pandas 列,它是列表的列表
- regex - 在加拿大邮政编码的第 3 和第 4 个字符之间添加一个空格