【发布时间】:2019-04-28 23:03:53
【问题描述】:
我想通过精益中的归纳来简化证明。
我在 Lean 中定义了一个具有 3 个构造函数的归纳类型,并在此类型上定义了一个二元关系。我已经包含了这些公理,因为 Lean 不允许我将它们作为 rel 的构造函数。
inductive Fintype : Type
| a : Fintype
| b : Fintype
| c : Fintype
inductive rel : Fintype → Fintype → Prop
| r1 : rel Fintype.a Fintype.b
| r2 : ∀ p : Prop, (p → rel Fintype.a Fintype.c )
| r3 : ∀ p : Prop, (¬ p → rel Fintype.c Fintype.b)
axiom asymmetry_for_Fintype : ∀ x y : Fintype, rel x y → ¬ rel y x
axiom trivial1 : ¬ rel Fintype.c Fintype.a
axiom trivial2 : ¬ rel Fintype.b Fintype.c
axiom trivial3 : ∀ p : Prop, rel Fintype.a Fintype.c → p
axiom trivial4 : ∀ p : Prop, rel Fintype.c Fintype.b → ¬ p
一个目标是证明以下定理:
def nw_o_2 (X : Type) (binrel : X → X → Prop) (x y : X) : Prop := ¬ binrel y x
def pw_o_2 (X : Type) (binrel : X → X → Prop )(x y : X) : Prop := ∀ z : X, (binrel z x → binrel z y) ∧ (binrel y z → binrel x z)
theorem simple17: ∀ x y : Fintype, nw_o_2 Fintype rel x y → pw_o_2 Fintype rel x y :=
我已经通过对 x、y 和 z 的归纳证明了这一点; “z”来自上面 pw_o_2 的定义。但是证明很长(约 136 行)。有没有其他方法可以得到更短的证明?
【问题讨论】:
-
你能在网上发布你的证明吗(可能是 Github gist 或 pastebin)。你用的是术语模式还是战术模式?或者,在leanprover.zulipchat.com 上提问以获得更多互动。
-
@jmc 我已经使用了策略。这是证明的链接:pastebin.com/VR4H5g10。
-
您可以使用
all_goals和try和repeat策略压缩您的证明。但是,如果您真的可以使用dec_trivial将其变成单线,我不会感到惊讶。您可能想阅读最后一个。 -
太棒了!我已将证明的长度减少到其原始长度的四分之一。谢谢。
标签: theorem-proving lean