Functional programming 如何证明精益中的分配性(命题有效性属性6)?
经过大多数练习,并在精益手册第3章结尾处解决/证明了前五个命题有效性/属性,我仍然对以下含义有疑问(证明属性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
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