Appliquer une implication dans une autre hypothèse.

Jusqu'à présent, nous avons toujours prouvé nos théorèmes en travaillant sur le but . C'est ce qu'on appelle un raisonnement "vers l'arrière" ( backward reasoning ). Ce style de raisonnement est favorisé en Coq : par défaut, la plupart des tactiques transforment le but avec des raisonnements du type "d'après telle hypothèse, si je sais prouver truc (nouveau but), alors j'aurai bidule (ancien but)", autrement dit, "d'après telle hypothèse, pour prouver bidule (ancien but) il suffit de prouver truc (nouveau but)".

En mathématiques, on a plutôt l'habitude du raisonnement "vers l'avant" : construire pas à pas le but en énonçant de nouveaux faits. Ceci est aussi possible en Coq.

Remarque importante : il ne faut pas se mélanger les pinceaux entre apply et apply in. Dans les deux cas, on cherche à appliquer une implication .

  • Sans in, on cherche à l'appliquer au but. Si l'on applique H : A -> B au but B avec apply H, la conclusion de l'implication doit être la même que le but (ou peut être unifiée au but).
  • Avec in, on cherche à appliquer l'implication H : A -> B à une hypothèse H' : A. Cette fois avec apply H in H', c'est ce qui est avant la flèche (l'impliquant) qui doit être identique (ou unifiable) au type de H'.

Exercice :

Prouver avec un raisonnement "vers l'avant" les théorèmes modus_ponens et imp_trans.

Conclusion : Coq (et en général les assistants de preuve) favorise la démonstration vers l'arrière . On raisonne sur le but par conditions suffisantes . En général, c'est une bonne façon de faire (les preuves sont souvent plus courtes). Les mathématiciens raisonnent plus souvent avec un raisonnement vers l'avant (avec un peu de raisonnement vers l'arrière aussi). Il peut être plus clair, même avec Coq, d'utiliser le raisonnement vers l'avant, au moins pour certaines étapes. L'ingrédient principal pour le faire est apply in. Nous verrons par la suite deux autres tactiques pour un raisonnement vers l'avant : assert et replace.