Commit 1804da3f by Robbert Krebbers

### Simplify collection spaghetti.

```There was not really a need for the lattice type classes, so I removed
these.```
parent d1fa8150
 ... ... @@ -250,6 +250,12 @@ Lemma and_wlog_r (P Q : Prop) : P → (P → Q) → (P ∧ Q). Proof. tauto. Qed. Lemma impl_transitive (P Q R : Prop) : (P → Q) → (Q → R) → (P → R). Proof. tauto. Qed. Lemma forall_proper {A} (P Q : A → Prop) : (∀ x, P x ↔ Q x) → (∀ x, P x) ↔ (∀ x, Q x). Proof. firstorder. Qed. Lemma exist_proper {A} (P Q : A → Prop) : (∀ x, P x ↔ Q x) → (∃ x, P x) ↔ (∃ x, Q x). Proof. firstorder. Qed. Instance: Comm (↔) (@eq A). Proof. red; intuition. Qed. ... ... @@ -872,30 +878,7 @@ Notation "<[ k := a ]{ Γ }>" := (insertE Γ k a) Arguments insertE _ _ _ _ _ _ !_ _ !_ / : simpl nomatch. (** * Ordered structures *) (** We do not use a setoid equality in the following interfaces to avoid the need for proofs that the relations and operations are proper. Instead, we define setoid equality generically [λ X Y, X ⊆ Y ∧ Y ⊆ X]. *) Class EmptySpec A `{Empty A, SubsetEq A} : Prop := subseteq_empty X : ∅ ⊆ X. Class JoinSemiLattice A `{SubsetEq A, Union A} : Prop := { join_semi_lattice_pre :>> PreOrder (⊆); union_subseteq_l X Y : X ⊆ X ∪ Y; union_subseteq_r X Y : Y ⊆ X ∪ Y; union_least X Y Z : X ⊆ Z → Y ⊆ Z → X ∪ Y ⊆ Z }. Class MeetSemiLattice A `{SubsetEq A, Intersection A} : Prop := { meet_semi_lattice_pre :>> PreOrder (⊆); intersection_subseteq_l X Y : X ∩ Y ⊆ X; intersection_subseteq_r X Y : X ∩ Y ⊆ Y; intersection_greatest X Y Z : Z ⊆ X → Z ⊆ Y → Z ⊆ X ∩ Y }. Class Lattice A `{SubsetEq A, Union A, Intersection A} : Prop := { lattice_join :>> JoinSemiLattice A; lattice_meet :>> MeetSemiLattice A; lattice_distr X Y Z : (X ∪ Y) ∩ (X ∪ Z) ⊆ X ∪ (Y ∩ Z) }. (** ** Axiomatization of collections *) (** * Axiomatization of collections *) (** The class [SimpleCollection A C] axiomatizes a collection of type [C] with elements of type [A]. *) Class SimpleCollection A C `{ElemOf A C, ... ...
This diff is collapsed.
 ... ... @@ -36,8 +36,7 @@ Proof. Qed. Lemma dom_empty {A} : dom D (@empty (M A) _) ≡ ∅. Proof. split; intro; [|set_solver]. rewrite elem_of_dom, lookup_empty. by inversion 1. intros x. rewrite elem_of_dom, lookup_empty, <-not_eq_None_Some. set_solver. Qed. Lemma dom_empty_inv {A} (m : M A) : dom D m ≡ ∅ → m = ∅. Proof. ... ...
 ... ... @@ -190,11 +190,6 @@ Proof. unfold subseteq, map_subseteq, map_relation. split; intros Hm i; specialize (Hm i); destruct (m1 !! i), (m2 !! i); naive_solver. Qed. Global Instance: EmptySpec (M A). Proof. intros A m. rewrite !map_subseteq_spec. intros i x. by rewrite lookup_empty. Qed. Global Instance: ∀ {A} (R : relation A), PreOrder R → PreOrder (map_included R). Proof. split; [intros m i; by destruct (m !! i); simpl|]. ... ...
 ... ... @@ -28,7 +28,8 @@ Qed. Lemma listset_empty_alt X : X ≡ ∅ ↔ listset_car X = []. Proof. destruct X as [l]; split; [|by intros; simplify_eq/=]. intros [Hl _]; destruct l as [|x l]; [done|]. feed inversion (Hl x); left. rewrite elem_of_equiv_empty; intros Hl. destruct l as [|x l]; [done|]. feed inversion (Hl x). left. Qed. Global Instance listset_empty_dec (X : listset A) : Decision (X ≡ ∅). Proof. ... ...
 ... ... @@ -63,8 +63,8 @@ Proof. intros [m1] [m2] ?. simpl. rewrite lookup_difference_Some. destruct (m2 !! x) as [[]|]; intuition congruence. Qed. Global Instance: PartialOrder (@subseteq (mapset M) _). Proof. split; try apply _. intros ????. apply mapset_eq. intuition. Qed. Global Instance: LeibnizEquiv (mapset M). Proof. intros ??. apply mapset_eq. Qed. Global Instance: FinCollection K (mapset M). Proof. split. ... ...
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!