精益定理证明的第 3.6 节显示以下内容:
example : p ∨ (q ∧ r) ↔ (p ∨ q) ∧ (p ∨ r) := sorry
由于这涉及到iff
,我们先演示一个方向,从左到右:
example : p ∨ (q ∧ r) → (p ∨ q) ∧ (p ∨ r) :=
(assume h : p ∨ (q ∧ r),
or.elim h
(assume hp : p,
show (p ∨ q) ∧ (p ∨ r), from ⟨or.inl hp, or.inl hp⟩)
(assume hqr : q ∧ r,
have hq : q, from hqr.left,
have hr : r, from hqr.right,
show (p ∨ q) ∧ (p ∨ r), from ⟨or.inr hq, or.inr hr⟩))
要走向另一个方向,我们必须展示:
(p ∨ q) ∧ (p ∨ r) → p ∨ (q ∧ r)
鉴于本书到目前为止显示的示例,这个不同之处在于左侧涉及两个 or
表达式......所以似乎我必须使用or.elim
两次......
我搞砸了一些方法。这是一个嵌套or.elim
在另一个内部的一个:
example : (p ∨ q) ∧ (p ∨ r) → p ∨ (q ∧ r) :=
(assume h : (p ∨ q) ∧ (p ∨ r),
have hpq : p ∨ q, from h.left,
have hpr : p ∨ r, from h.right,
or.elim hpq
(assume hp : p,
show p ∨ (q ∧ r), from or.inl hp)
(assume hq : q,
or.elim hpr
(assume hp : p,
show p ∨ (q ∧ r), from or.inl hp)
(assume hr : r,
show p ∨ (q ∧ r), from or.inr ⟨hq, hr⟩)))
这里让我感到奇怪的一件事是以下表达式出现了两次:
(assume hp : p,
show p ∨ (q ∧ r), from or.inl hp)
有没有不涉及这种重复的方法?
有没有更惯用的方法?