例如:(((p∨q)→r)→(p→r)∧(q→r)

时间:2019-10-19 14:31:30

标签: lean

精益定理证明的

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 _ _)))

我们得到:

enter image description here

如果我们将其重组为:

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 _ _))

我们似乎更加接近了:

enter image description here

第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)))

1 个答案:

答案 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, _)