Isabelle 结构化的证明。和应用风格?是的,你也希望这样,这与自然演绎规则紧密相连

Isabelle 结构化的证明。和应用风格?是的,你也希望这样,这与自然演绎规则紧密相连,isabelle,Isabelle,GC44免费小提示:thm lem2向您展示了我的lem2的证明语句。我使用了假定/显示样式,而不是像您使用的A==>B==>C样式,但是这两种样式的证明语句都是相同的,可以使用thm来显示 subst公理是HOL替换的核心 如果有价值的话,我会增加更多的价值 因为问题是关于替换的,我证明了公理substit是能够基于HOL等式操作符=进行替换的最底层,并且我使用基于表达式的术语来具体说明substit公式 我之所以这样做,部分原因是因为上面我说的是“我想”,这让我很烦 HOL公理subst位于

GC44免费小提示:
thm lem2
向您展示了我的
lem2
的证明语句。我使用了
假定/显示
样式,而不是像您使用的
A==>B==>C
样式,但是这两种样式的证明语句都是相同的,可以使用
thm
来显示

subst
公理是HOL替换的核心 如果有价值的话,我会增加更多的价值

因为问题是关于替换的,我证明了公理
substit
是能够基于HOL等式操作符
=
进行替换的最底层,并且我使用基于表达式的术语来具体说明
substit
公式

我之所以这样做,部分原因是因为上面我说的是“我想”,这让我很烦

HOL公理
subst
位于HOL.thy的第158行,重申为一个定理:

theorem --"subst:" 
  "s = t ==> P s ==> P t"
by(rule subst)
您的
lem1
的形式是
xs∈ I==>s=t
。在
lem2
的证明中,在a2和this的
语句中,你基本上有
s=t
ps
,因此根据
subst
公理你有
pt

在这里,我将
s
t
ps
pt
与您的值具体化,其中
by(rule subst)
语句直接使用了
subst
公理,而不是使用
subst
方法:

theorem 
  "map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs
  ==> (
  (map h1 xs) ∈ K ==> 
    (map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs) ∈ K      
  )"
by(rule subst)
这并不完全令人满意,因为我想查看表单
ps
pt
。因此,使用我的lambda微积分的基本知识,我做
P=(%x.x)∈ K) 


至于
auto
在结构化证明中做了什么,我假设它没有直接使用
subst
公理,但是在某种程度上,
subst
公理是它可以进行替换的原因,我想,我说我想总是掩盖我的逻辑尾巴,在最琐碎的事情上。

埃贝尔首先提出了这个问题。在他的答案出现之前,我已经想出了一个解决方案,所以我继续介绍它,同时尝试增加一些价值。我还将其与Eberl的apply style证明进行了比较

(如果您只是想要证据,请跳到底部。)

我的回答实际上是试图就如何实现证明这一艰巨任务提出一个小建议,而很多时候,逻辑应该是什么是非常明显的

在这种情况下,
lem1
,加上第二个
引理的条件,很明显这应该是很容易证明的

谈到埃贝尔,似乎他可能没有注意到,他可能没有注意到,我也不认识他,但据我所知,我把他归类为“专家”,他在图姆的研究生课程中,可以接触到专家,而伊莎贝尔的大部分行动都在那里

你问起替换的问题,所以他给了你几个证明,他把自己局限于一个必须使用
subst
方法的证明。这些专家在能够快速提出证据方面非常重要,但最终,像我和你这样的人需要在如何使用伊莎贝尔方面达到他们的理解水平

与埃贝尔不同,我集思广益,想尽一切办法来证明这个定理。好吧,你的建议是,基于
lem1
中的等式应该很容易,这给了我一些想法

为了快速结束任何形式的夸夸其谈,我建议您尝试摆脱完全依赖于使用自动工具在一大步中获得证明的状态,并学习如何使用结构化证明或应用样式证明将证明分解为更小的步骤。就我自己而言,我明白这两种风格的重要性

我会给你一个900页的教科书的链接,关于如何学习伊莎贝尔,从自然演绎开始,并把你带到一个中等水平,就像马丁·奥德斯基的《学习斯卡拉》一书,但伊莎贝尔不存在这样一本书,否则我会读,或者已经读过

我给出了一个结构化的证明。如果您理解Isar证明命令,那么它只是说明逻辑上显而易见的,而
auto
处理底层细节。这是一个例子,在详细的证明步骤中,使用自然推理规则很多时候是不需要的

我们面临的一个挑战是学习所有Isar关键词和缩写,例如
have
从此have
然后
因此
和facts
,等等。起初这是一项艰巨的任务,但可行,尽管我仍然需要做很多可行的事情

这里是我命名为
lem2
的证明的概要,其中(我猜想)它最终基于
subst
HOL.eq
公理,其中
HOL.eq
是HOL等式操作符
=

  • 因为
    lem1
    的假设也是
    lem2
    的一个条件,所以
    lem1
    的等式成立
  • 通过
    lem2
    a2
    ,由于
    lem1
    的等式成立,证明了
    lem2
    的结论
  • 这是一个很长的答案,有些人可能不喜欢这么多废话。这只是为了表明,如果你有专业知识,你可以使用一些基本的逻辑来完成工作。自动工具只能帮你做到这一点。不依赖他们需要很多工作

    lemma lem1:
      "xs ∈ I 
         ==> (map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs)"
    by(auto)
    
    lemma lem2:
      assumes a1: "xs ∈ I"
      assumes a2: "(map h1 xs) ∈ K"
      shows "(map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs) ∈ K"
    proof-
      from a1
    have "(map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs)"
      by(auto simp add: lem1)
      from a2 and this 
        (* I could have used the abbreviation `with a2`. There are tons of
           abbreviations to learn.*)
    show "(map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs) ∈ K"
      by(auto)
    qed
    
    thm lem2
    
    像上面那样,把一个证据破译成我所说的赤裸裸的证据实际上是在浪费时间。尝试和错误的尝试,用自动方法来填补空白,实际上给了我太多的成功。我浪费了太多的时间去做这件事,而不是有条不紊地使用对自然演绎规则的良好理解,以及结构化证明的Isar技术。和应用风格?是的,你也希望这样,这与自然演绎规则紧密相连

    GC44免费Tri
    lemma lem1:
      "xs ∈ I 
         ==> (map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs)"
    by(auto)
    
    lemma lem2:
      assumes a1: "xs ∈ I"
      assumes a2: "(map h1 xs) ∈ K"
      shows "(map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs) ∈ K"
    proof-
      from a1
    have "(map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs)"
      by(auto simp add: lem1)
      from a2 and this 
        (* I could have used the abbreviation `with a2`. There are tons of
           abbreviations to learn.*)
    show "(map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs) ∈ K"
      by(auto)
    qed
    
    thm lem2
    
    theorem --"subst:" 
      "s = t ==> P s ==> P t"
    by(rule subst)
    
    theorem 
      "map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs
      ==> (
      (map h1 xs) ∈ K ==> 
        (map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs) ∈ K      
      )"
    by(rule subst)
    
    theorem 
      "map h1 xs = map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs
      ==> (
      (%x. x ∈ K) (map h1 xs) ==> 
        (%x. x ∈ K) (map (%x. if ∃ys ∈ I. x ∈ set ys then h1 x else h2 x) xs)      
      )"
    by(rule subst)