Важные части уже объяснены пользователем9716869. Я просто хотел добавить:
Ваша текущая подзадача, вероятно, не решаема, если у вас нет дополнительной информации. Если вам требуется x
из ∃x. P x
для создания экземпляра схемы c переменная ?x6
, то вам нужно получить значение x
до создания переменной c схемы.
Схемы c переменные создаются автоматически при сопоставлении. Это хорошо работает, если переменная schemati c не является функцией, поэтому вы можете просто продолжать писать свое доказательство, как если бы правильное значение уже было там. Если вы хотите зафиксировать значение в доказательстве применения стиля (другие случаи уже приведены в другом ответе), вы можете использовать subgoal_tac
, за которым следует assumption
:
lemma "⋀y. ∃x. P x ⟹ ∃x::nat. P x"
apply (rule exI)
― ‹⋀y. ∃x. P x ⟹ P (?x y)›
apply (subgoal_tac "P 42", assumption)
― ‹⋀y. ∃x. P x ⟹ P 42›
oops ― ‹Not possible to prove›
lemma "⋀y. ∃x. P x ⟹ ∃x::nat. P x"
apply (erule exE)
― ‹⋀y x. P x ⟹ ∃x. P x›
apply (rule exI)
― ‹⋀y x. P x ⟹ P (?x2 y x)›
apply (subgoal_tac "P x", assumption)
― ‹⋀y x. P x ⟹ P x›
by assumption