У меня проблема с доказательством существования экзистенциальной переменной в списке. Как я могу доказать что-то вроде этого:Переменная Coq существует в списке
Lemma exists_in_list_helper: forall (X : Type) (a : X) (P : X -> Prop),
(exists b : X, In b [a] -> P b) ->
P a.
Proof.
Admitted.
У меня есть другой вопрос. Как я могу анализировать регистр над значениями в списке (если он существует в этой части списка или нет)? Это основная лемма, которую я доказываю. Любая помощь приветствуется:
Lemma in_list: forall (X : Type) (a : X) l (P : X -> Prop),
(a :: l <> [] /\ exists b : X, In b (a :: l) -> P b) ->
(P a /\ l = []) \/
(P a /\ l <> [] /\ exists b : X, In b l -> P b) \/
(P a /\ l <> [] /\ forall b : X, In b l -> ~ P b) \/
(~ P a /\ l <> [] /\ exists b : X, In b l -> P b).
Proof.
Спасибо,
Благодарим вас за добрый ответ. У меня есть еще один вопрос. Я получаю ошибку «Невозможно унифицировать» при использовании. Я видел, что мы можем использовать тактику «шаблон», но я не мог ее правильно использовать. Я доказал следующее: ~ (существует b: X, In b l -> P b) -> (forall b: X, In b l -> ~ P b). –
и хотел бы изменить выражение forall в моей цели на ~ существует .... –
Я использовал шаблон (forall b: X, In bl -> ~ P b), который сгенерировал «забаву», но снова не мог использовать примените my_lemma, чтобы заменить forall на ~ существует ... Можете ли вы помочь мне, как я могу правильно использовать шаблон для руководства тактикой применения? –