Coq中的恢复策略和概括策略有什么区别?

时间:2016-06-28 04:46:00

标签: coq coq-tactic

根据Coq参考手册(8.5p1),我的印象是revertintro相反,但在某种程度上generalize也是如此。例如,下面的revertgeneralize dependent似乎相同。

Goal forall x y: nat, 1 + x = 2 + y -> 1 + x + 5 = 7 + y.
intros x y. revert x y.
intros x y. generalize dependent y. generalize dependent x. 

只是generalizerevert更强大吗?

此外,文档在解释有关generalize

的内容时有点循环
  

这种策略适用于任何目标。它概括了结论   尊重某个词。

generalize是否与lambda演算中的抽象运算符类似?

2 个答案:

答案 0 :(得分:3)

是的,generalize更强大。您通过使用revert模拟revert,证明它至少具有与generalize相同的能力。 请注意,generalize适用于任何条款revert - 仅适用于标识符

例如,revert无法执行手册中的示例:

  x, y : nat
  ============================
  0 <= x + y + y

Coq < generalize (x + y + y).
1 subgoal

  x, y : nat
  ============================
  forall n : nat, 0 <= n

至于&#34;循环&#34;在定义中,真正的解释正好在示例下面:

  

如果目标是Gt是目标中T类型的子项,那么generalize tforall x:T, G0替换为目标{}通过G0替换G的所有匹配项,从t获取1}}。

基本上,这表示x将您的目标包含在generalize中,将一些字词替换为新变量(forall)。

当然,x应该谨慎使用,因为在使用它之后可能会得到一个虚假陈述:

generalize

答案 1 :(得分:1)

根据我的记忆,<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingBottom="5dp"`enter code here` android:paddingLeft="5dp" android:paddingRight="5dp"> <LinearLayout android:background="@color/colorPrimary" android:weightSum="10" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_weight="6" android:id="@+id/startbtn" android:textStyle="bold" android:alpha="0.8" android:textColor="#fff" android:text="start" android:layout_centerInParent="true" android:background="@drawable/common_ic_googleplayservices" android:layout_width="match_parent" android:layout_height="150dp"/> <LinearLayout android:layout_marginTop="20dp" android:layout_marginBottom="20dp" android:orientation="vertical" android:layout_weight="3" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="2"> <TextView android:textColor="#fff" android:id="@+id/tv_challange_title" android:textSize="20sp" android:text="Early-Bird Challange" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/tv_challange_desc" android:alpha="0.5" android:textColor="#000" android:textSize="15sp" android:layout_marginTop="5dp" android:text="Take 100 steps five times within.. " android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout> </LinearLayout> </RelativeLayout> 只是revert的一种简单形式,通常更容易用于新手:它与generalize相反。使用intro的味道,你可以做更多的事情(尤其是术语和类型之间的依赖)。