# Library Coq.Classes.Morphisms_Prop

# Proper instances for propositional connectives.

Author: Matthieu Sozeau Institution: LRI, CNRS UMR 8623 - University Paris Sud
Require Import Coq.Classes.Morphisms.
Require Import Coq.Program.Basics.
Require Import Coq.Program.Tactics.
Local Obligation Tactic := simpl_relation.
Standard instances for not, iff and impl.
Logical negation.
Program Instance not_impl_morphism :
Proper (impl --> impl) not | 1.
Program Instance not_iff_morphism :
Proper (iff ++> iff) not.
Logical conjunction.
Program Instance and_impl_morphism :
Proper (impl ==> impl ==> impl) and | 1.
Program Instance and_iff_morphism :
Proper (iff ==> iff ==> iff) and.
Logical disjunction.
Program Instance or_impl_morphism :
Proper (impl ==> impl ==> impl) or | 1.
Program Instance or_iff_morphism :
Proper (iff ==> iff ==> iff) or.
Logical implication impl is a morphism for logical equivalence.
Program Instance iff_iff_iff_impl_morphism : Proper (iff ==> iff ==> iff) impl.
Morphisms for quantifiers
Program Instance ex_iff_morphism {A : Type} : Proper (pointwise_relation A iff ==> iff) (@ex A).
Program Instance ex_impl_morphism {A : Type} :
Proper (pointwise_relation A impl ==> impl) (@ex A) | 1.
Program Instance ex_inverse_impl_morphism {A : Type} :
Proper (pointwise_relation A (inverse impl) ==> inverse impl) (@ex A) | 1.
Program Instance all_iff_morphism {A : Type} :
Proper (pointwise_relation A iff ==> iff) (@all A).
Program Instance all_impl_morphism {A : Type} :
Proper (pointwise_relation A impl ==> impl) (@all A) | 1.
Program Instance all_inverse_impl_morphism {A : Type} :
Proper (pointwise_relation A (inverse impl) ==> inverse impl) (@all A) | 1.
Equivalent points are simultaneously accessible or not
Instance Acc_pt_morphism {A:Type}(E R : A->A->Prop)
`(Equivalence _ E) `(Proper _ (E==>E==>iff) R) :
Proper (E==>iff) (Acc R).
Equivalent relations have the same accessible points
Instance Acc_rel_morphism {A:Type} :
Proper (@relation_equivalence A ==> Logic.eq ==> iff) (@Acc A).
Equivalent relations are simultaneously well-founded or not
Instance well_founded_morphism {A : Type} :
Proper (@relation_equivalence A ==> iff) (@well_founded A).