Programación de Ciclos Utilizando el Teorema del Invariante

Ejemplo

// Función que dado un vector devuelve true si alguno de sus elementos es mayor a 0
bool hayMayorACero(vector<int> v){
	int i = 0;
  bool encontre = false;
  int n = v.size();
  while (i < n) {
  // Principio de iteración
    encontre = encontre || v[i] > 0;
    i = i + 1;
  // Final de iteración
  }
  return encontre;
}

Principio de Iteración

Final de Iteración

Invariantes

¿Cómo sabemos si un invariante es adecuado?

Estas cosas no alcanzan para probar que nuestro invariante es correcto para demostrar al correctitud parcial del ciclo pero nos serán útiles para descubrir errores.