diff options
| author | Brian Campbell | 2018-06-21 18:08:56 +0100 |
|---|---|---|
| committer | Brian Campbell | 2018-06-22 15:26:32 +0100 |
| commit | 3d8609d963ee411f777ba18dc24fe57bf39dcaab (patch) | |
| tree | d1aa9ec5b09181a2ed63001fa244a920a8113ba4 /lib/coq/Sail2_prompt_monad.v | |
| parent | b550177c4987f6d20500818a6d6d091bb09b0871 (diff) | |
Coq: library updates, esp extending bitvector multiplies, Undefined
Diffstat (limited to 'lib/coq/Sail2_prompt_monad.v')
| -rw-r--r-- | lib/coq/Sail2_prompt_monad.v | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/coq/Sail2_prompt_monad.v b/lib/coq/Sail2_prompt_monad.v index 5bb9d477..2715b5e7 100644 --- a/lib/coq/Sail2_prompt_monad.v +++ b/lib/coq/Sail2_prompt_monad.v @@ -31,6 +31,7 @@ Inductive monad regval a e := | Read_reg : register_name -> (regval -> monad regval a e) -> monad regval a e (* Request to write register *) | Write_reg : register_name -> regval -> monad regval a e -> monad regval a e + | Undefined : (bool -> monad regval a e) -> monad regval a e (*Result : a failed assert with possible error message to report*) | Fail : string -> monad regval a e | Error : string -> monad regval a e @@ -49,6 +50,7 @@ Arguments Footprint [_ _ _]. Arguments Barrier [_ _ _]. Arguments Read_reg [_ _ _]. Arguments Write_reg [_ _ _]. +Arguments Undefined [_ _ _]. Arguments Fail [_ _ _]. Arguments Error [_ _ _]. Arguments Exception [_ _ _]. @@ -65,6 +67,7 @@ Fixpoint bind {rv A B E} (m : monad rv A E) (f : A -> monad rv B E) := match m w | Write_tag a t k => Write_tag a t (fun v => bind (k v) f) | Read_reg descr k => Read_reg descr (fun v => bind (k v) f) | Excl_res k => Excl_res (fun v => bind (k v) f) + | Undefined k => Undefined (fun v => bind (k v) f) | Write_ea wk a sz k => Write_ea wk a sz (bind k f) | Footprint k => Footprint (bind k f) | Barrier bk k => Barrier bk (bind k f) @@ -83,6 +86,9 @@ Notation "m >> n" := (bind0 m n) (at level 50, left associativity). (*val exit : forall rv a e. unit -> monad rv a e*) Definition exit {rv A E} (_ : unit) : monad rv A E := Fail "exit". +(*val undefined_bool : forall 'rv 'e. unit -> monad 'rv bool 'e*) +Definition undefined_bool {rv e} (_:unit) : monad rv bool e := Undefined returnm. + (*val assert_exp : forall rv e. bool -> string -> monad rv unit e*) Definition assert_exp {rv E} (exp :bool) msg : monad rv unit E := if exp then Done tt else Fail msg. @@ -105,6 +111,7 @@ Fixpoint try_catch {rv A E1 E2} (m : monad rv A E1) (h : E1 -> monad rv A E2) := | Write_tag a t k => Write_tag a t (fun v => try_catch (k v) h) | Read_reg descr k => Read_reg descr (fun v => try_catch (k v) h) | Excl_res k => Excl_res (fun v => try_catch (k v) h) + | Undefined k => Undefined (fun v => try_catch (k v) h) | Write_ea wk a sz k => Write_ea wk a sz (try_catch k h) | Footprint k => Footprint (try_catch k h) | Barrier bk k => Barrier bk (try_catch k h) |
