如何使用 LEAN 证明命题逻辑中的两个陈述?
How to prove two statements in propositional logic using LEAN?
LEAN 教程第 3 章末尾的两个证明我仍在努力(因此阻止我进一步阅读手册)如下:
theorem T11 : ¬(p ↔ ¬p) := sorry
我证明正确含义的尝试在这一点上停止了:
theorem T11R : ¬(p → ¬p) :=
begin
assume hyp : p → ¬ p,
cases (em p) with hp hnp,
exact (hyp hp) hp,
exact sorry
end
显然我还不知道如何使用 ¬p
。也不确定如何显示左蕴涵。另一个是这样的:
theorem T2R : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
begin
intros porqr, sorry
end
我应该使用(作为正确的暗示)来显示以下内容:
theorem T2 : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) :=
begin
have goR : ((p ∨ q) → r) → (p → r) ∧ (q → r), from T2R p q r,
have goL : (p → r) ∧ (q → r) → ((p ∨ q) → r), from T2L p q r,
exact iff.intro (goR) (goL)
end
这里是左边:
theorem T2L : (p → r) ∧ (q → r) → ((p ∨ q) → r) :=
begin
intros prqr,
assume porq : p ∨ q,
exact or.elim porq prqr.left prqr.right
end
theorem T11R
不正确,例如如果 p
是 false
那么 p → ¬ p
是正确的。
¬(p ↔ ¬p)
不等同于 (¬ (p → ¬ p)) ∧ ¬ (¬ p → p)
;等同于¬ ((p → ¬ p) ∧ (¬ p → p))
,两者不同
对于 theorem T2R
如果你使用 split
战术,它会给你两个目标,一个用于 and
的每一侧。您可以使用 left
和 right
策略将目标 p ∨ q
变成 p
或 q
。定理 or.inl
和 or.inr
也可用于证明 or
。
这是 T2R
的证明
theorem T2R : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
begin
intros porqr,
split,
{ assume hp : p,
apply porqr,
left,
exact hp },
{ assume hq : q,
apply porqr,
right,
exact hq },
end
LEAN 教程第 3 章末尾的两个证明我仍在努力(因此阻止我进一步阅读手册)如下:
theorem T11 : ¬(p ↔ ¬p) := sorry
我证明正确含义的尝试在这一点上停止了:
theorem T11R : ¬(p → ¬p) :=
begin
assume hyp : p → ¬ p,
cases (em p) with hp hnp,
exact (hyp hp) hp,
exact sorry
end
显然我还不知道如何使用 ¬p
。也不确定如何显示左蕴涵。另一个是这样的:
theorem T2R : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
begin
intros porqr, sorry
end
我应该使用(作为正确的暗示)来显示以下内容:
theorem T2 : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) :=
begin
have goR : ((p ∨ q) → r) → (p → r) ∧ (q → r), from T2R p q r,
have goL : (p → r) ∧ (q → r) → ((p ∨ q) → r), from T2L p q r,
exact iff.intro (goR) (goL)
end
这里是左边:
theorem T2L : (p → r) ∧ (q → r) → ((p ∨ q) → r) :=
begin
intros prqr,
assume porq : p ∨ q,
exact or.elim porq prqr.left prqr.right
end
theorem T11R
不正确,例如如果 p
是 false
那么 p → ¬ p
是正确的。
¬(p ↔ ¬p)
不等同于 (¬ (p → ¬ p)) ∧ ¬ (¬ p → p)
;等同于¬ ((p → ¬ p) ∧ (¬ p → p))
,两者不同
对于 theorem T2R
如果你使用 split
战术,它会给你两个目标,一个用于 and
的每一侧。您可以使用 left
和 right
策略将目标 p ∨ q
变成 p
或 q
。定理 or.inl
和 or.inr
也可用于证明 or
。
这是 T2R
theorem T2R : ((p ∨ q) → r) → (p → r) ∧ (q → r) :=
begin
intros porqr,
split,
{ assume hp : p,
apply porqr,
left,
exact hp },
{ assume hq : q,
apply porqr,
right,
exact hq },
end