0 | module Data.Container.Base.RoseTree.Definition
2 | import Data.Container.Base.Object.Definition
3 | import Data.Container.Base.Extension.Definition
4 | import Data.Container.Base.Monoid.Definition
11 | data RoseTreeShape : (0 c : Cont) -> TensorMonoid c => Type where
12 | LeafS : TensorMonoid c => RoseTreeShape c
13 | NodeS : TensorMonoid c => c `fullOf` (RoseTreeShape c) -> RoseTreeShape c
15 | public export covering
16 | numLeaves : TensorMonoid c => Foldable (Ext c) => RoseTreeShape c -> Nat
18 | numLeaves (NodeS exts) = sum (numLeaves <$> exts)
20 | public export covering
21 | numNodes : TensorMonoid c => Foldable (Ext c) => RoseTreeShape c -> Nat
23 | numNodes (NodeS exts) = 1 + sum (numNodes <$> exts)
25 | namespace NodesAndLeaves
29 | (0 c : Cont) -> TensorMonoid c => RoseTreeShape c -> Type where
30 | AtLeaf : TensorMonoid c => RoseTreePos c LeafS
31 | AtNode : TensorMonoid c => {ts : c `fullOf` (RoseTreeShape c)} ->
32 | RoseTreePos c (NodeS ts)
33 | SubTree : TensorMonoid c => {ts : c `fullOf` (RoseTreeShape c)} ->
34 | (ps : c.Pos (shapeExt ts)) ->
35 | RoseTreePos c (index ts ps) ->
36 | RoseTreePos c (NodeS ts)
41 | data RoseTreePosNode :
42 | (0 c : Cont) -> TensorMonoid c => RoseTreeShape c -> Type where
43 | AtNode : TensorMonoid c => {ts : c `fullOf` (RoseTreeShape c)} ->
44 | RoseTreePosNode c (NodeS ts)
45 | SubTree : TensorMonoid c => {ts : c `fullOf` (RoseTreeShape c)} ->
46 | (ps : c.Pos (shapeExt ts)) ->
47 | RoseTreePosNode c (index ts ps) ->
48 | RoseTreePosNode c (NodeS ts)
52 | data RoseTreePosLeaf :
53 | (0 c : Cont) -> TensorMonoid c => RoseTreeShape c -> Type where
54 | AtLeaf : TensorMonoid c => RoseTreePosLeaf c LeafS
55 | SubTree : TensorMonoid c => {ts : c `fullOf` (RoseTreeShape c)} ->
56 | (ps : c.Pos (shapeExt ts)) ->
57 | RoseTreePosLeaf c (index ts ps) ->
58 | RoseTreePosLeaf c (NodeS ts)