在Welder中使用notI。示例矛盾证明

时间:2017-04-18 19:01:55

标签: leon

在Welder中使用notI构造时遇到一些问题。以下面作为示例证明:

我的例子使用关于环结构的通常引理和衍生引理(zeroDivisorLemma),它表示对于所有' a'在环中a0 = 0 = 0a。

我证明如果两个元素不为零,则它们的乘积不为零。如下。

val theorem: Theorem = 
  forallI("a"::F,"b"::F){ case (a,b) => 
    implI(and(a !== z, b !== z,multInverseElement,multNeutralElement,multAssociative,
              addOppositeElement,addNeutralElement,addAssociative,isDistributive)){ axioms => 
      val Seq(aNotZero,bNotZero,multInverseElement,multNeutralElement,multAssociative,
              addOppositeElement,addNeutralElement,addAssociative,isDistributive) = andE(axioms) : Seq[Theorem]
      notI((a ^* b) === z) { case (hyp,_) => 
        ((a ^* b) === z)                         ==| andI(bNotZero,hyp)                                    |
        (((a ^* b) ^* inv(b)) === (z ^* inv(b))) ==| forallE(multAssociative)(a,b,inv(b))                  |
        ((a ^* (b ^* inv(b))) === (z ^* inv(b))) ==| andI(forallE(multInverseElement)(b),bNotZero)         |
        ((a ^* one) === (z ^* inv(b)))           ==| forallE(multNeutralElement)(a)                        |
        (a === (z ^* inv(b)))                    ==| forallE(implE(zeroDivisorLemma)(g => axioms))(inv(b)) |
        (a === z)                                ==| aNotZero     |
        ((a !== z) && (a === z))                 ==| trivial |
        (a !== a)                                ==| trivial |
        BooleanLiteral(false) 
      }
    }
  }

代码编译但Welder说:

  

SMT求解器无法证明该属性:false

     

来自假设:   (mult(a,b)== zero())== false。

我说我没有将正确的功能传递给构造。有人可以解释我应该写什么才能成功?是否与类型有关,即(Theorem,Goal)=>尝试[证人]?我需要提供一个定理并证明目标吗?

还有什么可以证明是假的?我应该使用某种含义介绍吗?

1 个答案:

答案 0 :(得分:1)

错误说的是,它无法推断出与你所展示的内容的矛盾。实际上,你没有在<div id="root"> <task-list></task-list> <template id="my-parent"> <table> <thead> <tr> <th>Name</th> <th>id</th> </tr> </thead> <tbody> <tr is="task" v-for="item in items" :item="item"></tr> </tbody> </table> </template> <template id="my-child"> <tr> <td></td> <td>{{ item.name }}</td> <td>{{ item.id }}</td> </tr> </template> </div> <script> Vue.component('task-list', { template: '#my-parent', data: function() { return { items: [] } }, methods: { getMyData: function(val) { var _this = this; $.ajax({ url: 'vuejson.php', method: 'GET', success: function (data) { console.log(data); _this.items = data; }, error: function (error) { alert(JSON.stringify(error)); } }) } }, mounted: function () { this.getMyData("0"); } }); Vue.component('task', { template: '#my-child', props: ['item'], data: function() { return { item: {} } } }); new Vue({ el: "#root", }); </script> 的身体中表现出矛盾。证明notI是正确的推导,但您仍需要通过与(mult(a, b) == zero()) == false结合来明确显示矛盾。

这样的事情会起作用吗?

hyp