Скажем, у меня есть лемма mylem: foo ?a = bar ?a
, и мне нужно применить ее к цели, которая имеет два вхождения foo
, например. baz (foo (f p q)) (foo (g r s))
, но только в одном из этих положений. Я знаю два способа сделать это, не выписывая все p
, q
..., которые могут быть сложными выражениями.Канонический способ получить более конкретную лемму
- Используя
apply (subst mylem)
, за которым следует соответствующий номер (здесь, ноль или один) изback
команд. - Использование
apply (subst mylem[where a = 'foo x y', standard])
, гдеx
иy
- это несвязанные имена.
Использование subst
здесь только для демонстрации; Я действительно хочу изменить лемму, например. использовать его с rule
, когда есть несколько возможных совпадений, которые я бы хотел устранить так.
Оба подхода выглядят как плохой стиль для меня. Есть ли лучший способ достичь этого?
Хорошо, что работает для под. Но что, если я хочу применить правило с, скажем, 'rule', и есть несколько способов объединить его с целью? –
Я раньше не знал о 'for'. Могу ли я использовать его в большем количестве позиций, чем с 'леммами' и' интерпретировать '?? –
Вы можете использовать 'for' с' theorems', который похож на 'lemmas'; с 'inductive' и' inductive_set' для исправления параметров; и внутри выражений локали, как они встречаются в 'интерпретация ',' sublocale' и 'locale ... = ... для ... +'. –