unfold cond_irr in |- *.
unfold is_irreducible in |- *.
unfold equal in |- *.
intros.
elim H.
unfold inclusion in |- *.
intros.
split.
unfold no_pairs in |- *.
intros.
red in |- *.
intro.
apply (irreducible_pair h M1 N1 M2 N2).
apply H0; trivial.
split.
unfold no_syn_ops in |- *.
intros.
red in |- *.
intro.
generalize (irreducible_op h o o M N).
intro.
elim H4.
intros.
generalize (H0 (Mop o M) (Mop o N) H2).
intro.
generalize (H5 H7).
intro.
elim H8.
intros.
case H10.
tauto.
intro.
apply H11.
generalize (h_le_h_ana_h h).
unfold le_h in |- *.
unfold inclusion in |- *.
auto.
split.
unfold no_syn_cyph in |- *.
intros.
generalize (irreducible_enc h M N K L).
intro.
elim H3.
intros.
generalize (H4 (H0 (MEnc M K) (MEnc N L) H2)).
intro.
elim H6.
intros.
case H8.
intro.
left.
red in |- *.
intro.
apply H9.
generalize (h_le_h_ana_h h).
unfold le_h in |- *; unfold inclusion in |- *; auto.
intro.
right.
red in |- *; intro.
apply H9.
generalize (h_le_h_ana_h h).
unfold le_h in |- *; unfold inclusion in |- *; auto.
unfold cyph_dec in |- *.
intros.
generalize (H0 (MEnc M K) (MEnc N L) H2).
unfold irreducible in |- *.
unfold reduce in |- *.
intros.
elim H4.
intros.
generalize (ana_h_equiv_irr_h h).
unfold equiv_h in |- *.
intros.
elim H7.
unfold le_h in |- *.
intros.
cut (inclusion (synthesis (irreducible h)) (synthesis h)).
unfold inclusion in |- *.
intros.
apply H10.
unfold inclusion in H8.
apply H8.
apply SynInc.
generalize (analysis_is_analysis h).
unfold is_analysis in |- *.
unfold analysis_cond in |- *.
intros.
elim H11.
intros.
elim H12.
unfold stable_analysis in |- *.
intros.
unfold inclusion in H15.
apply H15.
apply (AnaDec (analysis_def h) M N K L).
apply AnaInc; trivial.
generalize (h_le_h_ana_h h).
unfold le_h in |- *.
unfold inclusion in |- *.
auto.
fold (le_h (irreducible h) h) in |- *.
apply inclusion_impl_le_h.
tauto.
Qed.

(* Specifications: *)
(** h is irreducible iff it satisfies cond_irr *)
Theorem irreducible_iff_cond_irr :
forall h : hedge, cond_irr h <-> is_irreducible h.