Mercurial > hg > Papers > 2021 > soto-prosym
view Paper/src/agda/rbt_imple.agda.replaced @ 5:339fb67b4375
INIT rbt.agda
author | soto <soto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 07 Nov 2021 00:51:16 +0900 |
parents | 9176dff8f38a |
children |
line wrap: on
line source
module rbt_imple where open import Level renaming ( suc to succ ; zero to Zero ) open import Relation.Binary open import Data.Nat hiding (_!$\leq$!_ ; _!$\leq$!?_) open import Data.List hiding ([_]) open import Data.Product open import Data.Nat.Properties as NP open import rbt_t --このmutalの部分は別場所に書いてimportしたい。その方が綺麗に検証できそう mutual data right-List : Set where [] : right-List [_] : !$\mathbb{N}$! !$\rightarrow$! right-List _!$\text{::}$!>_Cond_ : (x : !$\mathbb{N}$!) !$\rightarrow$! (xs : right-List ) !$\rightarrow$! (p : x Data.Nat.> top-r xs) !$\rightarrow$! right-List top-r : right-List !$\rightarrow$! !$\mathbb{N}$! top-r [] = {!!} top-r [ x ] = x top-r (x !$\text{::}$!> l Cond x!$\_{1}$!) = x insert-r : !$\mathbb{N}$! !$\rightarrow$! right-List !$\rightarrow$! right-List insert-r x l with l ... | [] = {!!} ... | [ y ] = ? ... | y !$\text{::}$!> ys Cond p with <-cmp x y ... | tri< a !$\neg$!b !$\neg$!c = l ... | tri!$\approx$! !$\neg$!a b !$\neg$!c = l ... | tri> !$\neg$!a !$\neg$!b c = x !$\text{::}$!> l Cond c data left-List : Set where [] : left-List [_] : !$\mathbb{N}$! !$\rightarrow$! left-List _<!$\text{::}$!_Cond_ : (x : !$\mathbb{N}$!) !$\rightarrow$! (xs : left-List ) !$\rightarrow$! (p : x Data.Nat.< top-l xs) !$\rightarrow$! left-List top-l : left-List !$\rightarrow$! !$\mathbb{N}$! top-l [] = {!!} top-l [ x ] = x top-l (x <!$\text{::}$! l Cond x!$\_{1}$!) = x insert-l : !$\mathbb{N}$! !$\rightarrow$! left-List !$\rightarrow$! left-List insert-l x [] = [ x ] insert-l x l@([ y ]) with <-cmp x y ... | tri< a !$\neg$!b !$\neg$!c = x <!$\text{::}$! l Cond a ... | tri!$\approx$! !$\neg$!a b !$\neg$!c = l ... | tri> !$\neg$!a !$\neg$!b c = l insert-l x l@(y <!$\text{::}$! ys Cond p) with <-cmp x y ... | tri< a !$\neg$!b !$\neg$!c = x <!$\text{::}$! l Cond a ... | tri!$\approx$! !$\neg$!a b !$\neg$!c = l ... | tri> !$\neg$!a !$\neg$!b c = l record meta : Set where field deeps : !$\mathbb{N}$! black-nodes : !$\mathbb{N}$! l-list : left-List r-list : right-List open meta record tree-meta (A B C D : Set) : Set where field key : A meta-data : B ltree : C rtree : D open tree {- data rbt-meta : Set where bt-empty : rbt-meta bt-node : (node : tree-meta (node col !$\mathbb{N}$! ) meta rbt-meta rbt-meta ) !$\rightarrow$! rbt-meta test!$\prime$!1 = whileTestPCall!$\prime$! bt-empty 0 test!$\prime$!2 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!1) 1 test!$\prime$!3 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!2) 2 test!$\prime$!4 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!3) 3 test!$\prime$!5 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!4) 4 test!$\prime$!6 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!5) 5 test!$\prime$!7 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!6) 6 test!$\prime$!8 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!7) 7 test!$\prime$!9 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!8) 8 test!$\prime$!10 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!9) 9 test!$\prime$!11 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!10) 10 test!$\prime$!12 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!11) 11 test!$\prime$!13 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!12) 12 test!$\prime$!14 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!13) 13 test!$\prime$!15 = whileTestPCall!$\prime$! (rbt_t.Env.vart test!$\prime$!14) 14 testdata = rbt_t.Env.vart test!$\prime$!7 -- ここからmetaの作成 makemeta-comm : rbt_t.rbt !$\rightarrow$! !$\mathbb{N}$! !$\rightarrow$! meta !$\rightarrow$! rbt-meta --make meta black nodes makemeta-black-nodes : rbt_t.rbt !$\rightarrow$! !$\mathbb{N}$! !$\rightarrow$! meta !$\rightarrow$! rbt-meta makemeta-black-nodes = {!!} -- make meta deeps set-black-nodes : rbt_t.rbt !$\rightarrow$! meta !$\rightarrow$! !$\mathbb{N}$! set-black-nodes rbt fls with rbt ... | bt-empty = (suc (black-nodes fls) ) ... | bt-node node with (node.coler (key node)) ... | black = (suc (black-nodes fls) ) ... | red = (black-nodes fls) --make meta list makemeta-comm rbt num fls with rbt ... | bt-empty = bt-empty ... | bt-node node = bt-node ( record { key = key node ; meta-data = ( record {deeps = (deeps fls) ; black-nodes = set-black-nodes rbt fls ; l-list = insert-l (node.number (key node)) (l-list fls) ; r-list = insert-r (node.number (key node)) (r-list fls) } ) ; ltree = makemeta-comm (ltree node) (node.number (key node)) ( record { deeps = (suc (deeps fls)) ; black-nodes = set-black-nodes rbt fls ; l-list = insert-l (node.number (key node)) (l-list fls) ; r-list = (r-list fls) } ) ; rtree = makemeta-comm (rtree node) (node.number (key node)) ( record { deeps = (suc (deeps fls)) ; black-nodes = set-black-nodes rbt fls ; l-list = (l-list fls) ; r-list = insert-r (node.number (key node)) (r-list fls) } ) }) -- init makemeta : rbt !$\rightarrow$! rbt-meta makemeta rbt with rbt ... | bt-empty = bt-empty ... | bt-node node = bt-node ( record { key = key node ; meta-data = ( record { deeps = 0 ; black-nodes = 1; l-list = [] ; r-list = [] } ) ; ltree = makemeta-comm (ltree node) (node.number (key node)) ( record { deeps = 1 ; black-nodes = 1 ; l-list = insert-l (node.number (key node)) [] ; r-list = [] } ) ; rtree = makemeta-comm (rtree node) (node.number (key node)) ( record { deeps = 1 ; black-nodes = 1 ; l-list = [] ; r-list = insert-r (node.number (key node)) [] } ) }) ---test11 = makemeta (rbt_t.Env.vart test!$\prime$!11) -}