Library examples.vertex_fibonacci__code

Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_parabs.pool.
Require Import zoo_parabs.vertex.
Require Import zoo_std.ivar_4.
Require Import zoo.options.

Definition vertex_fibonacciู mainโ‚ : val :=
  ๐—ฟ๐—ฒ๐—ฐ "main" "ctx" "vtx" "r" "n" โ†’
    ๐—ถ๐—ณ "n" โ‰ค 1 ๐˜๐—ต๐—ฒ๐—ป (
      "r" <- "n" โฎ
      true
    ) ๐—ฒ๐—น๐˜€๐—ฒ (
      ๐—น๐—ฒ๐˜ "r1" = ๐—ฟ๐—ฒ๐—ณ 0 ๐—ถ๐—ป
      ๐—น๐—ฒ๐˜ "vtx1" = vertexู create ยงNone ๐—ถ๐—ป
      ๐—น๐—ฒ๐˜ "n1" = "n" - 1 ๐—ถ๐—ป
      vertexู set_task
        "vtx1"
        (๐—ณ๐˜‚๐—ป "ctx" โ†’ "main" "ctx" "vtx1" "r1" "n1") โฎ
      vertexู release "ctx" "vtx1" โฎ
      ๐—น๐—ฒ๐˜ "r2" = ๐—ฟ๐—ฒ๐—ณ 0 ๐—ถ๐—ป
      ๐—น๐—ฒ๐˜ "vtx2" = vertexู create ยงNone ๐—ถ๐—ป
      ๐—น๐—ฒ๐˜ "n2" = "n" - 2 ๐—ถ๐—ป
      vertexู set_task
        "vtx2"
        (๐—ณ๐˜‚๐—ป "ctx" โ†’ "main" "ctx" "vtx2" "r2" "n2") โฎ
      vertexู release "ctx" "vtx2" โฎ
      vertexู precede "vtx1" "vtx" โฎ
      vertexู precede "vtx2" "vtx" โฎ
      vertexู yield "vtx"
        (๐—ณ๐˜‚๐—ป "_ctx" โ†’ "r" <- !"r1" + !"r2" โฎ
                                true)
    ).

Definition vertex_fibonacciู main : val :=
  ๐—ณ๐˜‚๐—ป "num_worker" "n" โ†’
    poolู run
      "num_worker"
      (๐—ณ๐˜‚๐—ป "ctx" โ†’
         ๐—น๐—ฒ๐˜ "r" = ๐—ฟ๐—ฒ๐—ณ 0 ๐—ถ๐—ป
         ๐—น๐—ฒ๐˜ "vtx1" = vertexู create ยงNone ๐—ถ๐—ป
         vertexู set_task
           "vtx1"
           (๐—ณ๐˜‚๐—ป "ctx" โ†’
              vertex_fibonacciู mainโ‚ "ctx" "vtx1" "r" "n") โฎ
         vertexู release "ctx" "vtx1" โฎ
         ๐—น๐—ฒ๐˜ "ivar" = ivar_4ู create () ๐—ถ๐—ป
         ๐—น๐—ฒ๐˜ "vtx2" =
           vertexู create'
             (๐—ณ๐˜‚๐—ป "ctx" โ†’ ivar_4ู notify "ivar" "ctx" ())
         ๐—ถ๐—ป
         vertexู precede "vtx1" "vtx2" โฎ
         vertexู release "ctx" "vtx2" โฎ
         poolู wait_ivar "ctx" "ivar" โฎ
         !"r").