|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Michael Sammler. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Markus de Medeiros |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Iris.BI.Sbi |
| 9 | +public import Iris.BI.Plainly |
| 10 | +public import Iris.Std.RocqAlias |
| 11 | + |
| 12 | +@[expose] public section |
| 13 | + |
| 14 | +/-! |
| 15 | +# Generic CMRA validity in a BI logic |
| 16 | +
|
| 17 | +This file defines the generic internal CMRA validity for any `Sbi PROP`, |
| 18 | +as `<si_pure> cmraValid a`. |
| 19 | +-/ |
| 20 | + |
| 21 | +namespace Iris |
| 22 | +open BI OFE SiProp CMRA Sbi |
| 23 | + |
| 24 | +section CmraValid |
| 25 | + |
| 26 | +variable [Sbi PROP] [CMRA A] |
| 27 | + |
| 28 | +@[rocq_alias internal_cmra_valid] |
| 29 | +def internalCmraValid (a : A) : PROP := siPure (cmraValid a) |
| 30 | + |
| 31 | +@[rocq_alias internal_cmra_valid_ne] |
| 32 | +instance internalCmraValid_ne : NonExpansive (internalCmraValid (PROP := PROP) (A := A)) where |
| 33 | + ne _ _ _ h := siPure_ne.ne (instNonExpansiveCmraValid.ne h) |
| 34 | + |
| 35 | +@[rocq_alias internal_cmra_valid_intro] |
| 36 | +theorem internalCmraValid_intro {P : PROP} {a : A} (h : Valid a) : |
| 37 | + P ⊢ internalCmraValid a := |
| 38 | + calc (P : PROP) |
| 39 | + _ ⊢ True := true_intro |
| 40 | + _ ⊢ <si_pure> True := siPure_pure.mpr |
| 41 | + _ ⊢ internalCmraValid a := siPure_mono (cmraValid_intro h) |
| 42 | + |
| 43 | +@[rocq_alias internal_cmra_valid_elim] |
| 44 | +theorem internalCmraValid_elim (a : A) : internalCmraValid a ⊢@{PROP} ⌜✓{0} a⌝ := |
| 45 | + calc internalCmraValid a |
| 46 | + _ ⊢ <si_pure> ⌜✓{0} a⌝ := siPure_mono cmraValid_elim |
| 47 | + _ ⊢ ⌜✓{0} a⌝ := siPure_pure.mp |
| 48 | + |
| 49 | +@[rocq_alias internal_cmra_valid_weaken] |
| 50 | +theorem internalCmraValid_weaken {a b : A} : |
| 51 | + internalCmraValid (a • b) ⊢@{PROP} internalCmraValid a := |
| 52 | + siPure_mono cmraValid_weaken |
| 53 | + |
| 54 | +@[rocq_alias internal_cmra_valid_entails] |
| 55 | +theorem internalCmraValid_entails [CMRA B] {a : A} {b : B} : |
| 56 | + (internalCmraValid a ⊢@{PROP} internalCmraValid b) ↔ ∀ n, ✓{n} a → ✓{n} b := |
| 57 | + siPure_entails.trans cmraValid_entails_iff |
| 58 | + |
| 59 | +@[rocq_alias si_pure_internal_cmra_valid] |
| 60 | +theorem siPure_internalCmraValid {a : A} : <si_pure> cmraValid a ⊣⊢@{PROP} internalCmraValid a := |
| 61 | + .rfl |
| 62 | + |
| 63 | +@[rocq_alias persistently_internal_cmra_valid] |
| 64 | +theorem persistently_internalCmraValid {a : A} : |
| 65 | + <pers> internalCmraValid a ⊣⊢@{PROP} internalCmraValid a := |
| 66 | + persistently_siPure |
| 67 | + |
| 68 | +@[rocq_alias plainly_internal_cmra_valid] |
| 69 | +theorem plainly_internalCmraValid (a : A) : |
| 70 | + ■ internalCmraValid a ⊣⊢@{PROP} internalCmraValid a := |
| 71 | + plainly_siPure |
| 72 | + |
| 73 | +@[rocq_alias intuitionistically_internal_cmra_valid] |
| 74 | +theorem intuitionistically_internalCmraValid [BIAffine PROP] {a : A} : |
| 75 | + □ internalCmraValid a ⊣⊢@{PROP} internalCmraValid a := |
| 76 | + intuitionistically_iff_persistently.trans persistently_internalCmraValid |
| 77 | + |
| 78 | +@[rocq_alias internal_cmra_valid_discrete] |
| 79 | +theorem internalCmraValid_discrete [CMRA.Discrete A] {a : A} : |
| 80 | + internalCmraValid a ⊣⊢@{PROP} ⌜✓ a⌝ := |
| 81 | + ⟨(internalCmraValid_elim a).trans <| pure_mono (discrete_valid ·), |
| 82 | + pure_elim' internalCmraValid_intro⟩ |
| 83 | + |
| 84 | +@[rocq_alias internal_cmra_valid_persistent] |
| 85 | +instance internalCmraValid_persistent (a : A) : |
| 86 | + Persistent (PROP := PROP) (internalCmraValid a) where |
| 87 | + persistent := persistently_internalCmraValid.mpr |
| 88 | + |
| 89 | +@[rocq_alias internal_cmra_valid_absorbing] |
| 90 | +instance internalCmraValid_absorbing (a : A) : |
| 91 | + Absorbing (PROP := PROP) (internalCmraValid a) := |
| 92 | + siPure_absorbing _ |
| 93 | + |
| 94 | +@[rocq_alias internal_cmra_valid_plain] |
| 95 | +instance internalCmraValid_plain (a : A) : |
| 96 | + Plain (PROP := PROP) (internalCmraValid a) where |
| 97 | + plain := plainly_internalCmraValid a |>.mpr |
| 98 | + |
| 99 | +end CmraValid |
| 100 | + |
| 101 | +end Iris |
0 commit comments