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 ответ
Может быть, то, что вы ищете, можно выразить в виде тактической записи?