example : ((p ∨ q) → r) → (p → r) ∧ (q → r)

蹲街弑〆低调 提交于 2020-02-06 07:39:52

问题


Section 3.6 of Theorem Proving in Lean shows the following:

example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) := sorry

Let's focus on the left-to-right direction:

example : ((p ∨ q) → r) → (p → r) ∧ (q → r) := sorry

What's a good way to structure this example?

If I go with something like this (with underscores used so that we can indicate the overall approach):

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

we get:

If we restructure it as:

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

we seem to get a little closer:

Chapter 3 doesn't seem to have other worked examples which involve both an and a on the left side.

Any suggestions on how to approach this are welcome!


UPDATE

Here's an approach based on Yury's recommendation below:

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

Turns out to be quite simple. :-)


UPDATE

Here's an iff version that handles both directions:

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:


You don't have p ∨ q in the assumptions of this example. So, you have to go from (assume hpqr, _) directly to and_intro. I mean, something like

example (p q r : Prop) : ((p ∨ q) → r) → (p → r) ∧ (q → r) := 
assume hpqr,
and.intro (assume p, _) (assume q, _)


来源:https://stackoverflow.com/questions/58464712/example-p-%e2%88%a8-q-%e2%86%92-r-%e2%86%92-p-%e2%86%92-r-%e2%88%a7-q-%e2%86%92-r

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!