在推论中使用记忆而不是命题会在Coq中产生“错误类型”错误

用户名

这是自然数均匀性的归纳和计算定义。

Inductive ev : nat -> Prop :=
  | ev_0 : ev O
  | ev_SS : forall n:nat, ev n -> ev (S (S n)).

Definition even (n:nat) : Prop := 
  evenb n = true.

以及一个暗示另一个的证明。

Theorem ev__even : forall n,
  ev n -> even n.
intros n E.
induction E as [ | n' E' ]. 
reflexivity. apply IHE'. Qed.

起初,我并没有过多地考虑到这种证明,但是仔细观察后,我发现有些麻烦。问题是,在执行该reflexivity步骤之后,我希望看到上下文

1 subgoal
n' : nat
E : ev (S (S n'))
E' : ev n'
IHE' : ev n' -> even n'
====================================================================== (1/1)
even (S (S n'))

但是我实际上得到的是

1 subgoal
n' : nat
E' : ev n'
IHE' : even n'
====================================================================== (1/1)
even (S (S n'))

尽管该定理仍然可以证明,但令人震惊的是,这些假设神秘地消失了。我想知道如何获得最初期望的上下文。通过网络搜索,我了解到这是对Coq中构造术语的归纳的普遍问题。一种关于SO的提议解决方案建议使用remember关于假设策略。但是当我在证明中尝试

Theorem ev__even : forall n,
  ev n -> even n.
intros n E.
remember E.
induction E as [ | n' E' ]. 

我在induction步骤中收到以下错误消息

Error: Abstracting over the term "n" leads to a term
"fun n : nat => forall e : ev n, e = E -> even n" which is ill-typed.

我不太了解。认为问题在于它E具有一个自由变量,但是在那种情况下,我将被困住,因为如果不引入,就E无法引入ngeneralize dependent n将对此进行概括E

有什么方法可以获取最初期望的上下文?

康斯坦丁·威兹(Konstantin Weitz)

我不明白induction这里策略是什么。每当我不了解战术在做什么时,我都会尝试自己写证明词。如果您手动调用归纳原理,则可以保留原始假设:

Theorem ev__even : forall n, ev n -> even n.
  intros n E.
  refine (ev_ind even _ _ n E).
  - reflexivity.
  - intros n' E' IH.
    apply IH.
Qed.

这是第二种归纳情况下的上下文:

  n : nat
  E : ev n
  n' : nat
  E' : ev n'
  IH : even n'
  ============================
   even (S (S n'))

假设

Fixpoint evenb (n:nat) : bool :=
  match n with
  | O        => true
  | S O      => false
  | S (S n') => evenb n'
  end.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在命题归纳中使用“记住”会在Coq中产生“错误类型”错误

来自分类Dev

检查用户权限是否可在插件中使用,但会在管理面板中产生错误

来自分类Dev

检查用户权限可在插件中使用,但会在管理面板中产生错误

来自分类Dev

使用平均值会在VBA中产生应用程序定义的错误或对象定义的错误

来自分类Dev

定义不带类型的字典会在Swift中产生编译器错误

来自分类Dev

导入库会在Play Framework中产生错误

来自分类Dev

为什么while循环会在我的代码中产生错误?

来自分类Dev

Parceler 类不会在 Android 中产生错误

来自分类Dev

在Array中使用名称会在Firefox中产生不同的结果

来自分类Dev

使用XSETBV写入XCR0会在支持MPX的硬件上的VM中产生常规保护错误

来自分类Dev

在Promise链中产生错误

来自分类Dev

在Java中产生致命错误

来自分类Dev

反转会在Coq中产生意外的存在

来自分类Dev

在球拍中使用“定义类型”会产生错误

来自分类Dev

在球拍中使用“定义类型”会产生错误

来自分类Dev

在R中使用反斜杠转义一个反斜杠会在字符串中产生2个反斜杠,而不是1

来自分类Dev

为什么这个复杂的有理数会在Julia中产生溢出错误?

来自分类Dev

为什么`where`会在列表推导中产生解析错误,而`let`不会呢?

来自分类Dev

将jquery指定为angularjs的依赖项会在requirejs中产生错误

来自分类Dev

一个简单的C代码但编译会在Suse中产生许多错误

来自分类Dev

正常的SQL会在pg-promise中产生语法错误

来自分类Dev

新实体的多个条件插入会在R2DBC中产生重复的输入错误

来自分类Dev

用utf8插入ASCII会在open()中产生错误

来自分类Dev

将jquery指定为angularjs的依赖项会在requirejs中产生错误

来自分类Dev

释放Mediaplayer并停止onPause和onResume会在Android中产生错误

来自分类Dev

添加each_slice(3)会在Rails App中产生错误

来自分类Dev

从自定义事件返回false会在新的jquery版本中产生错误

来自分类Dev

使用两个日期比较而不是日期范围查询会在MongoDB中产生不同的结果

来自分类Dev

在函数中使用throw关键字会在gcc中产生警告

Related 相关文章

  1. 1

    在命题归纳中使用“记住”会在Coq中产生“错误类型”错误

  2. 2

    检查用户权限是否可在插件中使用,但会在管理面板中产生错误

  3. 3

    检查用户权限可在插件中使用,但会在管理面板中产生错误

  4. 4

    使用平均值会在VBA中产生应用程序定义的错误或对象定义的错误

  5. 5

    定义不带类型的字典会在Swift中产生编译器错误

  6. 6

    导入库会在Play Framework中产生错误

  7. 7

    为什么while循环会在我的代码中产生错误?

  8. 8

    Parceler 类不会在 Android 中产生错误

  9. 9

    在Array中使用名称会在Firefox中产生不同的结果

  10. 10

    使用XSETBV写入XCR0会在支持MPX的硬件上的VM中产生常规保护错误

  11. 11

    在Promise链中产生错误

  12. 12

    在Java中产生致命错误

  13. 13

    反转会在Coq中产生意外的存在

  14. 14

    在球拍中使用“定义类型”会产生错误

  15. 15

    在球拍中使用“定义类型”会产生错误

  16. 16

    在R中使用反斜杠转义一个反斜杠会在字符串中产生2个反斜杠,而不是1

  17. 17

    为什么这个复杂的有理数会在Julia中产生溢出错误?

  18. 18

    为什么`where`会在列表推导中产生解析错误,而`let`不会呢?

  19. 19

    将jquery指定为angularjs的依赖项会在requirejs中产生错误

  20. 20

    一个简单的C代码但编译会在Suse中产生许多错误

  21. 21

    正常的SQL会在pg-promise中产生语法错误

  22. 22

    新实体的多个条件插入会在R2DBC中产生重复的输入错误

  23. 23

    用utf8插入ASCII会在open()中产生错误

  24. 24

    将jquery指定为angularjs的依赖项会在requirejs中产生错误

  25. 25

    释放Mediaplayer并停止onPause和onResume会在Android中产生错误

  26. 26

    添加each_slice(3)会在Rails App中产生错误

  27. 27

    从自定义事件返回false会在新的jquery版本中产生错误

  28. 28

    使用两个日期比较而不是日期范围查询会在MongoDB中产生不同的结果

  29. 29

    在函数中使用throw关键字会在gcc中产生警告

热门标签

归档