代替Isabelle中的lambda表达式

时间:2015-01-28 01:03:10

标签: isabelle

给定函数f:

definition f :: "real => real"
where "f x = x"

我可以证明,当n趋于0时,f(x + n)倾向于f(x)由下面的引理

lemma "(λn. f(x+n)) -- 0 --> f x"
unfolding f_def
apply (auto intro!: tendsto_eq_intros)
done

作为进一步的步骤,我想表明当(y-x)趋于0时,f(x +(y-x))倾向于f(x)。基本上,让n = y-x。

我无法解决这个问题,因为我无法替代lambda运算符,甚至不能让n = y-x。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

融合始终需要一个功能来识别哪些变化。但是,声明" (y - x)倾向于0"不会使变化部分明确。哪个变量有变化?如果x已修复并且y发生了更改,那么您可以将其表达为(%y. x - y),如果xy都发生变化,那么它就是%(x, y). x - y }。

一旦确定,您就可以使用合成定理LIM_compose_eventually来限制。但请注意,at内部使用的过滤器-- _ -->不会评估目标点本身的功能。例如,(%n. f (x + n)) -- 0 --> f x成立,(%n. if n = 0 then 10000 else f (x + n)) -- 0 --> f x成立。因此,如果函数%y. x - y等于邻域中的0,则该定理将不起作用。在这种情况下,您应该能够直接证明您的结果。

答案 1 :(得分:0)

你可以证明

“(λ(x,y)。x-y) - 0 - >(0 :: real)”

将其改写为:

“(λx.fstx - snd x) - (0,0) - >(0 :: real)”

然后tendsto_eq_intros应该可以工作。

答案 2 :(得分:0)

简短回答

  • 永远陷入低级别的困境中,我忘记了所有的微积分,但我这样做了。
  • 我依靠epsilon-delta定义尝试检查自己(wiki epsilon-delta limit)
  • 我要求我只限制1变量函数。

您从限制的 h-form delta-x表单开始。我在这里用我的非正式限制符号将其翻译成我认为HOL表示法的含义:

 F1: limit[h -> 0]f(x + h) = f(x)

h = y - x。现在,定义了 delta-x 。通过简单的替换,我得到了这个:

F2: limit[(y - x) -> 0]f(x + (y - x)) = f(x)

为了理解它,我这样说:

  

对于固定值xy变为x,因此|y - x|变为零,限制为f(x)

在长答案中,我使用epsilon-delta定义展开F2以检查限制公式是否有效。

将所有内容转换为HOL,并使用非缩写表示法,我得到了这个:

lemma "(((λy x. f(x + (y - x))) x) ---> f x) (at (0::real))"
  apply(simp add: f_def )
  by(metis tendsto_const)

您可以查看我的答案中的详细信息和评论,看看我是否正确。需要注意公式f(x + (y - x)) = f(y)

长答案

我在底部包含了一个完整的理论,但首先要详细说明。

正如A. Lochbihler提到的那样,我认为起点是决定我们在做什么空间。它是1变量还是2变量微积分?

你的函数f是1变量的,所以我认为它是一个硬性要求。这意味着我尽力不采用2变量函数的限制。

我认为问题主要是将标准限制符号与HOL限制符号相匹配。

我切换到非缩写的HOL符号表示限制:(f ---> L) (at a)。这是给我自己的,它来自Topological_Spaces.thy#l1868

(*abbreviation
  LIM :: "('a::topological_space ⇒ 'b::topological_space) ⇒ 'a ⇒ 'b ⇒ bool"
        ("((_)/ -- (_)/ --> (_))" [60, 0, 60] 60) where
  "f -- a --> L ≡ (f ---> L) (at a)" *)

在这里,我现在使用自己的符号给出两种不同形式的限制:

F0: limit[x -> c]f(x) = f(c)

F1: limit[h -> 0]f(x + h) = f(x)

我通过简单替换获得第三种形式,如上所示:

F2: limit[(y - x) -> 0]f(x + (y - x)) = f(x)

F2的两种HOL形式位于理论的底部,即:

lemma "(((λy x. f(x + (y - x))) x) ---> f x) (at (0::real))"
  apply(simp add: f_def )
  by(metis tendsto_const)

lemma
  fixes g :: "real => real => real"
  assumes "g = (λy x. f(x + (y - x)))"
  shows "((g x) ---> f x) (at (0::real))"
    apply(simp add: f_def assms)
  by(metis tendsto_const)

这是从Notepad ++复制的理论,所以它都是ASCII字符。

theory i150128a_limits
imports Complex_Main begin
(*abbreviation
  LIM :: "('a::topological_space => 'b::topological_space) => 'a => 'b => bool"
        ("((_)/ -- (_)/ --> (_))" [60, 0, 60] 60) where
  "f -- a --> L \<equiv> (f ---> L) (at a)" *)

--{*| F0: limit[x -> c]f(x) = f(c) |*}
    (*Constant c is fixed, and x will vary to c, so (x - c) or (c - x) goes 
      to 0.*)

--{*| F1: limit[h -> 0]f(x + h) = f(x) |*}
    (*For a fixed value of variable 'x', 'h' will vary to 0, so 
      '(x + h)' will go to x.
     Limit definition for this limit:     
     ALL e > 0. EX d > 0. if 0 < |h - 0| < d then |f(x + h) - f(x)| < e. 
     So, if 'f x = x', then 0 < |h| < d --> |x + h - x| = |h| < e. Let d = e.*)

--{*| HAVE: f definition |*}
  definition "f x = (x::real)"

--{*| HAVE: The lemma formula. It appears to match up with F1 above. For a
      fixed value of variable 'x', the bound variable 'h' in  formula 
      '(\<lambda>h. f(x + h))' will vary to 0. |*}

  term "((\<lambda>h. f(x + h)) ---> f x) (at (0::real))"

--{*| LET: h = y - x.                              |*}
--{*| By substitution in F1:                       |*}
--{*| F2: limit[(y - x) -> 0]f(x + (y - x)) = f(x) |*}
    (*Similar to F1, for a fixed x, y goes to x, so (x - y) and (y - x) will 
      go to zero.*)     

    (* ALL e > 0. EX d > 0. 
         if 0 < |(y - x) - 0| < d then |f(x + (y - x)) - f(x)| < e. 
       If 'f x = x' then if 0 < |y - x| < d 
         then |x + (y - x) - x| = |y - x| < e. Again, let d = e. *)

--{*| In the next lemma, 'g = ((\<lambda>y x. f(x + (y - x))) x)' is a  
      1-variablefunction in which 'y' varies to 'x', as in F2 above.  
      There is'x' in the 'shows' formula, which is a free variable. Though
       it is a variable, for a fixed 'x', the 'x' in 'g' is the same 'x' as 
       in 'f x'.|*}    
  lemma
    fixes g :: "real => real => real"
    assumes "g = (\<lambda>y x. f(x + (y - x)))"
    shows "((g x) ---> f x) (at (0::real))"
      apply(simp add: f_def assms)
    by(metis tendsto_const)

--{*| The consolidated form. |*}
  lemma "(((\<lambda>y x. f(x + (y - x))) x) ---> f x) (at (0::real))"
    apply(simp add: f_def )
    by(metis tendsto_const)

end

答案 3 :(得分:0)

更新我的其他答案:我的HOL公式错误

我不解释为什么我这样操作,但我无法编辑其他答案,而HOL公式是错误的。纠正这样的事情会导致混乱,所以我会试着远离这一切。

我的纠正最终变得冗长,这可能被视为造成更加混乱。如果我的2个答案被删除,我真的不在乎。我只想尝试以几种方式纠正自己。早些时候,我提交了第一个答案的编辑。如果它通过,事情变得更加混乱。

关于错误的简短回答是,在lambda演算函数中,我有y x我应该放x y,这不会有允许lemma被证明。一个教训是,一个人不能证明任何不真实的东西(假设HOL的一致性),但是一个人可以证明一些无意义的东西,我已经知道,证明了许多毫无意义的事情。

更正了,它是这样的:

--{*| The consolidated form CORRECTED AND BOGUS. |*}
  lemma "(((%x y. f(x + (y - x))) x) ---> f x) (at (0::real))"
    apply(simp add: f_def )
  (*GOAL: (%y::real. y) -- 0::real --> x*)
  oops

我之前尝试将h调查为delta x

在我看来,问题的基础围绕着试图在标准限制公式中明确h的含义。

我认为这是一次合法的练习。可以简单地看出不同的限制公式是等价的,但是,对于一个特定的人,不知道如何在HOL中形成琐碎的事情会使事情变得非常微不足道,其中最终结果甚至可能是&#34的情况;这是一个微不足道的问题,为什么它的形式化并不简单?&#34;

h form转换为x - c表单,未能在HOL form

中获取所有内容

从我的角度来看,这主要与两个问题有关:

  • 在使用标准限制公式时,它们定义类似h = x - c的内容,其中c是常量,但
    • 在我的搜索中,我找不到任何人明确替换x - c h的地方,
    • 所以我不能权威地检查自己的替换是否遵循标准,符号惯例,
    • 我没有时间挖掘真实的分析书籍,以确保我对所涉及的所有符号都有准确的理解。
  • 此外,1变量微积分的标准限制符号表示法需要转换为HOL限制函数,但是
    • 我不知道该怎么做。我一般喜欢在健康的偏执狂下进行操作,但在这里,我最终需要一个了解HOL的人,但他的脑海里还有新的微积分和真实的分析。

达到目的(混淆点第1部分)

我不知道OP究竟是什么并且正在思考,但我将1变量,连续函数的极限作为起点,因为他的f相当于{{1 }}。在这里,我使用我的非正式表示法:

id

在我的第一个问题中,我说&#34;对于固定的x,y变化为x&#34;。然而,这是1变量微积分,所以只有一件事变化,而且F0: limit[x -> c]f(x) = f(c). x。在公式中,c是常量。现在,健康的偏执狂,我正在寻找我的个人数学家说,&#34;是的,当然。那是微不足道的。&#34;如果我第一次感到有些困惑,那会是什么呢?它可能会再一次似曾相识。

我想用 delta x 来思考,所以我让h = x - c,然后我用下一个F0替换F1

F1: limit[h -> 0]f(c + h) = f(c).

我根本不喜欢这个。 h的使用通常不会发挥作用。我的答案越来越长,因为我觉得有必要说出类似的东西,我会看到类似于这个微积分书的东西,但我想找到它完全正式化的地方。我在限制和衍生部分查看了Apostol的真实分析书,我没有看到h的任何草率使用,但后来我没有看到任何h的用法。 1}}我看了很短的时间,而且我没有时间继续寻找。&#34;

无论如何,我想明确h是什么,所以我明白了:

  F2: limit[(x - c) -> 0]f(c + (x - c)) = f(c).
= F3: limit[(x - c) -> 0]f(x) = f(c). 

基于一本典型的微积分书&#34;在斯图尔特的教科书中,作者将阐明h是什么,这里是斯图尔特做的一点,在h -> 0的使用范围内:

  

请注意,x接近c [实际上,&#39; a&#39;在书中,h接近0(因为h = x - c),所以斜率的表达式...... [斯图尔特,第6页,第145页]

形式化完全在他的括号中,&#34;(因为h = x - c)&#34;,这根本没有形式化。但是,他的书并不是一本关于真实分析的完全正式的书,尽管它很严格。

重点是什么? (最后,最后的混淆点)

存在两难问题,h的目的是强调f(c + h)h将会变为0.但如果你做了替换,那么你最后只有f(x),如F3。在替换之后,f中的变量没有变为0.我们回到x前往c,与我的起点{{1}一样}}

最后,考虑一下这个HOL引理:

F0

这不是我需要的,但它代表了我的需要。我需要一个固定的常数lemma "((%x. f(c + (x - c))) ---> f c) (at (0::real))" apply(simp add: f_def ) (*GOAL: (%x::real. x) -- 0::real --> c*) oops 。单凭0并不好,因为基本上说c将会变为0.我需要说的是x将为0。

我不知道如何解决所有问题。

涉及一些简单的简化,例如x - c,但正确的答案不是,&#34;嗯,它&#39;在平凡的情况下,你能看到吗?&#34;我是这么认为的,但我也可以犯下最微不足道的错误。