Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 如何证明精益中的分配性(命题有效性属性6)?_Functional Programming_Theorem Proving_Lean - Fatal编程技术网

Functional programming 如何证明精益中的分配性(命题有效性属性6)?

Functional programming 如何证明精益中的分配性(命题有效性属性6)?,functional-programming,theorem-proving,lean,Functional Programming,Theorem Proving,Lean,经过大多数练习,并在精益手册第3章结尾处解决/证明了前五个命题有效性/属性,我仍然对以下含义有疑问(证明属性6所需的含义之一): 我面临的困难主要是由于p不正确的情况,因为我不知道如何使用精益工具将假设中和的两面结合起来,以获得q和r在该情况下都必须成立的事实。我将非常感谢这里的任何帮助;请帮助我理解如何在上述设置中构造此证明,而不导入除标准精益策略之外的任何其他策略。为了完整起见,以下是我对另一个方向的证明: theorem Distr_or_R (p q r : Prop) : p ∨ (q

经过大多数练习,并在精益手册第3章结尾处解决/证明了前五个命题有效性/属性,我仍然对以下含义有疑问(证明属性6所需的含义之一):

我面临的困难主要是由于
p
不正确的情况,因为我不知道如何使用精益工具将假设中
的两面结合起来,以获得
q
r
在该情况下都必须成立的事实。我将非常感谢这里的任何帮助;请帮助我理解如何在上述设置中构造此证明,而不导入除标准精益策略之外的任何其他策略。为了完整起见,以下是我对另一个方向的证明:

theorem Distr_or_R (p q r : Prop) : p ∨ (q ∧ r) → (p ∨ q) ∧ (p ∨ r) :=
begin
    intros pqr,
    exact or.elim pqr 
    ( assume hp: p, show (p ∨ q) ∧ (p ∨ r), from 
        and.intro (or.intro_left q hp) (or.intro_left r hp) ) 
    ( assume hqr : (q ∧ r), show (p ∨ q) ∧ (p ∨ r), from 
        and.intro (or.intro_right p hqr.left) (or.intro_right p hqr.right) ) 
end

暗示。在
porq
porr
上尝试大小写拆分

这里有一个解决方案

theorem Distr_or_L (p q r : Prop) : (p ∨ q) ∧ (p ∨ r) → p ∨ (q ∧ r) :=
begin
    intros pqpr, 
    have porq : p ∨ q, from pqpr.left,
    have porr : p ∨ r, from pqpr.right,
    { cases porq with hp hq,
      { exact or.inl hp },
      { cases porr with hp hr,
        { exact or.inl hp },
        { exact or.inr ⟨hq, hr⟩ } } }
end

这很有效。对于大多数人,包括我自己,问题可能是在第3章中遇到的时候,
案例
尚未在任何示例中介绍或使用。当然,除非是这样,我只是没有注意到——总是有可能!这是否正确使用了
案例
?我似乎又遇到了一些问题,因为我的
hyp
需要重写才能为
而不是p
工作。如何完成这项工作<代码>定理T11:,(p→ §p):=开始假设hyp:p→ hp hnp、确切(hyp hp)hp、确切抱歉结束的案例(em p)
theorem Distr_or_L (p q r : Prop) : (p ∨ q) ∧ (p ∨ r) → p ∨ (q ∧ r) :=
begin
    intros pqpr, 
    have porq : p ∨ q, from pqpr.left,
    have porr : p ∨ r, from pqpr.right,
    { cases porq with hp hq,
      { exact or.inl hp },
      { cases porr with hp hr,
        { exact or.inl hp },
        { exact or.inr ⟨hq, hr⟩ } } }
end