From fa4b252945a870100305c159d20e264be18973ce Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Thu, 26 Nov 2020 01:00:41 +0000 Subject: Add proof documentation --- docs/proof/Maps.html | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/proof/Maps.html (limited to 'docs/proof/Maps.html') diff --git a/docs/proof/Maps.html b/docs/proof/Maps.html new file mode 100644 index 0000000..296287e --- /dev/null +++ b/docs/proof/Maps.html @@ -0,0 +1,65 @@ + + + + + + +Maps.v + + + + + + + + + +
+ + +
From vericert Require Import Vericertlib.
+
+From compcert Require Export Maps.
+From compcert Require Import Errors.
+Import PTree.
+
+Set Implicit Arguments.
+
+Local Open Scope error_monad_scope.
+
+(** Instance of traverse for [PTree] and [Errors]. This should maybe be generalised
+    in the future. *)
+
+Module PTree.
+
+Fixpoint xtraverse (A B : Type) (f : positive -> A -> res B) (m : PTree.t A) (i : positive)
+         {struct m} : res (PTree.t B) :=
+  match m with
+  | Leaf => OK Leaf
+  | Node l o r =>
+    let newo :=
+        match o with
+        | None => OK None
+        | Some x =>
+          match f (prev i) x with
+          | Error err => Error err
+          | OK val => OK (Some val)
+          end
+        end in
+    match newo with
+    | OK no =>
+      do nl <- xtraverse f l (xO i);
+      do nr <- xtraverse f r (xI i);
+      OK (Node nl no nr)
+    | Error msg => Error msg
+    end
+  end.
+
+Definition traverse (A B : Type) (f : positive -> A -> res B) m := xtraverse f m xH.
+
+Definition traverse1 (A B : Type) (f : A -> res B) := traverse (fun _ => f).
+
+End PTree.
+
+
+ -- cgit