(** h is irreducible iff h = I(h) *)
Definition is_irreducible (h : hedge) := equal h (irreducible h).

(* Specifications: *)
Theorem h_le_h_ana_h : forall h : hedge, le_h h (analysis_def h).
Theorem ana_h_equiv_irr_h : forall h : hedge, equiv_h (analysis_def h) (irreducible h).
Theorem h_le_h_irr_h : forall h : hedge, le_h h (irreducible h).
Lemma ana_irr_incl_ana : forall h : hedge, inclusion (analysis_def (irreducible h)) (analysis_def h).
Lemma irr_irr_incl_irr : forall h : hedge, inclusion (irreducible (irreducible h)) (irreducible h).
Lemma irr_incl_irr_irr : forall h : hedge, inclusion (irreducible h) (irreducible (irreducible h)).
Theorem irreducible_is_irreducible : forall h : hedge, is_irreducible (irreducible h).
Theorem equiv_irr_impl_incl : forall g h : hedge, equiv_h g h -> is_irreducible g -> inclusion g h.
Theorem equiv_irr_irr_impl_equal : forall g h : hedge, equiv_h g h -> is_irreducible g -> is_irreducible h -> equal g h.
Lemma h_le_h_analysis : forall h : hedge, le_h h (analysis h).
Lemma synthesis_idempotent : forall h : hedge, equal (synthesis h) (synthesis (synthesis h)).
Lemma stable_ana_impl_stable_syn_ana : forall h : hedge, stable_analysis h -> stable_analysis (synthesis h).
Lemma le_h_ana_le_h : forall g h : hedge, le_h g h -> le_h (analysis_def g) (analysis_def h).
Theorem le_h_irr_le_h : forall g h : hedge, le_h g h -> le_h (irreducible g) (irreducible h).
Theorem equiv_h_impl_irr_unique : forall g h : hedge, equiv_h g h -> equal (irreducible g) (irreducible h).
Theorem update_irr : forall g h : hedge, equal (irreducible (union (irreducible h) g)) (irreducible (union h g)).