intros.
unfold analysis_def in |- *.
intros.
induction  H
as
[M
N
H|
M
N
K
L
H1
HrecH1
H0
HrecH0|
M1
N1
M2
N2
H1
HrecH1
H0
HrecH0|
o
M
N
H
HrecH].
elim H.
intro n.
intro.
exists n.
apply SynInc.
trivial.
elim HrecH1.
intro n1.
intro.
elim HrecH0.
intro n2.
intro.
exists (max n1 n2).
apply SynEnc.
generalize
(inclusion_impl_le_h (analysis_seq h n1) (analysis_seq h (max n1 n2))
(analysis_seq_increase n1 (max n1 n2) h (le_max_l n1 n2))).
unfold le_h in |- *; auto.
generalize
(inclusion_impl_le_h (analysis_seq h n2) (analysis_seq h (max n1 n2))
(analysis_seq_increase n2 (max n1 n2) h (le_max_r n1 n2))).
unfold le_h in |- *; auto.
elim HrecH0; elim HrecH1.
intro n1.
intro.
intro n2.
intro.
exists (max n1 n2).
apply SynPair.
generalize
(inclusion_impl_le_h (analysis_seq h n1) (analysis_seq h (max n1 n2))
(analysis_seq_increase n1 (max n1 n2) h (le_max_l n1 n2))).
unfold le_h in |- *; auto.
generalize
(inclusion_impl_le_h (analysis_seq h n2) (analysis_seq h (max n1 n2))
(analysis_seq_increase n2 (max n1 n2) h (le_max_r n1 n2))).
unfold le_h in |- *; auto.
elim HrecH.
intro n.
intro.
exists n.
apply SynOp.
trivial.
Qed.

(** A(h) is indeed the analysis of h: it shows that for all h the analysis of h exists *)
Lemma analysis_is_analysis : forall h : hedge, is_analysis h (analysis_def h).
unfold is_analysis in |- *.