Require
Ensembles.
Section
Ensembles_finis.
Variable
U: Type.
Inductive
Finite : (Ensemble U) -> Prop :=
Empty_is_finite: (Finite (Empty_set U))
| Union_is_finite:
(A: (Ensemble U)) (Finite A) ->
(x: U) ~ (In U A x) -> (Finite (Add
U A x)).
Inductive
cardinal : (Ensemble U) -> nat -> Prop :=
card_empty: (cardinal (Empty_set U) O)
| card_add:
(A: (Ensemble U)) (n: nat) (cardinal A n) ->
(x: U) ~ (In U A x) -> (cardinal (Add
U A x) (S n)).
End
Ensembles_finis.
Hints
Resolve Empty_is_finite Union_is_finite : sets v62.
Hints
Resolve card_empty card_add : sets v62.
Require
Constructive_sets.
Section
Ensembles_finis_facts.
Variable
U: Type.
Lemma
cardinal_invert :
(X: (Ensemble U)) (p:nat)(cardinal U X p) -> Case p of
X == (Empty_set U)
[n:nat] (EXT A | (EXT x |
X == (Add
U A x) /\ ~ (In U A x) /\ (cardinal U A n))) end.
Proof
.
Induction 1; Simpl; Auto.
Intros; Exists A; Exists x; Auto.
Qed
.
Lemma
cardinal_elim :
(X: (Ensemble U)) (p:nat)(cardinal U X p) -> Case p of
X == (Empty_set U)
[n:nat](Inhabited U X) end.
Proof
.
Intros X p C; Elim C; Simpl; Trivial with sets.
Qed
.
End
Ensembles_finis_facts.