С помощью следующих определений я хочу доказать лемму without_P
Variable n : nat.
Definition mnnat := {m : nat | m < n}.
Variable f : mnnat -> nat.
Lemma without_P : (exists x : mnnat, True) -> (exists x, forall y, f x <= f y).
Лемма without_P
означает: если вы знаете (конечное) множество mnnat
не пусто, то должно существоватьэлемент в mnnat
, который является наименьшим из них после отображения f
на mnnat
.
Мы знаем, что mnnat
конечно, поскольку в нем есть n-1
чисел и в контекстедоказательство without_P
мы также знаем, что mnnat
не пусто, потому что посылка (exists x : mnnat, True)
.
Теперь mnnat
непуста и конечна «естественно / интуитивно» имеет некоторый наименьший элемент (после применения f
на все его элементы).
В данный момент я застрял в точке ниже, где я думал, что действовать по индукции через n
, что недопустимо.
1 subgoal
n : nat
f : mnnat -> nat
x : nat
H' : x < n
______________________________________(1/1)
exists (y : nat) (H0 : y < n),
forall (y0 : nat) (H1 : y0 < n),
f (exist (fun m : nat => m < n) y H0) <= f (exist (fun m : nat => m < n) y0 H1)
Моя единственная идея здесь состоит в том, чтобы утверждатьсуществование функции f' : nat -> nat
примерно так: exists (f' : nat -> nat), forall (x : nat) (H0: x < n), f' (exist (fun m : nat => m < n) x H0) = f x
, после решения этого утверждения я доказал лемму по индукции над n
. Как я могу доказать это утверждение?
Есть ли способ доказать, что "непустые конечные множества (после применения f
к каждому элементу) имеют минимум" большенапрямую? Мой текущий путь кажется слишком сложным для моих навыков Coq.