Origin Definitions Sections Graphs Doc

graph_1_3
Nuprl Section: graph_1_3

Selected Objects
defgraphobjGraphObject(the_graph) == eq:Vertices(the_graph)Vertices(the_graph)(x,y:Vertices(the_graph). eq(x,y) x = y)(eacc:(T:Type. (TVertices(the_graph)T)TVertices(the_graph)T)(T:Type, s:T, x:Vertices(the_graph), f:(TVertices(the_graph)T). L:Vertices(the_graph) List. (y:Vertices(the_graph). x-the_graph- > y (y L)) & eacc(f,s,x) = list_accum(s',x'.f(s',x');s;L))(vacc:(T:Type. (TVertices(the_graph)T)TT)(T:Type, s:T, f:(TVertices(the_graph)T). L:Vertices(the_graph) List. no_repeats(Vertices(the_graph);L) & (y:Vertices(the_graph). (y L)) & vacc(f,s) = list_accum(s',x'.f(s',x');s;L))Top))
defgro_eqt.eq == 1of(t)
defgro_eqwt.eqw == 1of(2of(t))
defgro_eacct.eacc == 1of(2of(2of(t)))
defgro_eaccwt.eaccw == 1of(2of(2of(2of(t))))
defgro_vacct.vacc == 1of(2of(2of(2of(2of(t)))))
defgro_vaccwt.vaccw == 1of(2of(2of(2of(2of(2of(t))))))
defgro_othert.other == 2of(2of(2of(2of(2of(2of(t))))))
defmkgraphobjmkgraphobj(eq, eqw, eacc, eaccw, vacc, vaccw, other) == < eq,eqw,eacc,eaccw,vacc,vaccw,other >
defgraphrepGraph Representation == type:Typegraph:typeGraphr:typeGraphObject(graph(r))
defgrr_typet.type == 1of(t)
defgrr_grapht.graph == 1of(2of(t))
defgrr_objt.obj == 2of(2of(t))
defmkgraphrepmkgraphrep(type, graph, obj) == < type,graph,obj >
THMgraphobj-propertiesFor any graph the_obj:GraphObject(the_graph). (x,y:V. the_obj.eq(x,y) x = y) & (T:Type, s:T, x:V, f:(TVT). L:V List. (y:V. x-the_graph- > y (y L)) & the_obj.eacc(f,s,x) = list_accum(s',x'.f(s',x');s;L)) & (T:Type, s:T, f:(TVT). L:V List. no_repeats(V;L) & (y:V. (y L)) & the_obj.vacc(f,s) = list_accum(s',x'.f(s',x');s;L))
defvertex-subsetvertex-subset(the_obj;x.P(x)) == the_obj.vacc((l,x. if P(x) [x / l] else l fi),nil)
THMvertex-subset-propertiesFor any graph the_obj:GraphObject(the_graph), P:(V). no_repeats(V;vertex-subset(the_obj;x.P(x))) & (x:V. (x vertex-subset(the_obj;x.P(x))) P(x))
defvertex-countvertex-count(the_obj;x.P(x)) == ||vertex-subset(the_obj;x.P(x))||
THMvertex-count-leFor any graph the_obj:GraphObject(the_graph), P,Q:(V). (x:V. P(x) Q(x)) vertex-count(the_obj;x.P(x))vertex-count(the_obj;x.Q(x))
THMvertex-count-lessFor any graph the_obj:GraphObject(the_graph), P,Q:(V). (x:V. P(x) Q(x)) (x:V. P(x) & Q(x)) vertex-count(the_obj;x.P(x)) < vertex-count(the_obj;x.Q(x))
defallgrepFor any graph representationP(the_graph;the_obj) == R:Graph Representation, r:R.type. P(R.graph(r);R.obj(r))
THMdecidable__equal_gr_vFor any graph the_obj:GraphObject(the_graph), x,y:V. Dec(x = y)
THMdfs-measureFor any graph the_obj:GraphObject(the_graph). M:(Traversal). (i:V, s:Traversal. M([inl(i) / s])M(s)) & (i:V, s:Traversal. member-paren(x,y.the_obj.eq(x,y);i;s) M([inr(i) / s]) < M(s))
defdfs(rec) dfs(the_obj;s;i) == if member-paren(x,y.the_obj.eq(x,y);i;s) s else [inl(i) / (the_obj.eacc((s',j. dfs(the_obj;s';j)),[inr(i) / s],i))] fi
THMdfs_inductionFor any graph the_obj:GraphObject(the_graph), P:(VTraversalTraversalProp), s:Traversal, i:V. (s1,s2:Traversal, i:V. P(i,s1,s2) l_disjoint(V+V;s2;s1) & no_repeats(V+V;s2)) (s:Traversal, i:V. member-paren(x,y.the_obj.eq(x,y);i;s) P(i,s,nil)) (s1,s2,s3:Traversal, i,j:V. i-the_graph- > j P(j,s1,s2) P(i,s2 @ s1,s3) P(i,s1,s3 @ s2)) (s1,s2:Traversal, i:V. member-paren(x,y.the_obj.eq(x,y);i;s1) P(i,[inr(i) / s1],s2) P(i,s1,[inl(i) / (s2 @ [inr(i)])])) (s':Traversal. P(i,s,s') & dfs(the_obj;s;i) = (s' @ s))
THMdfs_induction2For any graph the_obj:GraphObject(the_graph), P:(VTraversalTraversalProp), s:Traversal, i:V. (s:Traversal, i:V. (inl(i) s) (inr(i) s) P(i,s,nil)) (s1,s2,s3:Traversal, i,j:V. i-the_graph- > j paren(V;s2) paren(V;s3) P(j,s1,s2) P(i,s2 @ s1,s3) P(i,s1,s3 @ s2)) (s1,s2:Traversal, i:V. (inl(i) s1) (inr(i) s1) P(i,[inr(i) / s1],s2) P(i,s1,[inl(i) / (s2 @ [inr(i)])])) (s':Traversal. P(i,s,s') & l_disjoint(V+V;s';s) & no_repeats(V+V;s') & paren(V;s') & dfs(the_obj;s;i) = (s' @ s))
THMdfs_memberFor any graph the_obj:GraphObject(the_graph), s:Traversal, i:V. s':Traversal. (inl(i) s') (inl(i) s) (inr(i) s) & l_disjoint(V+V;s';s) & no_repeats(V+V;s') & paren(V;s') & dfs(the_obj;s;i) = (s' @ s)
THMdfs_accum_memberFor any graph the_obj:GraphObject(the_graph), l:V List, s:Traversal. s':Traversal. (i:V. (i l) (inl(i) s') (inl(i) s) (inr(i) s)) & l_disjoint(V+V;s';s) & no_repeats(V+V;s') & paren(V;s') & list_accum(s',j.dfs(the_obj;s';j);s;l) = (s' @ s)
THMdfs_induction3For any graph the_obj:GraphObject(the_graph), P:(VTraversalTraversalProp), s:Traversal, i:V. (s1,s2:Traversal, i:V. P(i,s1,s2) l_disjoint(V+V;s2;s1) & no_repeats(V+V;s2)) (s:Traversal, i:V. member-paren(x,y.the_obj.eq(x,y);i;s) P(i,s,nil)) (s1,s2,s3:Traversal, i,j:V. i-the_graph- > j P(j,s1,s2) P(i,s2 @ s1,s3) P(i,s1,s3 @ s2)) (s1,s2:Traversal, i:V. member-paren(x,y.the_obj.eq(x,y);i;s1) (j:V. i-the_graph- > j j = i (inl(j) s2) member-paren(x,y.the_obj.eq(x,y);j;s1)) P(i,[inr(i) / s1],s2) P(i,s1,[inl(i) / (s2 @ [inr(i)])])) (s':Traversal. P(i,s,s') & dfs(the_obj;s;i) = (s' @ s))
THMdfs-casesFor any graph the_obj:GraphObject(the_graph), s:Traversal, i:V. s':Traversal. ((inr(i) s) (inl(i) s) s' = nil) & ((inr(i) s) & (inl(i) s) (s2:Traversal. s' = ([inl(i)] @ s2 @ [inr(i)]) Traversal)) & dfs(the_obj;s;i) = (s' @ s)
THMdfs-connectFor any graph the_obj:GraphObject(the_graph), s:Traversal, i:V. s':Traversal. (j:V. (inr(j) s') i-the_graph- > *j) & dfs(the_obj;s;i) = (s' @ s)
THMdfs-propertiesFor any graph the_obj:GraphObject(the_graph), s:Traversal, i:V. s':Traversal. ((inr(i) s) (inl(i) s) s' = nil) & ((inr(i) s) & (inl(i) s) (s2:Traversal. s' = ([inl(i)] @ s2 @ [inr(i)]) Traversal)) & l_disjoint(V+V;s';s) & no_repeats(V+V;s') & paren(V;s') & (j:V. (inr(j) s') i-the_graph- > *j) & dfs(the_obj;s;i) = (s' @ s)
THMdfs_induction4For any graph the_obj:GraphObject(the_graph), P:(VTraversalTraversalProp), s:Traversal, i:V. (s:Traversal, i:V. (inl(i) s) (inr(i) s) P(i,s,nil)) (s1,s2,s3:Traversal, i,j:V. i-the_graph- > j paren(V;s2) (k:V. (inr(k) s2) j-the_graph- > *k) paren(V;s3) P(j,s1,s2) P(i,s2 @ s1,s3) P(i,s1,s3 @ s2)) (s1,s2:Traversal, i:V. (inr(i) s1) (inl(i) s1) paren(V;s2) l_disjoint(V+V;s2;s1) no_repeats(V+V;s2) (j:V. (inr(j) s2) i-the_graph- > *j) (j:V. i-the_graph- > j j = i (inl(j) s2) (inl(j) s1) (inr(j) s1)) P(i,[inr(i) / s1],s2) P(i,s1,[inl(i) / (s2 @ [inr(i)])])) (s':Traversal. P(i,s,s') & l_disjoint(V+V;s';s) & no_repeats(V+V;s') & paren(V;s') & (j:V. (inr(j) s') i-the_graph- > *j) & dfs(the_obj;s;i) = (s' @ s))
THMdfs-df-traversalFor any graph the_obj:GraphObject(the_graph), s:Traversal, i:V. df-traversal(the_graph;s) (j:V. (inr(j) s) (inl(j) s) j-the_graph- > *i) df-traversal(the_graph;dfs(the_obj;s;i))
defdepthfirstdepthfirst(the_obj) == the_obj.vacc((s,i. dfs(the_obj;s;i)),nil)
defdfsldfsl(G;L) == list_accum(s,i.dfs(G;s;i);nil;L)
THMdfsl-induction1For any graph the_obj:GraphObject(the_graph), P:((V List)TraversalProp). P(nil,nil) (L:V List, s:Traversal, i:V. P(L,s) P(L @ [i],dfs(the_obj;s;i))) (L:V List. P(L,dfsl(the_obj;L)))
THMdfsl-induction2For any graph the_obj:GraphObject(the_graph), P:((V List)TraversalProp). P(nil,nil) (L:V List, s:Traversal, i:V. paren(V;s) no_repeats(V+V;s) P(L,s) P(L @ [i],dfs(the_obj;s;i))) (L:V List. paren(V;dfsl(the_obj;L)) & no_repeats(V+V;dfsl(the_obj;L)) & P(L,dfsl(the_obj;L)))
THMdfsl_parenFor any graph the_obj:GraphObject(the_graph), L:V List. paren(V;dfsl(the_obj;L)) & no_repeats(V+V;dfsl(the_obj;L))
THMdfsl_memberFor any graph the_obj:GraphObject(the_graph), L:V List. (iL.(inr(i) dfsl(the_obj;L)) & (inl(i) dfsl(the_obj;L)))
THMdepthfirst-dfslFor any graph the_obj:GraphObject(the_graph). L:V List. no_repeats(V;L) & (y:V. (y L)) & depthfirst(the_obj) = dfsl(the_obj;L)
THMdepthfirst_inductionFor any graph the_obj:GraphObject(the_graph), P:(TraversalProp). P(nil) (s:Traversal, i:V. P(s) P(dfs(the_obj;s;i))) P(depthfirst(the_obj))
THMdepthfirst_induction2For any graph the_obj:GraphObject(the_graph), P:(TraversalProp). P(nil) (s:Traversal, i:V. paren(V;s) no_repeats(V+V;s) P(s) P(dfs(the_obj;s;i))) paren(V;depthfirst(the_obj)) & no_repeats(V+V;depthfirst(the_obj)) & P(depthfirst(the_obj))
THMdepthfirst_parenFor any graph the_obj:GraphObject(the_graph). paren(V;depthfirst(the_obj)) & no_repeats(V+V;depthfirst(the_obj))
THMdepthfirst_memberFor any graph the_obj:GraphObject(the_graph), i:V. (inr(i) depthfirst(the_obj)) & (inl(i) depthfirst(the_obj))
THMdepthfirst-df-traversalFor any graph the_obj:GraphObject(the_graph). df-traversal(the_graph;depthfirst(the_obj))
THMdepthfirst-propertiesFor any graph the_obj:GraphObject(the_graph). paren(V;depthfirst(the_obj)) & no_repeats(V+V;depthfirst(the_obj)) & df-traversal(the_graph;depthfirst(the_obj)) & depthfirst-traversal(the_graph;depthfirst(the_obj)) & (i:V. (inr(i) depthfirst(the_obj)) & (inl(i) depthfirst(the_obj)))
deftopsorttopsort(G) == mapoutl(depthfirst(G))
THMtopsort-propertiesFor any graph the_obj:GraphObject(the_graph). (non-trivial-loop-free(the_graph) topsorted(the_graph;topsort(the_obj))) & (i:V. (i topsort(the_obj))) & no_repeats(V;topsort(the_obj))
THMtopsort-existsFor any graph the_obj:GraphObject(the_graph). L:V List. (non-trivial-loop-free(the_graph) topsorted(the_graph;L)) & (i:V. (i L)) & no_repeats(V;L)
THMdfs-dfl-traversalFor any graph the_obj:GraphObject(the_graph), L:V List, s:Traversal, x:V. dfl-traversal(the_graph;L;s) (j:V. (inr(j) s) (inl(j) s) j-the_graph- > *x) dfl-traversal(the_graph;L @ [x];dfs(the_obj;s;x))
THMdfsl-propertiesFor any graph the_obj:GraphObject(the_graph), L:V List. paren(V;dfsl(the_obj;L)) & no_repeats(V+V;dfsl(the_obj;L)) & dfsl-traversal(the_graph;L;dfsl(the_obj;L)) & (i:V. (i L) (inr(i) dfsl(the_obj;L)) & (inl(i) dfsl(the_obj;L)))
deftopsortltopsortl(A;L) == mapoutl(dfsl(A;L))
THMtopsortl-propertiesFor any graph the_obj:GraphObject(the_graph), L:V List. (i:V. (i L)) (non-trivial-loop-free(the_graph) topsortedl(the_graph;L;topsortl(the_obj;L))) & (i:V. (i topsortl(the_obj;L))) & no_repeats(V;topsortl(the_obj;L))
defadjmatrixAdjMatrix == size:sizesize
defadjm_sizet.size == 1of(t)
defadjm_adjt.adj == 2of(t)
defmk_adjmatrixmk_adjmatrix(size, adj) == < size,adj >
defcase_mk_adjmatrixCase mk_adjmatrix(size,adj) = > body(size;adj)(x,z) == x/x2,x1. body(x2;x1)
defadjm-graphadjm-graph(A) == < vertices = A.size, edges = {p:(A.sizeA.size)| A.adj(1of(p),2of(p)) }, incidence = e.e >
defeq_adjmx =M= y == x=y
THMassert_eq_adjmM:AdjMatrix, x,y:Vertices(adjm-graph(M)). x =M= y x = y
defadjm-vertex-accumadjm-vertex-accum(M;s',x.f(s';x);s) == primrec(M.size;s;x,s'. f(s';x))
THMadjm-vertex-accum-propertiesM:AdjMatrix, T:Type, s:T, f:(TVertices(adjm-graph(M))T). L:Vertices(adjm-graph(M)) List. no_repeats(Vertices(adjm-graph(M));L) & (y:Vertices(adjm-graph(M)). (y L)) & adjm-vertex-accum(M;s',x'.f(s',x');s) = list_accum(s',x'.f(s',x');s;L)
defadjm-edge-accumadjm-edge-accum(M;s',x'.f(s';x');s;x) == primrec(M.size;s;y,s'. if M.adj(x,y) f(s';y) else s' fi)
THMadjm-edge-accum-propertiesM:AdjMatrix, T:Type, s:T, x:Vertices(adjm-graph(M)), f:(TVertices(adjm-graph(M))T). L:Vertices(adjm-graph(M)) List. (y:Vertices(adjm-graph(M)). x-adjm-graph(M)- > y (y L)) & adjm-edge-accum(M;s',x'.f(s',x');s;x) = list_accum(s',x'.f(s',x');s;L)
defadjm-objadjm-obj{\\\\v:l,i:l}(M) == mkgraphobj(x,y. x =M= y, ext{assert_eq_adjm}(M), f,s,x. adjm-edge-accum(M;s',x'.f(s',x');s;x), ext{adjm_DASH_edge_DASH_accum_DASH_properties}{i:l}(M), f,s. adjm-vertex-accum(M;s',x'.f(s',x');s), ext{adjm_DASH_vertex_DASH_accum_DASH_properties}{i:l}(M), )
defadjm-repadjm-rep{\\\\v:l,i:l}() == mkgraphrep(AdjMatrix, M.adjm-graph(M), M.adjm-obj{\\\\v:l,i:l}(M))
defadjlistAdjList == size:size(size List)
defadjl_sizet.size == 1of(t)
defadjl_outt.out == 2of(t)
defmk_adjlistmk_adjlist(size, out) == < size,out >
defcase_mk_adjlistCase mk_adjlist(size; out ) = > body(size;out)(x,z) == x/x2,x1. body(x2;x1)
defadjl-graphadjl-graph(G) == < vertices = G.size, edges = x:G.size||G.out(x)||, incidence = e. < 1of(e),(G.out(1of(e)))[2of(e)] > >
defeq_adjlx =A= y == x=y
THMassert_eq_adjlA:AdjList, x,y:Vertices(adjl-graph(A)). x =A= y x = y
defadjl-edge-accumadjl-edge-accum(A;s',x'.f(s';x');s;x) == list_accum(s',x'.f(s';x');s;A.out(x))
THMadjl-edge-accum-propertiesA:AdjList, T:Type, s:T, x:Vertices(adjl-graph(A)), f:(TVertices(adjl-graph(A))T). L:Vertices(adjl-graph(A)) List. (y:Vertices(adjl-graph(A)). x-adjl-graph(A)- > y (y L)) & adjl-edge-accum(A;s',x'.f(s',x');s;x) = list_accum(s',x'.f(s',x');s;L)
defadjl-vertex-accumadjl-vertex-accum(A;s',x.f(s';x);s) == primrec(A.size;s;x,s'. f(s';x))
THMadjl-vertex-accum-propertiesA:AdjList, T:Type, s:T, f:(TVertices(adjl-graph(A))T). L:Vertices(adjl-graph(A)) List. no_repeats(Vertices(adjl-graph(A));L) & (y:Vertices(adjl-graph(A)). (y L)) & adjl-vertex-accum(A;s',x'.f(s',x');s) = list_accum(s',x'.f(s',x');s;L)
defadjl-objadjl-obj{\\\\v:l,i:l}(A) == mkgraphobj(x,y. x =A= y, ext{assert_eq_adjl}(A), f,s,x. adjl-edge-accum(A;s',x'.f(s',x');s;x), ext{adjl_DASH_edge_DASH_accum_DASH_properties}{i:l}(A), f,s. adjl-vertex-accum(A;s',x'.f(s',x');s), ext{adjl_DASH_vertex_DASH_accum_DASH_properties}{i:l}(A), )
defadjl-repAdjListRep == mkgraphrep(AdjList, A.adjl-graph(A), A.adjl-obj{\\\\v:l,i:l}(A))
defadjm_to_adjladjm_to_adjl(m) == Case(m) Case mk_adjmatrix(n,f) = > mk_adjlist(n, i.filter(j.f(i,j);upto(0;n)))
THMadjm_to_adjl_graphm:AdjMatrix. adjl-graph(adjm_to_adjl(m)) adjm-graph(m)
defadjl_to_adjmadjl_to_adjm(l) == Case(l) Case mk_adjlist(n; out ) = > mk_adjmatrix(n, i,j. (kout(i).k=j))

Origin Definitions Sections Graphs Doc