Library Mtac2.lib.Logic
Set Implicit Arguments.
Set Universe Polymorphism.
Set Polymorphic Inductive Cumulativity.
Unset Universe Minimization ToSet.
Reserved Notation "x =m= y :> T"
(at level 70, y at next level, no associativity).
Reserved Notation "x =m= y" (at level 70, no associativity).
First-order quantifiers
Equality
Inductive meq (A:Type) (x:A) : A -> Prop :=
meq_refl : x =m= x :>A
where "x =m= y :> A" := (@meq A x y) : type_scope.
Notation "x =m= y" := (x =m= y :>_) : type_scope.
Arguments meq {A} x _.
Arguments meq_refl {A x} , [A] x.
Arguments meq_ind [A] x P _ y _.
Arguments meq_rec [A] x P _ y _.
Arguments meq_rect [A] x P _ y _.
Section equality.
Variables A : Type.
Variables x y z : A.
Theorem meq_sym : x =m= y -> y =m= x.
Proof.
destruct 1; reflexivity.
Defined.
Theorem meq_trans : x =m= y -> y =m= z -> x =m= z.
Proof.
destruct 2; trivial.
Defined.
Variable B : Type.
Variable f : A -> B.
Theorem mf_equal : x =m= y -> f x =m= f y.
Proof.
destruct 1; reflexivity.
Defined.
End equality.
Definition meq_ind_r :
forall (A:Type) (x:A) (P:A -> Prop), P x -> forall y:A, y =m= x -> P y.
intros A x P H y H0. elim meq_sym with (1 := H0); assumption.
Defined.
Definition meq_rec_r :
forall (A:Type) (x:A) (P:A -> Set), P x -> forall y:A, y =m= x -> P y.
intros A x P H y H0; elim meq_sym with (1 := H0); assumption.
Defined.
Definition meq_rect_r :
forall (A:Type) (x:A) (P:A -> Type), P x -> forall y:A, y =m= x -> P y.
intros A x P H y H0; elim meq_sym with (1 := H0); assumption.
Defined.