mirror of https://github.com/nmvdw/HITs-Examples
Finish the comprehension_idem proof with functional extensionality
This commit is contained in:
parent
f23d4aeacb
commit
2f68e833af
30
FinSets.v
30
FinSets.v
|
@ -334,6 +334,19 @@ Parameter A : Type.
|
||||||
Parameter A_eqdec : forall (x y : A), Decidable (x = y).
|
Parameter A_eqdec : forall (x y : A), Decidable (x = y).
|
||||||
Definition deceq (x y : A) :=
|
Definition deceq (x y : A) :=
|
||||||
if dec (x = y) then true else false.
|
if dec (x = y) then true else false.
|
||||||
|
|
||||||
|
Lemma union_idem : forall (X : FSet A), U X X = X.
|
||||||
|
Proof.
|
||||||
|
hinduction; try (intros; apply set_path2).
|
||||||
|
- apply nr.
|
||||||
|
- intros. apply idem.
|
||||||
|
- intros X Y HX HY. etransitivity.
|
||||||
|
rewrite assoc. rewrite (comm _ X Y). rewrite <- (assoc _ Y X X).
|
||||||
|
rewrite comm.
|
||||||
|
rewrite assoc. rewrite HX. rewrite HY. reflexivity.
|
||||||
|
rewrite comm. reflexivity.
|
||||||
|
Defined.
|
||||||
|
|
||||||
Definition isIn : A -> FSet A -> Bool.
|
Definition isIn : A -> FSet A -> Bool.
|
||||||
Proof.
|
Proof.
|
||||||
intros a.
|
intros a.
|
||||||
|
@ -397,11 +410,11 @@ hrecursion Y; try (intros; apply set_path2).
|
||||||
reflexivity.
|
reflexivity.
|
||||||
Defined.
|
Defined.
|
||||||
|
|
||||||
Require Import FunextAxiom.
|
Lemma comprehension_idem' `{Funext}:
|
||||||
Lemma comprehension_idem:
|
|
||||||
forall (X:FSet A), forall Y, comprehension (fun x => isIn x (U X Y)) X = X.
|
forall (X:FSet A), forall Y, comprehension (fun x => isIn x (U X Y)) X = X.
|
||||||
Proof.
|
Proof.
|
||||||
hinduction; try (intros; apply set_path2).
|
hinduction.
|
||||||
|
all: try (intros; apply path_forall; intro; apply set_path2).
|
||||||
- intro Y. cbv. reflexivity.
|
- intro Y. cbv. reflexivity.
|
||||||
- intros a Y. cbn.
|
- intros a Y. cbn.
|
||||||
unfold deceq;
|
unfold deceq;
|
||||||
|
@ -415,7 +428,16 @@ hinduction; try (intros; apply set_path2).
|
||||||
+ rewrite (comm _ X1 X2).
|
+ rewrite (comm _ X1 X2).
|
||||||
rewrite <- (assoc _ X2 X1 Y).
|
rewrite <- (assoc _ X2 X1 Y).
|
||||||
apply (IH2 (U X1 Y)).
|
apply (IH2 (U X1 Y)).
|
||||||
Admitted.
|
Defined.
|
||||||
|
|
||||||
|
Lemma comprehension_idem `{Funext}:
|
||||||
|
forall (X:FSet A), comprehension (fun x => isIn x X) X = X.
|
||||||
|
Proof.
|
||||||
|
intros X.
|
||||||
|
enough (comprehension (fun x : A => isIn x (U X X)) X = X).
|
||||||
|
rewrite (union_idem) in X0. assumption.
|
||||||
|
apply comprehension_idem'.
|
||||||
|
Defined.
|
||||||
|
|
||||||
Definition intersection :
|
Definition intersection :
|
||||||
FSet A -> FSet A -> FSet A.
|
FSet A -> FSet A -> FSet A.
|
||||||
|
|
Loading…
Reference in New Issue