Coq не генерирует индуктивную гипотезу

Мне дали решение следующей теоремы, как показано ниже:

Require Import Coq.Lists.List.
Import ListNotations.

Inductive suffix {X : Type} : list X -> list X -> Prop :=
  | suffix_end : forall xs,
          suffix xs xs
  | suffix_step : forall x xs ys,
          suffix xs ys ->
          suffix (x :: xs) ys.

Theorem suffix_app (X: Type) (xs ys: list X) :
  suffix xs ys -> exists ws, xs = ws ++ ys.
Proof.
  induction 1 as [|x xsp ysp hs [zs zeq]]. 
  - exists []. reflexivity.
  - now exists (x :: zs); rewrite zeq.
Qed.

Я пытался быстро воспроизвести это на другой машине и попытался сделать это следующим образом:

Theorem suffix_app (X: Type) (xs ys: list X) :
  suffix xs ys -> exists ws, xs = ws ++ ys.
Proof.
  induction 1.
  - exists []. reflexivity.
  - (* Stuck here! *)
Abort.

то есть без предложения "как". Однако я застреваю из-за того, что автоматически названный эквивалент «zeq» не создается по причинам, которые я не могу понять. Почему здесь нет (автоматически названного) эквивалента «zeq», сгенерированного Coq во втором случае?


person Sean S    schedule 21.05.2017    source источник
comment
Это для меня, обратите внимание, что в вашем первом примере у вас был destruct в шаблоне. Таким образом, destruct IHsuffix as [zs zeq]. вернет вас в игру.   -  person ejgallego    schedule 21.05.2017
comment
Я в шоке, я никогда этого не замечал, но... c'est la vie. Спасибо, это полностью отвечает на мой вопрос. Не стесняйтесь поставить это как ответ, и я приму его.   -  person Sean S    schedule 21.05.2017
comment
Помимо уничтожения, intros также может перезаписывать (->): induction 1 as [|x ? ? ? [zs ->]]; [exists [] | exists (x :: zs)]; trivial.   -  person Anton Trunov    schedule 21.05.2017


Ответы (1)


Как упоминал @ejgallego в комментарии, это связано с тем, что предложение as допускает так называемые вводные шаблоны (то есть шаблоны, которые вы также можете использовать с тактикой intros, как упоминал @AntonTrunov в комментарии). Шаблон [zs zeq] означает destruct ... as [zs zeq]. Чтобы узнать больше о вводных шаблонах, см. https://coq.inria.fr/refman/proof-engine/tactics.html#coq:tacn.intros

person Zimm i48    schedule 22.05.2017