Module relation

Set Implicit Arguments.

Propriétés d'une relation de transition

Section Relations.
Variable M : Set.
Variable R : M->M->Prop.

I est un invariant pour la relation R

Definition invariant [I : (M -> Prop)] : Prop
   := (x:M)(I x)->(y:M)(R x y)->(I y).

Fermeture réflexive-transitive de R

Inductive Rstar [x:M] : M -> Prop :=
        Rstar_refl : (Rstar x x)
      | Rstar_plus : (y,z:M)(Rstar x y)->(R y z)->(Rstar x z).

Enregistre les constructeurs de Rstar dans la base de Hints

Hint rstar_constr := Constructors Rstar.

Propriétés de Rstar

Lemma R_Rstar : (x,y:M)(R x y)->(Rstar x y).
EAuto.
Save.

Lemma Rstar_trans : (x,y,z:M)(Rstar x y)->(Rstar y z)->(Rstar x z).
Induction 2; EAuto.
Save.

Enregistre les lemmes R_Rstar et Rstar_trans dans la base de Hints

Hints Resolve R_Rstar Rstar_trans.

Définition inductive des points accessibles par R à partir de init

Inductive accessible [init : M -> Prop] : M -> Prop :=
    acc_init : (m:M)(init m)->(accessible init m)
  | acc_inv : (invariant (accessible init)).

Hint acc_constr := Constructors accessible.

Lien entre l'accessibilité et la fermeture transitive (accessible init y)<->(EX x:M | (init x) & (Rstar x y))

Lemma accessible_equiv :
  (init:M->Prop)(y:M)(accessible init y)<->(EX x:M | (init x) & (Rstar x y)).
Split.
Induction 1.
Intros m Im; Exists m; Auto.
Intros.
Case H1.
Intros.
Exists x0; EAuto.

Destruct 1.
Induction 2; EAuto.
Intros.
Apply (!acc_inv init y0); Trivial.
Save.

Définition co-inductive du fait que P est vrai pour tous les points accessibles à partir de x

Variable P : M -> Prop.

CoInductive allways : M -> Prop :=
  All_intro : (x:M)(P x)->((y:M)(R x y)->(allways y))->(allways x).

Lien entre allways et la fermeture transitive (allways x) <-> ((y:M)(Rstar x y)->(P y))

Lemma allways_P : (x:M)(allways x)->(P x).
Destruct 1; Auto.
Save.

Lemma allways_inv : (invariant allways).
Red.
Destruct 1; Auto.
Save.
Hints Resolve allways_inv.

Lemma allways_P_Rstar : (x:M)(allways x)->(y:M)(Rstar x y)->(allways y).
Induction 2; EAuto.
Save.
Hints Resolve allways_P_Rstar.

Lemma allways_equiv : (x:M)((allways x) <-> ((y:M)(Rstar x y)->(P y))).

Split.
Intros; Apply allways_P; EAuto.

Generalize x; Cofix F; Intros.
Constructor.
Auto.
Intros.
Apply F; EAuto.
Save.

Si un invariant I est trouvé qui implique la propriété P alors P est vraie partout

Variable I : M->Prop.
Hypothesis I_inv : (invariant I).
Hypothesis I_P : (x:M)(I x)->(P x).

CoFixpoint inv_allways : (x:M)(I x)->(allways x) :=
  [x,i](All_intro (I_P i) [y:M][h:(R x y)](inv_allways (I_inv i h))).

End Relations.


Index
This page has been generated by coqdoc