Ltac-аргумент для экземпляра - PullRequest
0 голосов
/ 04 декабря 2018

Тактика 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 Ответ

0 голосов
/ 05 декабря 2018

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

справочное руководство - тактическая запись

...