lean - TPIL 4.4:示例:¬ (∃ x, ¬ px) → (∀ x, px)
问题描述
精益定理证明的第 4.4 节显示以下内容:
example : (∀ x, p x) ↔ ¬ (∃ x, ¬ p x) := sorry
在这里,我将重点介绍从右到左的情况:
¬ (∃ x, ¬ p x) → (∀ x, p x)
方法一
我们知道我们将有一个类型的参数,¬ (∃ x, ¬ p x)
所以让我们从它开始:
example : ¬ (∃ x, ¬ p x) → (∀ x, p x) :=
(assume hnExnpx : ¬ (∃ x, ¬ p x),
_)
我们知道我们必须返回一个类型的表达式,(∀ x, p x)
所以让我们开始构造它:
example : ¬ (∃ x, ¬ p x) → (∀ x, p x) :=
(assume hnExnpx : ¬ (∃ x, ¬ p x),
(λ x, _))
此时我们需要返回一个类型的值,p x
目前尚不清楚我们是否可以构建一个。也许我们需要尝试提出一个false
值。
该函数hnExnpx
返回false
给定一个(∃ x, ¬ p x)
. 因此,让我们尝试构建其中一个,应用hnExnpx
到它,然后使用false.elim
:
example : ¬ (∃ x, ¬ p x) → (∀ x, p x) :=
(assume hnExnpx : ¬ (∃ x, ¬ p x),
(λ x,
false.elim (hnExnpx (exists.intro x (λ hpx, _)))
))
现在我们又需要另一个false
值了。
方法二
第 3 章提到有时需要经典逻辑。
一种幼稚的方法(em (∀ x, p x))
将我们带到这里:
example : ¬ (∃ x, ¬ p x) → (∀ x, p x) :=
(assume hnExnpx : ¬ (∃ x, ¬ p x),
or.elim (em (∀ x, p x))
(λ hAxpx, hAxpx)
(λ hnAxpx : ¬ (∀ x, p x), (λ x, _))
)
同样,我们需要一个p x
值或一个false
. 我们唯一的新东西是hnAxpx : ¬∀ (x : α), p x
. 目前尚不清楚如何获得p x
. hnAxpx
确实返回 false 但我们需要 a(∀ x, p x)
这是我们正在寻找的原始东西。:-)
也许这涉及更精细地使用经典逻辑?
欢迎任何建议!
更新
这是一种基于下面 simon1505475 评论的方法,该方法似乎有效:
示例: ¬ (∃ x, ¬ px) → (∀ x, px) :=
(assume hnExnpx : ¬ (∃ x, ¬ p x),
(λ x,
or.elim (em (p x))
(λ hpx : p x, hpx)
(λ hnpx : ¬ p x,
false.elim (hnExnpx (exists.intro x (λ hpx : p x, hnpx hpx))))))
解决方案
推荐阅读
- angular - NGRX:createReducer 正在命中,即使没有调用该动作
- reactjs - 为什么使用 use-callback-ref 中的 useCallbackRef 时调用两次 useEffect
- javascript - 使用 curl 登录网页失败
- ios - 我可以在 SwiftUI 深色模式下覆盖黑色背景颜色吗?
- android - 无法在 Mac 10.10.5 和 Windows 10 上运行 Android 模拟器(在 git hub 上报告为第二个问题)
- git - 通过 VS 代码中的 git 在两台不同的机器上设置 github SSH 连接
- python - 安全后备以在桌面应用程序的用户路径中查找 python 二进制文件?
- javascript - 为什么我不能将这个我自己的 React Native 文件(WelcomeScreen.js)导入到我的 App.js 文件中?
- c# - 当我从数据库(在 ASP.NET Core 中)检索数据时,如何在 data-src 属性的 div 中键入图像 URL?
- swiftui - SwiftUI - .fileImporter 修饰符来加载美元文件