Section 3.6显示以下内容:
example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) := sorry
让我们专注于左右方向:
example : ((p ∨ q) → r) → (p → r) ∧ (q → r) := sorry
构造此示例的好方法是什么?
如果我采用这样的方式(使用下划线以便我们可以指示总体方法):
example : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
(assume hpqr : (p ∨ q) → r,
(assume hpq : p ∨ q,
or.elim hpq
(assume hp : p,
show (p → r) ∧ (q → r), from and.intro _ _)
(assume hq : q,
show (p → r) ∧ (q → r), from and.intro _ _)))
我们得到:
如果我们将其重组为:
example (hpqr : ((p ∨ q) → r)) : (p → r) ∧ (q → r) :=
(assume hpq : p ∨ q,
or.elim hpq
(assume hp : p,
show (p → r) ∧ (q → r), from and.intro _ _)
(assume hq : q,
show (p → r) ∧ (q → r), from and.intro _ _))
我们似乎更加接近了:
第3章似乎没有其他可行的示例,它们的左侧同时包含∧
和→
。
欢迎提出任何解决方法的建议!
更新
以下是基于Yury建议的方法:
example : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
(assume hpqr : (p ∨ q) → r,
(and.intro
(assume hp : p, hpqr (or.inl hp))
(assume hq : q, hpqr (or.inr hq))))
结果非常简单。 :-)
更新
这是一个可以处理两个方向的iff
版本:
example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) :=
iff.intro
(assume hpqr : (p ∨ q) → r,
show (p → r) ∧ (q → r), from
(and.intro
(assume hp : p, hpqr (or.inl hp))
(assume hq : q, hpqr (or.inr hq))))
(assume hprqr : (p → r) ∧ (q → r),
show ((p ∨ q) → r), from
(assume hqr : p ∨ q,
or.elim hqr
(assume hp : p, hprqr.left hp)
(assume hq : q, hprqr.right hq)))
答案 0 :(得分:3)
在此示例的假设中,您没有p ∨ q
。因此,您必须直接从(assume hpqr, _)
转到and_intro
。我的意思是类似
example (p q r : Prop) : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
assume hpqr,
and.intro (assume p, _) (assume q, _)