You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.4 KiB

(*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
open PulseBasicInterface
type value = AbstractValue.t
type event = Call of {return: value option; arguments: value list}
type vertex = string
type register = string
type configuration = {vertex: vertex; memory: (register * value) list}
(** Let P be the [path_condition] in the enclosing pulse state, and let Q be the [path_condition] in
the [simple_state] below. Then, the facts we know are PQ, and it should be that V PQ,
where V are the abstract values mentioned in the pre/post-configurations of the simple state, is
equivalent to P. In other words, the facts in Q should not constrain program variables but may
constrain Topl registers. *)
type simple_state =
{ pre: configuration (** at the start of the procedure *)
; post: configuration (** at the current program point *)
; path_condition: PathCondition.t }
(* TODO: include a hash of the automaton in a summary to avoid caching problems. *)
type state = simple_state list
let start () = (* TODO *) []
let small_step _condition _event state = (* TODO *) state
let large_step ~substitution:_ ~condition:_ ~callee_prepost:_ _state = (* TODO *) []
let pp_state _formatter _state = (* TODO *) ()