bedrock.lang.cpp
bedrock.lang.algebra.authset
- CMRA: Auth/frag splits on sets, with strengthening
- AuthSet.frag (s : propset A)
- AuthSet.auth (s : propset A)
- ✓ (AuthSet.frag s1 ⋅ AuthSet.auth s2) <-> s1 ⊆ s2; and
- AuthSet.frag s ~~> AuthSet.frag s' when s' ⊆ s (removing elements
bedrock.lang.algebra.base
bedrock.lang.algebra.big_op
bedrock.lang.algebra.coGset
bedrock.lang.algebra.dfrac_agree
bedrock.lang.algebra.excl_auth
bedrock.lang.algebra.frac_auth
bedrock.lang.algebra.gset_bij
bedrock.lang.algebra.list
bedrock.lang.algebra.monoid
bedrock.lang.algebra.restrict
bedrock.lang.algebra.telescopes
bedrock.lang.base_logic.invariants
bedrock.lang.base_logic.iprop_invariants
bedrock.lang.base_logic.iprop_own
bedrock.lang.base_logic.iprop_prop
bedrock.lang.base_logic.monpred_invariants
bedrock.lang.base_logic.monpred_own
bedrock.lang.base_logic.mpred
bedrock.lang.base_logic.mpred_prop
bedrock.lang.base_logic.own_instances
bedrock.lang.base_logic.upred_entailsN
bedrock.lang.base_logic.lib.auth_set
bedrock.lang.base_logic.lib.mono_list
bedrock.lang.base_logic.lib.spectra
bedrock.lang.base_logic.lib.spectra_iprop
bedrock.lang.base_logic.lib.spectra_mpred
bedrock.lang.bi.ChargeCompat
bedrock.lang.bi.atomic1
bedrock.lang.bi.atomic_commit
bedrock.lang.bi.atomic_read
bedrock.lang.bi.atomic_update
bedrock.lang.bi.atomic_update_properties
bedrock.lang.bi.big_op
bedrock.lang.bi.cancelable_invariants
bedrock.lang.bi.derived_laws
bedrock.lang.bi.embedding
bedrock.lang.bi.entailsN
bedrock.lang.bi.errors
bedrock.lang.bi.fractional
bedrock.lang.bi.fupd_iff
bedrock.lang.bi.includedI
bedrock.lang.bi.invariants
bedrock.lang.bi.laterable
bedrock.lang.bi.linearity
bedrock.lang.bi.monpred
bedrock.lang.bi.monpred_entailsN
bedrock.lang.bi.na_invariants
bedrock.lang.bi.observe
bedrock.lang.bi.only_provable
- Properties of only_provable.
- We don't register instances
- - @FromAffinely PROP [| P |] ⌜P⌝
- - @IntoAbsorbingly PROP ⌜P⌝ [| P |]
- as they would interact poorly with, e.g., iSplit, changing
- goals like [| P |] ** Q into subgoals involving bi_pure
- rather than only_provable.
bedrock.lang.bi.own
bedrock.lang.bi.prelude
bedrock.lang.bi.prop_constraints
bedrock.lang.bi.spec
bedrock.lang.bi.split_andb
bedrock.lang.bi.split_andb_tests
bedrock.lang.bi.split_frac
bedrock.lang.bi.split_frac_tests
bedrock.lang.bi.telescopes
bedrock.lang.bi.wand_borrow
bedrock.lang.bi.weakly_objective
bedrock.lang.bi.spec.constant
bedrock.lang.bi.spec.contender_token
bedrock.lang.bi.spec.exclusive
bedrock.lang.bi.spec.frac_splittable
bedrock.lang.bi.spec.knowledge
bedrock.lang.bi.spec.nary_classes
bedrock.lang.cpp.code_notations
bedrock.lang.cpp.compile
bedrock.lang.cpp.logic
bedrock.lang.cpp.mparser
bedrock.lang.cpp.notations
bedrock.lang.cpp.parser
bedrock.lang.cpp.primitives
bedrock.lang.cpp.reserved_notation
bedrock.lang.cpp.semantics
bedrock.lang.cpp.specs
bedrock.lang.cpp.syntax
bedrock.lang.cpp.algebra.cfrac
bedrock.lang.cpp.arith.builtins
bedrock.lang.cpp.arith.operator
bedrock.lang.cpp.arith.types
bedrock.lang.cpp.arith.z_to_bytes
bedrock.lang.cpp.bi.cfractional
bedrock.lang.cpp.bi.cfractional_tests
bedrock.lang.cpp.bi.spec
bedrock.lang.cpp.bi.split_cfrac
bedrock.lang.cpp.bi.split_cfrac_tests
bedrock.lang.cpp.bi.spec.cfrac_splittable
bedrock.lang.cpp.bi.spec.typed
bedrock.lang.cpp.logic.arr
bedrock.lang.cpp.logic.atomics
bedrock.lang.cpp.logic.atomics_derived
bedrock.lang.cpp.logic.builtins
bedrock.lang.cpp.logic.call
bedrock.lang.cpp.logic.const
bedrock.lang.cpp.logic.core_string
bedrock.lang.cpp.logic.cptr
bedrock.lang.cpp.logic.cstring
bedrock.lang.cpp.logic.destroy
bedrock.lang.cpp.logic.dispatch
- reflecting virtual function dispatch in the logic.
- implementation and the downcast for this pointer.
bedrock.lang.cpp.logic.entailsN
bedrock.lang.cpp.logic.expr
- Semantics of expressions
- (expressed in weakest pre-condition style)
- Weakest pre-condition for expressions
- String Literals
- Unary Operators
- Binary Operators
- Casts
- Cderived2base
- of the "then" and "else" expressions (which must be the same).
- We express this with 4 rules, one for each of wp_lval,
- wp_operand, wp_xval, and wp_init.
- Function calls
- Member calls
- Operator Calls
bedrock.lang.cpp.logic.func
bedrock.lang.cpp.logic.heap_pred
bedrock.lang.cpp.logic.initializers
bedrock.lang.cpp.logic.layout
bedrock.lang.cpp.logic.mpred
bedrock.lang.cpp.logic.new_delete
- Weakest pre-condition for new and delete expressions
- The semantics of
new
anddelete
expressions (including their array forms) - are *very* complex in C++. This is due to a litany of corner cases such as:
- - the need to pair allocation and de-allocation functions
- - the existance of placement
new
- - the need to handle alignment as well as size.
- - the potential for padding bytes.
- - the potential to merge allocations. (BRiCk does not attempt to support this)
- NOTE It is important that these rules are sound, but less important that
- they are complete. When in doubt, we err on the side of caution and under-specify
- the behavior of various constructs.
- If you run into code that requires addditional semantic specification, please file
- an issue.
- <https://eel.is/c++draft/new.delete.placement1>.
- NOTE: placement <new> is more subtle than the rule described here
- because it can be used to construct an object over an existing
- object.
- the form
delete p;
- wherep
is a non-null pointer to an object whose - most-derived destructor is defined in the current translation unit.
bedrock.lang.cpp.logic.object_repr
bedrock.lang.cpp.logic.operator
bedrock.lang.cpp.logic.path_pred
bedrock.lang.cpp.logic.pred
bedrock.lang.cpp.logic.pred_paradoxes
bedrock.lang.cpp.logic.raw
bedrock.lang.cpp.logic.rep
bedrock.lang.cpp.logic.rep_defs
bedrock.lang.cpp.logic.rep_proofmode
bedrock.lang.cpp.logic.stmt
- Attribute Evaluation
- Expression Evaluation
- Declarations
- Blocks
if
while
for
do
return
break
continue
switch
bedrock.lang.cpp.logic.string
- cstrings and zstrings
- cstring.t and cstring.WF - Well Formed BS.ts (bytestrings) as a Carrier Type for C++ Strings
- cstring.R - Fixed Sized Strings
- cstring.bufR - Dynamic Sized Strings Backed by Fixed Sized Character Arrays
bedrock.lang.cpp.logic.translation_unit
bedrock.lang.cpp.logic.vbyte
bedrock.lang.cpp.logic.wp
bedrock.lang.cpp.logic.wp_notations
bedrock.lang.cpp.logic.z_to_bytes
bedrock.lang.cpp.logic.zstring
bedrock.lang.cpp.logic.heap_pred.aggregate
bedrock.lang.cpp.logic.heap_pred.any
bedrock.lang.cpp.logic.heap_pred.block
bedrock.lang.cpp.logic.heap_pred.everywhere
bedrock.lang.cpp.logic.heap_pred.least
bedrock.lang.cpp.logic.heap_pred.null
bedrock.lang.cpp.logic.heap_pred.prelude
bedrock.lang.cpp.logic.heap_pred.prim
bedrock.lang.cpp.logic.heap_pred.simple
bedrock.lang.cpp.logic.heap_pred.tptsto
bedrock.lang.cpp.logic.heap_pred.uninit
bedrock.lang.cpp.logic.heap_pred.valid
bedrock.lang.cpp.logic.lib.agree
- Copyright (C) 2022 BlueRock Security, Inc.
- All rights reserved.
- SPDX-License-Identifier: LGPL-2.1 WITH BedRock Exception for use over network, see repository root for details.
bedrock.lang.cpp.logic.lib.auth_frac
- Copyright (C) 2022 BlueRock Security, Inc.
- All rights reserved.
- SPDX-License-Identifier: LGPL-2.1 WITH BedRock Exception for use over network, see repository root for details.
bedrock.lang.cpp.logic.lib.dfrac_agree
- Copyright (C) 2022 BlueRock Security, Inc.
- All rights reserved.
- SPDX-License-Identifier: LGPL-2.1 WITH BedRock Exception for use over network, see repository root for details.