Library examples.pool_quicksort
From zoo Require Import
prelude.
From zoo.common Require Import
list.
From zoo.language Require Import
notations.
From zoo.diaframe Require Import
diaframe.
From zoo_std Require Export
array.
From zoo_std Require Import
for_.
From zoo_parabs Require Import
pool.
From examples Require Export
pool_quicksort__code.
From zoo Require Import
options.
Section pool_G.
Context `{pool_G : PoolG}.
#[local] Lemma pool_quicksortΩ partitionπspec arr i i_ xs sz :
(0 β€ i)%Z β
i_ = βi β
(1 < sz)%Z β
length xs = βsz β
{{{
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ partition arr #i #sz
{{{
xs1 p pivot xs2
, RET #p;
βp = (i_ + length xs1)%natβ β
βxs β‘β xs1 ++ pivot :: xs2β β
βForall ((β₯)%Z pivot) xs1β β
βForall ((β€)%Z pivot) xs2β β
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs1 ++ #@{Z} pivot :: #*@{Z} xs2)
}}}.
#[local] Lemma pool_quicksortΩ mainβπspec pool ctx scope arr i i_ xs sz :
(0 β€ i)%Z β
i_ = βi β
length xs = βsz β
{{{
pool_context pool ctx scope β
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ mainβ ctx arr #i #sz
{{{
RET ();
pool_context pool ctx scope β
pool_consumer pool (
β xs',
βxs β‘β xs'β β
βStronglySorted (β€)%Z xs'β β
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs')
)
}}}.
#[local] Lemma pool_quicksortΩ mainβπspec pool ctx scope arr xs :
{{{
pool_context pool ctx scope β
array_model arr (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ mainβ ctx arr
{{{
RET ();
pool_context pool ctx scope β
pool_consumer pool (
β xs',
βxs β‘β xs'β β
βStronglySorted (β€)%Z xs'β β
array_model arr (DfracOwn 1) (#*@{Z} xs')
)
}}}.
Lemma pool_quicksortΩ mainπspec (num_dom : nat) arr xs :
{{{
array_model arr (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ main #num_dom arr
{{{
xs'
, RET ();
βxs β‘β xs'β β
βStronglySorted (β€)%Z xs'β β
array_model arr (DfracOwn 1) (#*@{Z} xs')
}}}.
End pool_G.
From examples Require
pool_quicksort__opaque.
prelude.
From zoo.common Require Import
list.
From zoo.language Require Import
notations.
From zoo.diaframe Require Import
diaframe.
From zoo_std Require Export
array.
From zoo_std Require Import
for_.
From zoo_parabs Require Import
pool.
From examples Require Export
pool_quicksort__code.
From zoo Require Import
options.
Section pool_G.
Context `{pool_G : PoolG}.
#[local] Lemma pool_quicksortΩ partitionπspec arr i i_ xs sz :
(0 β€ i)%Z β
i_ = βi β
(1 < sz)%Z β
length xs = βsz β
{{{
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ partition arr #i #sz
{{{
xs1 p pivot xs2
, RET #p;
βp = (i_ + length xs1)%natβ β
βxs β‘β xs1 ++ pivot :: xs2β β
βForall ((β₯)%Z pivot) xs1β β
βForall ((β€)%Z pivot) xs2β β
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs1 ++ #@{Z} pivot :: #*@{Z} xs2)
}}}.
#[local] Lemma pool_quicksortΩ mainβπspec pool ctx scope arr i i_ xs sz :
(0 β€ i)%Z β
i_ = βi β
length xs = βsz β
{{{
pool_context pool ctx scope β
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ mainβ ctx arr #i #sz
{{{
RET ();
pool_context pool ctx scope β
pool_consumer pool (
β xs',
βxs β‘β xs'β β
βStronglySorted (β€)%Z xs'β β
array_slice arr i_ (DfracOwn 1) (#*@{Z} xs')
)
}}}.
#[local] Lemma pool_quicksortΩ mainβπspec pool ctx scope arr xs :
{{{
pool_context pool ctx scope β
array_model arr (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ mainβ ctx arr
{{{
RET ();
pool_context pool ctx scope β
pool_consumer pool (
β xs',
βxs β‘β xs'β β
βStronglySorted (β€)%Z xs'β β
array_model arr (DfracOwn 1) (#*@{Z} xs')
)
}}}.
Lemma pool_quicksortΩ mainπspec (num_dom : nat) arr xs :
{{{
array_model arr (DfracOwn 1) (#*@{Z} xs)
}}}
pool_quicksortΩ main #num_dom arr
{{{
xs'
, RET ();
βxs β‘β xs'β β
βStronglySorted (β€)%Z xs'β β
array_model arr (DfracOwn 1) (#*@{Z} xs')
}}}.
End pool_G.
From examples Require
pool_quicksort__opaque.