微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在精益证明的目标中应用函数

如何解决在精益证明的目标中应用函数

一个树数据结构和一个 flip 方法。我想写一个证明,如果您将 flip 方法应用于一棵树两次,您将获得初始树。我有一个目标

⊢ flip_mytree (flip_mytree (mytree.branch t_ᾰ t_ᾰ_1 t_ᾰ_2)) = mytree.branch t_ᾰ t_ᾰ_1 t_ᾰ_2

我想用 flip_mytree (mytree.branch t_ᾰ t_ᾰ_1 t_ᾰ_2) 的结果替换 flip_mytree。我该怎么做?或者如何将 (mytree.branch a l r) := mytree.branch a (flip_mytree r) (flip_mytree l) 假设从 flip_mytree 函数定义中提取到我的定理上下文中?

我已经阅读了 rwapplyhave 策略,但它们在这里似乎没用。

下面是一个完整的例子。

universes u

inductive mytree (A : Type u) : Type u
| leaf : A → mytree
| branch : A → mytree → mytree → mytree

def flip_mytree {A : Type u} : mytree A → mytree A
| t@(mytree.leaf _)     := t
| (mytree.branch a l r) := mytree.branch a (flip_mytree r) (flip_mytree l)


theorem flip_flip {A : Type u} {t : mytree A} : flip_mytree (flip_mytree t) = t :=
begin
  cases t,end

解决方法

我认为您需要进行归纳而不是案例才能使其起作用。 但这只需 inductionrw 如下

universes u

inductive mytree (A : Type u) : Type u
| leaf : A → mytree
| branch : A → mytree → mytree → mytree

def flip_mytree {A : Type u} : mytree A → mytree A
| t@(mytree.leaf _)     := t
| (mytree.branch a l r) := mytree.branch a (flip_mytree r) (flip_mytree l)


theorem flip_flip {A : Type u} {t : mytree A} : flip_mytree (flip_mytree t) = t :=
begin
  induction t with l a b₁ b₂ ih₁ ih₂,rw [flip_mytree],refl,rw [flip_mytree,flip_mytree],rw [ih₁,ih₂],end
,

证明它的几种替代方法

theorem flip_flip {A : Type u} : ∀ {t : mytree A},flip_mytree (flip_mytree t) = t
| t@(mytree.leaf _)     := rfl
| (mytree.branch a l r) := by rw [flip_mytree,flip_mytree,flip_flip,flip_flip]

theorem flip_flip' {A : Type u} {t : mytree A} : flip_mytree (flip_mytree t) = t :=
by induction t; simp [*,flip_mytree]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。