bedrock.lang.bi.spec.constant
(*
* Copyright (C) BedRock Systems Inc. 2020-2022
*
* This software is distributed under the terms of the BedRock Open-Source License.
* See the LICENSE-BedRock file in the repository root for details.
*)
Require Import bedrock.lang.bi.prelude.
Require Import bedrock.lang.bi.observe.
Require Import bedrock.lang.bi.spec.knowledge.
Import ChargeNotation.
#[local] Set Primitive Projections.
* Copyright (C) BedRock Systems Inc. 2020-2022
*
* This software is distributed under the terms of the BedRock Open-Source License.
* See the LICENSE-BedRock file in the repository root for details.
*)
Require Import bedrock.lang.bi.prelude.
Require Import bedrock.lang.bi.observe.
Require Import bedrock.lang.bi.spec.knowledge.
Import ChargeNotation.
#[local] Set Primitive Projections.
Spec building block: logical constants
Class Constant {A} {PROP : bi} (I : PROP) (P : A → PROP) : Prop := {
#[global] constant_inv_knowledge :: Knowledge I;
#[global] constant_exist :: Observe (Exists x, P x) I;
#[global] constant_unique x y :: Observe2 [| x = y |] (P x) (P y);
#[global] constant_knowledge x :: Knowledge (P x);
#[global] constant_timeless x :: Timeless (P x);
}.
Arguments constant_exist {_ _} (_ _)%_I {_} : assert.
Arguments constant_unique {_ _} (_ _)%_I {_} _ _ : assert.