Library examples.vertex_fibonacci
Require Import zoo.prelude.
Require Import zoo.iris.base_logic.lib.fupd.
Require Import zoo.iris.base_logic.lib.saved_prop.
Require Import zoo.base.
Require Export examples.fibonacci.
Require Export examples.vertex_fibonacci__code.
Require Import examples.vertex_fibonacci__types.
Require Import zoo.options.
Implicit Type r : location.
Implicit Type v ctx vtx : val.
Class VertexFibonacciG Σ `{zoo۰G : !ZooG Σ} :=
{ #[local] vertex_fibonacci۰G۰pool۰G :: PoolG Σ
; #[local] vertex_fibonacci۰G۰vertex۰G :: VertexG Σ
; #[local] vertex_fibonacci۰G۰ivar۰G :: Ivar4G Σ
; #[local] vertex_fibonacci۰G۰saved_prop۰G :: SavedPropG Σ
}.
Definition vertex_fibonacci۰Σ :=
#[pool۰Σ
; vertex۰Σ
; ivar_4۰Σ
; saved_prop۰Σ
].
#[global] Instance subGーvertex_fibonacci۰Σ Σ `{zoo۰G : !ZooG Σ} :
subG vertex_fibonacci۰Σ Σ →
VertexFibonacciG Σ.
Section vertex_fibonacci۰G.
Context `{vertex_fibonacci۰G : VertexFibonacciG Σ}.
#[local] Lemma vertex_fibonacci٠main₁ーspec vtx iter r n :
vertex۰inv vtx (r ↦ᵣ #(fibonacci n)) True -∗
r ↦ᵣ 0 -∗
vertex۰wp
vtx
(r ↦ᵣ #(fibonacci n))
True
(𝗳𝘂𝗻 "ctx" → vertex_fibonacci٠main₁ "ctx" vtx #r #n)
iter.
Lemma vertex_fibonacci٠mainーspec (num_dom n : nat) :
{{{
True
}}}
vertex_fibonacci٠main #num_dom #n
{{{
RET #(fibonacci n);
True
}}}.
End vertex_fibonacci۰G.
Require examples.vertex_fibonacci__opaque.
Require Import zoo.iris.base_logic.lib.fupd.
Require Import zoo.iris.base_logic.lib.saved_prop.
Require Import zoo.base.
Require Export examples.fibonacci.
Require Export examples.vertex_fibonacci__code.
Require Import examples.vertex_fibonacci__types.
Require Import zoo.options.
Implicit Type r : location.
Implicit Type v ctx vtx : val.
Class VertexFibonacciG Σ `{zoo۰G : !ZooG Σ} :=
{ #[local] vertex_fibonacci۰G۰pool۰G :: PoolG Σ
; #[local] vertex_fibonacci۰G۰vertex۰G :: VertexG Σ
; #[local] vertex_fibonacci۰G۰ivar۰G :: Ivar4G Σ
; #[local] vertex_fibonacci۰G۰saved_prop۰G :: SavedPropG Σ
}.
Definition vertex_fibonacci۰Σ :=
#[pool۰Σ
; vertex۰Σ
; ivar_4۰Σ
; saved_prop۰Σ
].
#[global] Instance subGーvertex_fibonacci۰Σ Σ `{zoo۰G : !ZooG Σ} :
subG vertex_fibonacci۰Σ Σ →
VertexFibonacciG Σ.
Section vertex_fibonacci۰G.
Context `{vertex_fibonacci۰G : VertexFibonacciG Σ}.
#[local] Lemma vertex_fibonacci٠main₁ーspec vtx iter r n :
vertex۰inv vtx (r ↦ᵣ #(fibonacci n)) True -∗
r ↦ᵣ 0 -∗
vertex۰wp
vtx
(r ↦ᵣ #(fibonacci n))
True
(𝗳𝘂𝗻 "ctx" → vertex_fibonacci٠main₁ "ctx" vtx #r #n)
iter.
Lemma vertex_fibonacci٠mainーspec (num_dom n : nat) :
{{{
True
}}}
vertex_fibonacci٠main #num_dom #n
{{{
RET #(fibonacci n);
True
}}}.
End vertex_fibonacci۰G.
Require examples.vertex_fibonacci__opaque.