При использовании тактики Coq apply ... with
примеры, которые я видел, включают явное указание имен переменных для создания экземпляров. Например, с учетом теоремы о транзитивности равенства.Использование `apply with` без указания имен параметров в Coq?
Theorem trans_eq : forall (X:Type) (n m o : X),
n = m -> m = o -> n = o.
Для apply
это:
Example test: forall n m: nat,
n = 1 -> 1 = m -> n = m.
Proof.
intros n m.
apply trans_eq with (m := 1). Qed.
Обратите внимание, что в последней строке apply trans_eq with (m := 1).
, я должен помнить, что имя переменной экземпляра является m
, а не o
или n
или некоторые другие названия y
.
Для меня, будь то m n o
или x y z
, используются в оригинальной формулировке теоремы, не должны иметь значения, поскольку они подобны фиктивным переменным или формальным параметрам функции. И иногда я не могу вспомнить конкретные имена, которые я использовал, или кто-то еще подал в другом файле при определении теоремы.
Есть ли способ, с помощью которого я могу ссылаться на переменные, например. по их положению и использовать что-то вроде:
apply trans_eq with (@1 := 1)
в приведенном выше примере?
Кстати, я попробовал: apply trans_eq with (1 := 1).
и получил Error: No such binder.
Спасибо.
Спасибо. Это работает с одной промежуточной переменной. Но я также пробовал это на двух промежуточных переменных: apply ... with (x: = XX) (y: = YY) '. Но как только я удаляю имена переменных 'x: =', 'y: =', ('apply ... with (XX) (YY)'), он больше не работает. Есть идеи? – tinlyx