This module defines quantification on the world Type (Logic.v was defining it on the world Set )
|
Require
Export
Logic.
Require
LogicSyntax.
allT A P , or simply (ALLT x | P(x)) , stands for (x:A)(P x) when A is of type Type
|
Definition
allT := [A:Type][P:A->Prop](x:A)(P x).
Section
universal_quantification.
Variable
A : Type.
Variable
P : A->Prop.
Theorem
inst : (x:A)(allT ? [x](P x))->(P x).
Proof
.
Unfold allT; Auto.
Qed
.
Theorem
gen : (B:Prop)(f:(y:A)B->(P y))B->(allT A P).
Proof
.
Red; Auto.
Qed
.
End
universal_quantification.
Existential Quantification |
exT A P , or simply (EXT x | P(x)) , stands for the existential quantification on the predicate P when A is of type Type
|
exT2 A P Q , or simply (EXT x | P(x) & Q(x)) , stands for the existential quantification on both P and Q when A is of type Type
|
Inductive
exT [A:Type;P:A->Prop] : Prop
:= exT_intro : (x:A)(P x)->(exT A P).
Inductive
exT2 [A:Type;P,Q:A->Prop] : Prop
:= exT_intro2 : (x:A)(P x)->(Q x)->(exT2 A P Q).
Leibniz equality : A:Type x,y:A (P:A->Prop)(P x)->(P y)
|
Inductive
eqT [A:Type;x:A] : A -> Prop
:= refl_eqT : (eqT A x x).
Hints
Resolve refl_eqT exT_intro2 exT_intro : core v62.
Section
Equality_is_a_congruence.
Variables
A,B : Type.
Variable
f : A->B.
Variable
x,y,z : A.
Lemma
sym_eqT : (eqT ? x y) -> (eqT ? y x).
Proof
.
Induction 1; Trivial.
Qed
.
Lemma
trans_eqT : (eqT ? x y) -> (eqT ? y z) -> (eqT ? x z).
Proof
.
Induction 2; Trivial.
Qed
.
Lemma
congr_eqT : (eqT ? x y)->(eqT ? (f x) (f y)).
Proof
.
Induction 1; Trivial.
Qed
.
Lemma
sym_not_eqT : ~(eqT ? x y) -> ~(eqT ? y x).
Proof
.
Red; Intros H H'; Apply H; Elim H'; Trivial.
Qed
.
End
Equality_is_a_congruence.
Hints
Immediate
sym_eqT sym_not_eqT : core v62.
This states the replacement of equals by equals in a proposition |
Definition
eqT_ind_r : (A:Type)(x:A)(P:A->Prop)(P x)->(y:A)(eqT ? y x)->(P y).
Intros A x P H y H0; Case sym_eqT with 1:=H0; Trivial.
Defined
.
not allowed because of dependencies: |
Definition
eqT_rec_r : (A:Type)(x:A)(P:A->Set)(P x)->(y:A)y==x -> (P y).
Intros A x P H y H0; Case sym_eqT with 1:=H0; Trivial.
Defined
.
Some datatypes at the Type level
|
Inductive
EmptyT: Type :=.
Inductive
UnitT : Type := IT : UnitT.
Definition
notT := [A:Type] A->EmptyT.
Have you an idea of what means identityT A a b ? No matter!
|
Inductive
identityT [A:Type; a:A] : A->Type :=
refl_identityT : (identityT A a a).
Hints
Resolve refl_identityT : core v62.
Section
IdentityT_is_a_congruence.
Variables
A,B : Type.
Variable
f : A->B.
Variable
x,y,z : A.
Lemma
sym_idT : (identityT ? x y) -> (identityT ? y x).
Proof
.
Induction 1; Trivial.
Qed
.
Lemma
trans_idT : (identityT ? x y) -> (identityT ? y z) -> (identityT ? x z).
Proof
.
Induction 2; Trivial.
Qed
.
Lemma
congr_idT : (identityT ? x y)->(identityT ? (f x) (f y)).
Proof
.
Induction 1; Trivial.
Qed
.
Lemma
sym_not_idT : (notT (identityT ? x y)) -> (notT (identityT ? y x)).
Proof
.
Red; Intros H H'; Apply H; Elim H'; Trivial.
Qed
.
End
IdentityT_is_a_congruence.
Definition
identityT_ind_r :
(A:Type)
(a:A)
(P:A->Prop)
(P a)->(y:A)(identityT ? y a)->(P y).
Intros A x P H y H0; Case sym_idT with 1:= H0; Trivial.
Defined
.
Definition
identityT_rec_r :
(A:Type)
(a:A)
(P:A->Set)
(P a)->(y:A)(identityT ? y a)->(P y).
Intros A x P H y H0; Case sym_idT with 1:= H0; Trivial.
Defined
.
Definition
identityT_rect_r :
(A:Type)
(a:A)
(P:A->Type)
(P a)->(y:A)(identityT ? y a)->(P y).
Intros A x P H y H0; Case sym_idT with 1:= H0; Trivial.
Defined
.
Inductive
prodT [A,B:Type] : Type := pairT : A -> B -> (prodT A B).
Section
prodT_proj.
Variables
A, B : Type.
Definition
fstT := [H:(prodT A B)]Cases H of (pairT x _) => x end.
Definition
sndT := [H:(prodT A B)]Cases H of (pairT _ y) => y end.
End
prodT_proj.
Definition
prodT_uncurry : (A,B,C:Type)((prodT A B)->C)->A->B->C :=
[A,B,C:Type; f:((prodT A B)->C); x:A; y:B]
(f (pairT A B x y)).
Definition
prodT_curry : (A,B,C:Type)(A->B->C)->(prodT A B)->C :=
[A,B,C:Type; f:(A->B->C); p:(prodT A B)]
Cases p of
| (pairT x y) => (f x y)
end.
Hints
Immediate
sym_idT sym_not_idT : core v62.
Syntactic
Definition
AllT := allT | 1.
Syntactic
Definition
ExT := exT | 1.
Syntactic
Definition
ExT2 := exT2 | 1.
Implicits
fstT [1 2].
Implicits
sndT [1 2].
Implicits
pairT [1 2].