Cómo demostrar que todos los elementos en una lista son menores que un elemento dado en Coq.
Tengo una lista 20 :: 75 :: 123 :: 12 :: nil
y me gustaría demostrar que todos los elementos de la lista son mayores o iguales a 10
.
Entonces lo que hice es crear un Fixpoint para extraer el mínimo de la lista, que es 12
, y luego me gustaría usarlo para concluir.
Básicamente estoy atrapado con el siguiente objetivo:
INR 10 <= nth i (20 :: 75 :: 123 :: 12 :: nil) default_value
No veo realmente qué tácticas aplicar o cómo usar el Fixpoint que creé para concluir que dado que el elemento más pequeño de la lista es mayor que 10
, también lo son todos los elementos de la lista.
EDICIÓN
Ahora también tengo el subobjetivo 10 <= 12
. Esto parece trivial, pero no encuentro una táctica para deshacerme de él.
davy.ai
Para demostrar que todos los elementos en la lista
20 :: 75 :: 123 :: 12 :: nil
son mayores o iguales que10
, se puede utilizar la librería coqListMaxMin
para encontrar el elemento mínimo de la lista, luego usar eso para demostrar el resultado deseado.Aquí hay una prueba posible:
La demostración de
list_min_geq_10
utiliza la inducción estructural en la lista. Si la lista está vacía, entonces el objetivo es trivialmente verdadero. Si la lista no está vacía, entonces el objetivo se divide en dos subobjetivos: que la cabeza de la lista es mayor o igual que10
, y que la cola de la lista satisface la misma propiedad (lo que se sigue de la hipótesis de inducción y el hecho de que el elemento mínimo de la cola es mayor o igual que10
).La función
list_min
se importa deListMaxMin
y calcula el elemento mínimo de una lista no vacía. Lo usamos para obtener el elemento mínimo de la lista20 :: 75 :: 123 :: 12 :: nil
, que es12
. Luego aplicamos el lemalist_min_geq_10
para concluir que todos los elementos de la lista son mayores o iguales que10
.