归纳介绍'bad name'

Induction introduces 'bad name'

在下面的代码中:

inductive T :: "alpha list ⇒ bool" where
 Tε : "T []" |
 TaTb : "T l ⟹ T r ⟹ T (l @ a#(r @ [b]))"

lemma Tapp: "⟦T l;  T r⟧ ⟹ T (l@r)"
proof (induction l arbitrary: r rule: T.induct)
  case Tε
  then show ?case by (simp add: Tε)
next
  case (TaTb l r) then show ?case

我的状态:

proof (prove)
using this:
    T l
    T ra__
    T ?r ⟹ T (l @ ?r)
    T ?r ⟹ T (ra__ @ ?r)
    T r

goal (1 subgoal):
 1. T ((l @ a # ra__ @ [b]) @ r)

但是,我无法引用此 ra__,获取 Bad name: "ra__"⌂,但是,我需要引用它。如何绑定?

您的证明文本试图为两个不同的变量赋予名称 r。对于您的案例模式,请尝试使用不同的名称,例如case(TaTb l r')。您将获得相同的证明状态,除了 r' 而不是 ra__.