1
0
mirror of https://github.com/nmvdw/HITs-Examples synced 2025-11-03 15:13:51 +01:00

Added basis for reflection in interface

This commit is contained in:
Niels
2017-08-07 14:55:07 +02:00
parent d9cde16f5a
commit d5585f32c6
2 changed files with 96 additions and 1 deletions

View File

@@ -40,4 +40,70 @@ Section interface.
f_filter : forall A ϕ X, f A (filter ϕ X) = comprehension ϕ (f A X);
f_member : forall A a X, member a X = isIn a (f A X)
}.
End interface.
End interface.
Section properties.
Context `{Univalence}.
Variable (T : Type -> Type) (f : forall A, T A -> FSet A).
Context `{sets T f}.
Definition set_eq : forall A, T A -> T A -> hProp := fun A X Y => (BuildhProp (f A X = f A Y)).
Definition set_subset : forall A, T A -> T A -> hProp := fun A X Y => subset (f A X) (f A Y).
Ltac reduce := intros ; repeat (rewrite ?(f_empty _ _) ; rewrite ?(f_singleton _ _) ;
rewrite ?(f_union _ _) ; rewrite ?(f_filter _ _) ;
rewrite ?(f_member _ _)).
Definition empty_isIn : forall (A : Type) (a : A), member a empty = False_hp.
Proof.
reduce.
reflexivity.
Defined.
Definition singleton_isIn : forall (A : Type) (a b : A),
member a (singleton b) = BuildhProp (Trunc (-1) (a = b)).
Proof.
reduce.
reflexivity.
Defined.
Definition union_isIn : forall (A : Type) (a : A) (X Y : T A),
member a (union X Y) = lor (member a X) (member a Y).
Proof.
reduce.
reflexivity.
Defined.
Definition filter_isIn : forall (A : Type) (a : A) (ϕ : A -> Bool) (X : T A),
member a (filter ϕ X) = if ϕ a then member a X else False_hp.
Proof.
reduce.
apply properties.comprehension_isIn.
Defined.
Definition reflect_eq : forall (A : Type) (X Y : T A),
f A X = f A Y -> set_eq A X Y.
Proof.
auto.
Defined.
Definition reflect_subset : forall (A : Type) (X Y : T A),
subset (f A X) (f A Y) -> set_subset A X Y.
Proof.
auto.
Defined.
Variable (A : Type).
Context `{DecidablePaths A}.
Lemma union_comm : forall (X Y : T A),
set_eq A (union X Y) (union Y X).
Proof.
intros.
apply reflect_eq.
reduce.
apply lattice_fset.
Defined.
End properties.