unfold is_analysis in |- *.
unfold analysis_cond in |- *.
intros.
split.
split; trivial.
apply inclusion_trans with (analysis_seq h 0).
simpl in |- *.
apply inclusion_refl.
replace n with (n + 0); try auto with arith.
apply analysis_seq_grows.
intros.
apply analysis_seq_incl_analysis_cond.
unfold analysis_cond in |- *.
trivial.
Qed.
(** we define the analysis A(h) of h as being the infinite union of the sequence (analysis_seq h) *)
Definition analysis_def (h : hedge) (M N : Msg) :=
exists n : nat, analysis_seq h n M N.

(* Specifications: *)
(** technical lemma required to show that the analysis of h is indeed the analysis of h *)
Lemma synthesis_analysis_seq :
forall (h : hedge) (M N : Msg),
synthesis (analysis_def h) M N ->
exists n : nat, synthesis (analysis_seq h n) M N.