如何使用 LEAN 证明命题逻辑中的两个陈述?

How to prove two statements in propositional logic using LEAN?

LEAN 教程第 3 章末尾的两个证明我仍在努力(因此阻止我进一步阅读手册)如下:

theorem T11 : ¬(p ↔ ¬p) := sorry

我证明正确含义的尝试在这一点上停止了:

theorem T11R : ¬(p → ¬p) := 
begin 
    assume hyp : p → ¬ p, 
    cases (em p) with hp hnp, 
    exact (hyp hp) hp, 
    exact sorry 
end

显然我还不知道如何使用 ¬p。也不确定如何显示左蕴涵。另一个是这样的:

theorem T2R : ((p ∨ q) → r) → (p → r) ∧ (q → r) := 
begin
    intros porqr, sorry
end

我应该使用(作为正确的暗示)来显示以下内容:

theorem T2 : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) := 
begin    
    have goR : ((p ∨ q) → r) → (p → r) ∧ (q → r), from T2R p q r,
    have goL : (p → r) ∧ (q → r) → ((p ∨ q) → r), from T2L p q r,
    exact iff.intro (goR) (goL)
end

这里是左边:

theorem T2L : (p → r) ∧ (q → r) → ((p ∨ q) → r) := 
begin
    intros prqr,
    assume porq : p ∨ q,
    exact or.elim porq prqr.left prqr.right
end

theorem T11R 不正确,例如如果 pfalse 那么 p → ¬ p 是正确的。

¬(p ↔ ¬p) 不等同于 (¬ (p → ¬ p)) ∧ ¬ (¬ p → p);等同于¬ ((p → ¬ p) ∧ (¬ p → p)),两者不同

对于 theorem T2R 如果你使用 split 战术,它会给你两个目标,一个用于 and 的每一侧。您可以使用 leftright 策略将目标 p ∨ q 变成 pq。定理 or.inlor.inr 也可用于证明 or

这是 T2R

的证明
theorem T2R : ((p ∨ q) → r) → (p → r) ∧ (q → r) := 
begin
    intros porqr,
    split,
    { assume hp : p,
      apply porqr,
      left,
      exact hp },
    { assume hq : q,
      apply porqr,
      right,
      exact hq },
end