标签: proof

上下文自由语言问题(抽取引理)

我知道这与编程没有直接关系,但我想知道是否有人知道如何将泵浦引理应用于以下证明:

证明L = {(a ^ n)(b ^ n)(c ^ m):n!= m}不是无上下文语言

我对使用抽吸引理非常有信心,但这个真的让我感到厌烦.你怎么看?

theory language-theory automata proof

8
推荐指数
1
解决办法
2356
查看次数

声明Lisp函数"纯粹"的能力是否有益?

我最近已经阅读了很多关于Haskell的内容,以及它作为一种函数式语言所带来的好处.(我对讨论Lisp的monad不感兴趣)对我来说(至少在逻辑上)尽可能地隔离具有副作用的函数是有意义的.我已经充分使用了setf其他破坏性功能,并且我认识到它们在Lisp和(大多数)其衍生物中的需要.

开始了:

  1. 是否有(declare pure)可能帮助优化编译器?或者这是一个有争议的问题,因为它已经知道了?
  2. 声明是否有助于证明一个函数或程序,或者至少是一个被声明为纯粹的子集?或者这又是不必要的东西,因为它对程序员和编译器以及证明者来说已经很明显了?
  3. 如果没有别的,程序员是否有用对于编译器来强制执行此声明的函数的纯度并增加Lisp程序的可读性/可维护性?
  4. 这有什么意义吗?或者我太累了甚至不想现在?

我很感激这里有任何见解.欢迎提供有关编译器实现或可证明性的信息.

编辑

为了澄清,我不打算将这个问题限制在Common Lisp中.它显然(我认为)不适用于某些衍生语言,但我也很好奇其他Lisps的某些功能是否倾向于支持(或不支持)这种设施.

lisp computer-science proof compiler-optimization purely-functional

8
推荐指数
1
解决办法
755
查看次数

如何从明显矛盾的假设中证明是假的

假设我想证明以下定理:

Theorem succ_neq_zero : forall n m: nat, S n = m -> 0 = m -> False.
Run Code Online (Sandbox Code Playgroud)

这个是微不足道的m,因为假设不能同时为后继和零.但是我发现证明这一点非常棘手,而且我不知道如何在没有辅助引理的情况下制作它:

Lemma succ_neq_zero_lemma : forall n : nat, O = S n -> False.
Proof.
  intros.
  inversion H.
Qed.

Theorem succ_neq_zero : forall n m: nat, S n = m -> 0 = m -> False.
Proof.
  intros.
  symmetry in H.
  apply (succ_neq_zero_lemma n).
  transitivity m.
  assumption.
  assumption.
Qed.
Run Code Online (Sandbox Code Playgroud)

我很确定有更好的方法来证明这一点.最好的方法是什么?

proof coq

8
推荐指数
2
解决办法
1327
查看次数

如何证明(forall x,P x / \ Q x)->(forall x,P x)

如何在Coq中证明(forall x,P x / \ Q x)->(forall x,P x)?尝试了几个小时,无法弄清楚如何将前项分解为Coq可以消化的内容。(显然,我是新手:)

proof coq

7
推荐指数
1
解决办法
2980
查看次数

正式验证算法的正确性

首先,这只能在没有副作用的算法上实现吗?

其次,我在哪里可以了解这个过程,任何好书,文章等?

algorithm math formal-verification correctness proof

7
推荐指数
2
解决办法
4395
查看次数

使用归纳证明n = Big-O(1)

我知道关系n = Big-O(1)是假的.但是,如果我们使用涉及Big-O的归纳法,则可以证明.但谬论是我们无法引入Big-O.但我的问题是我们如何通过使用常数来反驳这种关系.

这里有错误的证据,请使用常数给我证明它是假的.我对常量感到困惑,我不知道证明中使用的每个关系是否具有不同的常数或相同.请指教一下这个话题.

TO prove: n= O(1)
for n=1 , 1= O(1) proved
Run Code Online (Sandbox Code Playgroud)

归纳假设:确实如此:n-1 = O(1)现在我们证明n = O(1)

LHS :  n = (n-1) + 1 
         =  O(1) + 1
         =  O(1) + O(1)
         =  O(1) 
Run Code Online (Sandbox Code Playgroud)

虚假证明..我想用<=和常量来澄清谬误,这是Big-O的基本定义.

complexity-theory big-o proof

7
推荐指数
3
解决办法
3640
查看次数

使用Ogden引理与常规泵浦引理用于无上下文语法

我正在学习问题中的引理之间的区别.我能找到的每个引用都使用了这个例子:

{(a^i)(b^j)(c^k)(d^l) : i = 0 or j = k = l}
Run Code Online (Sandbox Code Playgroud)

显示两者之间的差异.我可以找到一个使用常规引理来"反驳"它的例子.

选择w = uvxyz,st | vy | > 0,| vxy | <= p.假设w包含相等数量的b,c,d's.

我选择了:

u,v,x = ?
y = (the string of a's)
z = (the rest of the string w)
Run Code Online (Sandbox Code Playgroud)

抽取y只会增加a的数量,如果| b | = | c | = | d | 起初,它现在还会.

(类似的论据,如果w没有a.那么只需抽出你想要的任何东西.)

我的问题是,奥格登的引理如何改变这一策略?"标记"有什么作用?

谢谢!

string math proof pumping-lemma context-free-grammar

7
推荐指数
1
解决办法
5715
查看次数

Isabelle/HOL中验证者的核心

Isabelle/HOL验证器的核心算法是什么?

我正在寻找一个计划水平评估员的水平.

澄清

我只对Verifier感兴趣,而不是自动定理证明的策略.

上下文

我想从头开始实现一个简单的验证验证器(纯粹出于教育原因,而不是用于生产用途.)

我想了解Isabelle/HOL 的核心Verifier算法.我不关心用于自动定理证明的策略/代码.

我怀疑核心Verifier算法非常简单(而且优雅).但是,我找不到它.

谢谢!

proof isabelle

7
推荐指数
2
解决办法
503
查看次数

Isabelle中矛盾的惯用语证明?

到目前为止,我在Isabelle的以下风格中使用矛盾来编写证据(使用Jeremy Siek的模式):

lemma "<expression>"
proof -
  {
    assume "¬ <expression>"
    then have False sorry
  }
  then show ?thesis by blast
qed
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在没有嵌套的原始校样块的情况下工作{ ... }

proof isabelle isar

7
推荐指数
1
解决办法
1102
查看次数

推广折叠使得它变得足够表达以定义任何有限递归?

因此,有一种被称为"折叠的普遍属性"的东西,完全如下:

g [] = i; g (x:xs) = f x (g xs) <=> g = fold f i

但是,正如您现在可能的那样,有一些罕见的情况dropWhile,fold f i 除非您将其概括,否则无法重新定义.

最简单但最明显的推广方法是重新定义通用属性:

g' y [] = j y; g' y (x:xs) = h y x xs (g' y xs) <=> g' y = fold (?) l


在这一点上,我可以做出我的假设:我假设存在某种功能p :: a -> b -> b,这将满足等式g' y = fold p l.让我们尝试用普遍属性帮助解决给定的方程式,一开始就提到:

  • g' y [] = j y = fold p l [] = l …

haskell functional-programming proof generic-programming fold

7
推荐指数
1
解决办法
163
查看次数