При използването на тактиката Coq apply ... with
всички примери, които съм виждал, включват изрично даване на имената на променливите за инстанциране. Например, дадена е теорема за транзитивността на равенството.
Theorem trans_eq : forall (X:Type) (n m o : X),
n = m -> m = o -> n = o.
To apply
it:
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.
Благодаря.