fact: Definition appMonCond := forall M M' (Mapp: isApp M) (M'app: isApp M'), algebraic M -> algebraic M' -> ( ~isFunApp M /\ ~isFunApp M' /\ appBodyL Mapp -R-> appBodyL M'app /\ appBodyR Mapp = appBodyR M'app ) \/ ( ~isFunApp M /\ ~isFunApp M' /\ appBodyL Mapp = appBodyL M'app /\ appBodyR Mapp -R-> appBodyR M'app ) \/ ( isFunApp M /\ appHead M = appHead M' /\ exists ll, exists m, exists m', appArgs M = fst ll ++ m :: snd ll /\ appArgs M' = fst ll ++ m' :: snd ll /\ m -R-> m' ) -> M -R-> M'.
imports: CoLoR(RelExtras ListExtras TermsEta LogicUtil) Coq(Morphisms)