Ltac-аргумент для экземпляра

Тактика instantiate может взять и ident или num как:

instantiate (ident:= term)

instantiate (num := term)

Теперь я хочу использовать второй в определении тактики. Например:

  Ltac my_instantiate n x:=
    instantiate(n:=x).

К сожалению, это дает следующую ошибку:

Переменная Ltac n связана с 1, который не может быть приведен к новому идентификатору.

Я подозреваю, что ltac пытается использовать первое использование instantiate, Как мне сказать coq создать экземпляр по позиции или как правильно передать аргумент argumetn?


Вот минимальный пример:

Ltac my_instantiate n x:=
  instantiate(n:=x).
Goal exists x, x = 2.
  eexists.
  my_instantiate 1 2.
  (* Fails with: Ltac variable n is bound to 1 which 
     cannot be coerced to a fresh identifier. *)

Примечание: я знаю, что создание экземпляров по позициям не рекомендуется, но я использую свою тактику только для целей исследования.

1 ответ

Может быть, то, что вы ищете, можно выразить в виде тактической записи?

справочник - тактические обозначения

Другие вопросы по тегам