Isabelle:证明义务 - 使用反例证明

时间:2016-01-16 20:12:24

标签: isabelle

对于像这样的示例引理:

lemma someFuncLemma: "∀ (e::someType) . pre_someFunc 2 e"

在使用quickcheck时给出以下内容:

Auto Quickcheck found a counterexample:
  e = - 1

或使用Nitpick时(这不是真正的重点):

Nitpick found a counterexample:

  Skolem constant:
    e = - 1

我怎样才能使用这个反例来完成证明?

如您所见,我对Isabelle和PO不是很熟悉。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

反例的存在通常表明你无法证明自己的主张,除非

  • 反例是虚假的;

  • 基础逻辑不一致。

答案 1 :(得分:0)

我假设您要证明存在一些epre_someFunc 2 e为假。您必须更改引理以使用 exists 而不是 forall ,并使用而不是为谓词添加前缀:

lemma "∃e::someType. ¬(pre_someFunc 2 e)"

然后,您可以使用rule exI[where x=...]提供反例,该x会将exI中的自由变量exI设置为某个内容。您可以在Isabelle JEdit中按住x时查看Ctrl的定义以及如何使用lemma "∃n :: nat. ¬ odd n" apply (rule exI[where x=2]) apply simp done

一个简单的例子:

lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1,
    int arg2, long arg3) {
        // TODO Auto-generated method stub
        String strName = listitem.get(arg2).getOppid();

        Toast.makeText(Welcome.this, strName, Toast.LENGTH_LONG)
                .show();
        Intent intent = new Intent(getApplicationContext(), Second_activity.class);
        intent.putExtra("name", strName);//add this line
        startActivity(intent);

    }
});