From 2883e24294a5be52a1cd99acf577589629e4927e Mon Sep 17 00:00:00 2001 From: Jan-Oliver Kaiser <janno@mpi-sws.org> Date: Tue, 28 Nov 2017 17:20:19 +0100 Subject: [PATCH] Prove `funbi_cofe`; create section for ofe & cofe. --- theories/bi/monfun.v | 73 ++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/theories/bi/monfun.v b/theories/bi/monfun.v index 6c7fb1af1..96d94317d 100644 --- a/theories/bi/monfun.v +++ b/theories/bi/monfun.v @@ -38,30 +38,49 @@ Proof. by rewrite {1}/dist /= /funbi_dist /=. Qed. -Definition funbi_sig {I B} (P : funbi_ty I B): - sig (fun f : I -c> B => mono (bi_index_rel I) f) := - exist _ (funbi_car P) (funbi_mono P). -Definition sig_funbi {I : bi_index} {B : bi} - (P : sig (fun f : I -c> B => mono (bi_index_rel I) f)): - funbi_ty I B := - FUN (proj1_sig P) (proj2_sig P). - -Lemma funbi_sig_equiv {I B}: - ∀ P Q : funbi_ty I B, P ≡ Q ↔ funbi_sig P ≡ funbi_sig Q. -Proof. done. Qed. - -Lemma funbi_sig_dist {I B}: - ∀ n, ∀ P Q : funbi_ty I B, P ≡{n}≡ Q ↔ funbi_sig P ≡{n}≡ funbi_sig Q. -Proof. done. Qed. - -Lemma funbi_sig_cancel {I B}: - ∀ P, @funbi_sig I B (sig_funbi P) ≡ P. -Proof. intros [f M]. reflexivity. Qed. - -Definition funbi_ofe_mixin I B : OfeMixin (funbi_ty I B). -Proof. by apply (iso_ofe_mixin funbi_sig funbi_sig_equiv funbi_sig_dist). Qed. - -Canonical Structure funbi_ofe I B := OfeT (funbi_ty I B) (funbi_ofe_mixin I B). +Section Ofe_Cofe. + Context {I : bi_index} {B : bi}. + Implicit Types i : I. + Implicit Types P : funbi_ty I B. + + Definition funbi_sig P: + sig (fun f : I -c> B => mono (bi_index_rel I) f) := + exist _ (funbi_car P) (funbi_mono P). + + Definition sig_funbi + (P' : sig (fun f : I -c> B => mono (bi_index_rel I) f)): + funbi_ty I B := + FUN (proj1_sig P') (proj2_sig P'). + + Lemma funbi_sig_equiv: + ∀ P Q, P ≡ Q ↔ funbi_sig P ≡ funbi_sig Q. + Proof. done. Qed. + + Lemma funbi_sig_dist: + ∀ n, ∀ P Q : funbi_ty I B, P ≡{n}≡ Q ↔ funbi_sig P ≡{n}≡ funbi_sig Q. + Proof. done. Qed. + + Definition funbi_ofe_mixin : OfeMixin (funbi_ty I B). + Proof. by apply (iso_ofe_mixin funbi_sig funbi_sig_equiv funbi_sig_dist). Qed. + + Canonical Structure funbi_ofe := OfeT (funbi_ty I B) (funbi_ofe_mixin). + + Instance funbi_cofe + {C : Cofe B} + {limit_preserving_entails : + ∀ cP cQ : chain B, (∀ n, cP n ⊢ cQ n) → compl cP ⊢ compl cQ} + : Cofe (funbi_ofe). + Proof. + unshelve refine (iso_cofe_subtype (A:=I-c>B) + (fun f => mono (bi_index_rel I) f) + (@FUN _ _) + (@funbi_car _ _) _ _ _); + [done|done|]. + intros c i j Hij. + apply limit_preserving_entails. + intros. by apply funbi_mono. + Qed. +End Ofe_Cofe. Inductive funbi_entails {I B} (P1 P2 : funbi_ty I B) : Prop := funbi_in_entails : (∀ i, bi_entails (funbi_car P1 i) (funbi_car P2 i)) → funbi_entails P1 P2. @@ -196,7 +215,7 @@ Local Definition unseal_eqs := ). Lemma funbi_mixin I B : - BiMixin (funbi_ofe_mixin I B) funbi_entails funbi_emp funbi_pure funbi_and funbi_or funbi_impl funbi_forall funbi_exist funbi_internal_eq funbi_sep funbi_wand funbi_plainly funbi_persistently. + BiMixin (@funbi_ofe_mixin I B) funbi_entails funbi_emp funbi_pure funbi_and funbi_or funbi_impl funbi_forall funbi_exist funbi_internal_eq funbi_sep funbi_wand funbi_plainly funbi_persistently. Proof. rewrite !unseal_eqs. split; @@ -290,7 +309,7 @@ Admitted. Canonical Structure funbi I B : bi := - Bi (funbi_ty I B) funbi_dist funbi_equiv funbi_entails funbi_emp funbi_pure funbi_and funbi_or funbi_impl funbi_forall funbi_exist funbi_internal_eq funbi_sep funbi_wand funbi_plainly funbi_persistently (funbi_ofe_mixin _ _) (funbi_mixin _ _). + Bi (funbi_ty I B) funbi_dist funbi_equiv funbi_entails funbi_emp funbi_pure funbi_and funbi_or funbi_impl funbi_forall funbi_exist funbi_internal_eq funbi_sep funbi_wand funbi_plainly funbi_persistently funbi_ofe_mixin (funbi_mixin _ _). Instance funbi_affine I B : BiAffine B → BiAffine (funbi I B). Proof. split => ?. by apply affine. Qed. @@ -354,7 +373,7 @@ Proof. intros. by rewrite funbi_mono. Qed. Canonical Structure funsbi I (B : sbi) : sbi := - Sbi (funbi_ty I B) funbi_dist funbi_equiv funbi_entails funbi_emp funbi_pure funbi_and funbi_or funbi_impl funbi_forall funbi_exist funbi_internal_eq funbi_sep funbi_wand funbi_plainly funbi_persistently funbi_later (funbi_ofe_mixin I B) (bi_bi_mixin _) (funsbi_mixin _ _). + Sbi (funbi_ty I B) funbi_dist funbi_equiv funbi_entails funbi_emp funbi_pure funbi_and funbi_or funbi_impl funbi_forall funbi_exist funbi_internal_eq funbi_sep funbi_wand funbi_plainly funbi_persistently funbi_later funbi_ofe_mixin (bi_bi_mixin _) (funsbi_mixin _ _). Ltac unseal := rewrite /(@sbi_except_0 (funsbi _ _)) -- GitLab