Instructions : Le sujet comporte 6 parties indépendantes :

  • Logique de base (calcul des propositions, sans tiers exclu)
  • Entiers naturels et récurrence (sans tiers exclu)
  • Calcul des prédicats (il existe, pour tout) et tiers exclu
  • Réels, propriétés de base, sans automatisation
  • Entiers naturels et relation d'ordre (sans tiers exclu)
Les tactiques autorisées sont celles du cours :
  • intros
  • exact
  • apply et apply ... in
  • split
  • destruct
  • exfalso
  • exists
  • reflexivity
  • specialize
  • rewrite, rewrite <-, rewrite ... in, rewrite ... <- in et toutes les variantes rewrite ... at numéro
  • simpl
  • induction
  • unfold
  • les tactiques pour le raissonnement vers l'avant :
  • assert ... as ...
  • replace ... with ...
  • pose proof ... as ...

1. Logique de base

Dans cette partie, il n'y a besoin d'aucun lemme, juste la logique de base et les tactiques liées à la logique ( intros, exact, apply, ...)

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 15) : Prouver le théorème suivant.

2. entiers naturels, calcul, induction

Dans cette partie, on travaille sur les entiers naturels de Peano, et on n'a besoin de rien d'autre que de la définition usuelle de l'addition et de la multiplication (qu'on rappelle ci-dessous). On n'utilisera donc aucun lemme (à part peut-être ceux de cette partie), mais on n'hésitera pas à utiliser les tactiques basées sur le calcul comme simpl et discriminate (bien sûr il peut y avoir des inductions, des rewrite, ...).

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 15) : Prouver le théorème suivant.

On définit maintenant une opération "ajouter 2 n fois" par récurrence :

Exercice (difficulté 20) : Prouver le théorème suivant.

Exercice (difficulté 15) : Prouver le théorème suivant.

3. Logique des prédicats et logique classique

3.1 Calcul des prédicats sans tiers-exclus

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 10) : Prouver le théorème suivant.

3.2 Logique avec tiers-exclus

Dans cette partie, il y a parfois besoin de l'axiome du tiers exclu. Rappel: celuis-ci dit

On l'utilise pour faire un raisonnement par cas sur la validité ou non d'une proposition plus ou moins élaborée avec destruct classic(...) as [H | H].

Exercice (difficulté 15) : Prouver le théorème suivant.

Exercice (difficulté 25) : Prouver le théorème suivant.

4. Nombres réels, égalités et inégalités

Dans cette partie, vous utiliserez seulement les propriétés de base sur l'addition et la multiplication dans R :

Dans toute cette partie, on considère 2 réels a et b fixés. Ils seront dans le contexte de tous les lemmes.

La définition de "fonction strictement croissante" est la suivante :

N'hésitez pas à unfold increasing en cas de besoin.

On considère la fonction affine aff suivante :

De la même manière, n'hésitez pas à unfold aff

Exercice (difficulté 15) : Prouver le théorème suivant.

Exercice (difficulté 20) : Prouver le théorème suivant.

Exercice (difficulté 25) : Prouver le théorème suivant.

Exercice (difficulté 20) : Prouver le théorème suivant.

5. Entiers naturels et relations

On commence par définir un type pair_ou_impair à deux éléments qui sont pair et impair.

Rappel : pair ou impair est un type à deux constructeurs constants qui sont pair et impair, donc avec un hypothèse du type H : pair = impair, il suffit de discriminate H pour prouver False (et donc n'importe quoi).

On calcule maintenant par récurrence la parité d'un entier naturel n :

  • la parité de 0 est "pair"
  • la parité de 1 est "impair"
  • la parité de n + 2 est la même que la parité de n.

Noter que notre fonction parité calcule :

Pour faire des raisonnements par cas, on pourra se servir du lemme suivant. Indice, on peut utiliser destruct (parité n) eqn:parn pour faire un raisonnement par cas sur la valeur de (parité n).

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 10) : Prouver le théorème suivant.

Exercice (difficulté 20) : Prouver le théorème suivant.

Maintenant on définit la relation << (ici appelée le_bizarre, où le est l'abbréviation de "less than or equal to") :

Intuitivement, on a 1 << 3 << 5 << ... << 0 << 2 << 4 << ...

On va prouver que << est un ordre total sur nat. On aura besoin des propriétés correspondantes sur <=.

Exercice (difficulté 15) : Prouver le théorème suivant.

Exercice (difficulté 20) : Prouver le théorème suivant.

Exercice (difficulté 20) : Prouver le théorème suivant.

Exercice (difficulté 10) : Prouver le théorème suivant.

Indications : vous pourrez utiliser :

ou passer par l'opération leb qui calcule avec leb_le :

Exercice (difficulté 15) : Prouver le théorème suivant.

Exercice (difficulté 15) : Prouver le théorème suivant.

Voici quelques lemmes qui peuvent vous aider (pas la peine de tous les utiliser) en plus de ceux déjà proposés plus hauts.

Exercice (difficulté 30) : Prouver le théorème suivant.

Exercice (difficulté 30) : Prouver le théorème suivant.