Article GRAPH_1, MML version 4.99.1005

:: GRAPH_1:structnot 1 => GRAPH_1:struct 1
definition
  struct() MultiGraphStruct(#
    Vertices -> set,
    Edges -> set,
    Source -> Function-like quasi_total Relation of the Edges of it,the Vertices of it,
    Target -> Function-like quasi_total Relation of the Edges of it,the Vertices of it
  #);
end;

:: GRAPH_1:attrnot 1 => GRAPH_1:attr 1
definition
  let a1 be MultiGraphStruct;
  attr a1 is strict;
end;

:: GRAPH_1:exreg 1
registration
  cluster strict MultiGraphStruct;
end;

:: GRAPH_1:aggrnot 1 => GRAPH_1:aggr 1
definition
  let a1, a2 be set;
  let a3, a4 be Function-like quasi_total Relation of a2,a1;
  aggr MultiGraphStruct(#a1,a2,a3,a4#) -> strict MultiGraphStruct;
end;

:: GRAPH_1:selnot 1 => GRAPH_1:sel 1
definition
  let a1 be MultiGraphStruct;
  sel the Vertices of a1 -> set;
end;

:: GRAPH_1:selnot 2 => GRAPH_1:sel 2
definition
  let a1 be MultiGraphStruct;
  sel the Edges of a1 -> set;
end;

:: GRAPH_1:selnot 3 => GRAPH_1:sel 3
definition
  let a1 be MultiGraphStruct;
  sel the Source of a1 -> Function-like quasi_total Relation of the Edges of a1,the Vertices of a1;
end;

:: GRAPH_1:selnot 4 => GRAPH_1:sel 4
definition
  let a1 be MultiGraphStruct;
  sel the Target of a1 -> Function-like quasi_total Relation of the Edges of a1,the Vertices of a1;
end;

:: GRAPH_1:attrnot 2 => GRAPH_1:attr 2
definition
  let a1 be MultiGraphStruct;
  attr a1 is Graph-like means
    the Vertices of a1 is non empty set;
end;

:: GRAPH_1:dfs 1
definiens
  let a1 be MultiGraphStruct;
To prove
     a1 is Graph-like
it is sufficient to prove
  thus the Vertices of a1 is non empty set;

:: GRAPH_1:def 1
theorem
for b1 being MultiGraphStruct holds
      b1 is Graph-like
   iff
      the Vertices of b1 is non empty set;

:: GRAPH_1:exreg 2
registration
  cluster strict Graph-like MultiGraphStruct;
end;

:: GRAPH_1:modenot 1
definition
  mode Graph is Graph-like MultiGraphStruct;
end;

:: GRAPH_1:funcnot 1 => GRAPH_1:func 1
definition
  let a1, a2 be Graph-like MultiGraphStruct;
  assume the Source of a1 tolerates the Source of a2 & the Target of a1 tolerates the Target of a2;
  func A1 \/ A2 -> strict Graph-like MultiGraphStruct means
    the Vertices of it = (the Vertices of a1) \/ the Vertices of a2 &
     the Edges of it = (the Edges of a1) \/ the Edges of a2 &
     (for b1 being set
           st b1 in the Edges of a1
        holds (the Source of it) . b1 = (the Source of a1) . b1 & (the Target of it) . b1 = (the Target of a1) . b1) &
     (for b1 being set
           st b1 in the Edges of a2
        holds (the Source of it) . b1 = (the Source of a2) . b1 & (the Target of it) . b1 = (the Target of a2) . b1);
end;

:: GRAPH_1:def 2
theorem
for b1, b2 being Graph-like MultiGraphStruct
   st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2
for b3 being strict Graph-like MultiGraphStruct holds
      b3 = b1 \/ b2
   iff
      the Vertices of b3 = (the Vertices of b1) \/ the Vertices of b2 &
       the Edges of b3 = (the Edges of b1) \/ the Edges of b2 &
       (for b4 being set
             st b4 in the Edges of b1
          holds (the Source of b3) . b4 = (the Source of b1) . b4 & (the Target of b3) . b4 = (the Target of b1) . b4) &
       (for b4 being set
             st b4 in the Edges of b2
          holds (the Source of b3) . b4 = (the Source of b2) . b4 & (the Target of b3) . b4 = (the Target of b2) . b4);

:: GRAPH_1:prednot 1 => GRAPH_1:pred 1
definition
  let a1, a2, a3 be Graph-like MultiGraphStruct;
  pred A1 is_sum_of A2,A3 means
    the Target of a2 tolerates the Target of a3 &
     the Source of a2 tolerates the Source of a3 &
     MultiGraphStruct(#the Vertices of a1,the Edges of a1,the Source of a1,the Target of a1#) = a2 \/ a3;
end;

:: GRAPH_1:dfs 3
definiens
  let a1, a2, a3 be Graph-like MultiGraphStruct;
To prove
     a1 is_sum_of a2,a3
it is sufficient to prove
  thus the Target of a2 tolerates the Target of a3 &
     the Source of a2 tolerates the Source of a3 &
     MultiGraphStruct(#the Vertices of a1,the Edges of a1,the Source of a1,the Target of a1#) = a2 \/ a3;

:: GRAPH_1:def 3
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct holds
   b1 is_sum_of b2,b3
iff
   the Target of b2 tolerates the Target of b3 &
    the Source of b2 tolerates the Source of b3 &
    MultiGraphStruct(#the Vertices of b1,the Edges of b1,the Source of b1,the Target of b1#) = b2 \/ b3;

:: GRAPH_1:attrnot 3 => GRAPH_1:attr 3
definition
  let a1 be Graph-like MultiGraphStruct;
  attr a1 is oriented means
    for b1, b2 being set
          st b1 in the Edges of a1 & b2 in the Edges of a1 & (the Source of a1) . b1 = (the Source of a1) . b2 & (the Target of a1) . b1 = (the Target of a1) . b2
       holds b1 = b2;
end;

:: GRAPH_1:dfs 4
definiens
  let a1 be Graph-like MultiGraphStruct;
To prove
     a1 is oriented
it is sufficient to prove
  thus for b1, b2 being set
          st b1 in the Edges of a1 & b2 in the Edges of a1 & (the Source of a1) . b1 = (the Source of a1) . b2 & (the Target of a1) . b1 = (the Target of a1) . b2
       holds b1 = b2;

:: GRAPH_1:def 4
theorem
for b1 being Graph-like MultiGraphStruct holds
      b1 is oriented
   iff
      for b2, b3 being set
            st b2 in the Edges of b1 & b3 in the Edges of b1 & (the Source of b1) . b2 = (the Source of b1) . b3 & (the Target of b1) . b2 = (the Target of b1) . b3
         holds b2 = b3;

:: GRAPH_1:attrnot 4 => GRAPH_1:attr 4
definition
  let a1 be Graph-like MultiGraphStruct;
  attr a1 is non-multi means
    for b1, b2 being set
          st b1 in the Edges of a1 &
             b2 in the Edges of a1 &
             ((the Source of a1) . b1 = (the Source of a1) . b2 & (the Target of a1) . b1 = (the Target of a1) . b2 or (the Source of a1) . b1 = (the Target of a1) . b2 & (the Source of a1) . b2 = (the Target of a1) . b1)
       holds b1 = b2;
end;

:: GRAPH_1:dfs 5
definiens
  let a1 be Graph-like MultiGraphStruct;
To prove
     a1 is non-multi
it is sufficient to prove
  thus for b1, b2 being set
          st b1 in the Edges of a1 &
             b2 in the Edges of a1 &
             ((the Source of a1) . b1 = (the Source of a1) . b2 & (the Target of a1) . b1 = (the Target of a1) . b2 or (the Source of a1) . b1 = (the Target of a1) . b2 & (the Source of a1) . b2 = (the Target of a1) . b1)
       holds b1 = b2;

:: GRAPH_1:def 5
theorem
for b1 being Graph-like MultiGraphStruct holds
      b1 is non-multi
   iff
      for b2, b3 being set
            st b2 in the Edges of b1 &
               b3 in the Edges of b1 &
               ((the Source of b1) . b2 = (the Source of b1) . b3 & (the Target of b1) . b2 = (the Target of b1) . b3 or (the Source of b1) . b2 = (the Target of b1) . b3 & (the Source of b1) . b3 = (the Target of b1) . b2)
         holds b2 = b3;

:: GRAPH_1:attrnot 5 => GRAPH_1:attr 5
definition
  let a1 be Graph-like MultiGraphStruct;
  attr a1 is simple means
    for b1 being set
          st b1 in the Edges of a1
       holds (the Source of a1) . b1 <> (the Target of a1) . b1;
end;

:: GRAPH_1:dfs 6
definiens
  let a1 be Graph-like MultiGraphStruct;
To prove
     a1 is simple
it is sufficient to prove
  thus for b1 being set
          st b1 in the Edges of a1
       holds (the Source of a1) . b1 <> (the Target of a1) . b1;

:: GRAPH_1:def 6
theorem
for b1 being Graph-like MultiGraphStruct holds
      b1 is simple
   iff
      for b2 being set
            st b2 in the Edges of b1
         holds (the Source of b1) . b2 <> (the Target of b1) . b2;

:: GRAPH_1:attrnot 6 => GRAPH_1:attr 6
definition
  let a1 be Graph-like MultiGraphStruct;
  attr a1 is connected means
    for b1, b2 being Graph-like MultiGraphStruct
          st the Vertices of b1 misses the Vertices of b2
       holds not a1 is_sum_of b1,b2;
end;

:: GRAPH_1:dfs 7
definiens
  let a1 be Graph-like MultiGraphStruct;
To prove
     a1 is connected
it is sufficient to prove
  thus for b1, b2 being Graph-like MultiGraphStruct
          st the Vertices of b1 misses the Vertices of b2
       holds not a1 is_sum_of b1,b2;

:: GRAPH_1:def 7
theorem
for b1 being Graph-like MultiGraphStruct holds
      b1 is connected
   iff
      for b2, b3 being Graph-like MultiGraphStruct
            st the Vertices of b2 misses the Vertices of b3
         holds not b1 is_sum_of b2,b3;

:: GRAPH_1:attrnot 7 => GRAPH_1:attr 7
definition
  let a1 be MultiGraphStruct;
  attr a1 is finite means
    the Vertices of a1 is finite & the Edges of a1 is finite;
end;

:: GRAPH_1:dfs 8
definiens
  let a1 be MultiGraphStruct;
To prove
     a1 is finite
it is sufficient to prove
  thus the Vertices of a1 is finite & the Edges of a1 is finite;

:: GRAPH_1:def 8
theorem
for b1 being MultiGraphStruct holds
      b1 is finite
   iff
      the Vertices of b1 is finite & the Edges of b1 is finite;

:: GRAPH_1:exreg 3
registration
  cluster finite MultiGraphStruct;
end;

:: GRAPH_1:exreg 4
registration
  cluster Graph-like oriented non-multi simple connected finite MultiGraphStruct;
end;

:: GRAPH_1:prednot 2 => GRAPH_1:pred 2
definition
  let a1 be Graph-like MultiGraphStruct;
  let a2, a3 be Element of the Vertices of a1;
  let a4 be set;
  pred A4 joins A2,A3 means
    (((the Source of a1) . a4 = a2 implies (the Target of a1) . a4 <> a3)) implies (the Source of a1) . a4 = a3 & (the Target of a1) . a4 = a2;
end;

:: GRAPH_1:dfs 9
definiens
  let a1 be Graph-like MultiGraphStruct;
  let a2, a3 be Element of the Vertices of a1;
  let a4 be set;
To prove
     a4 joins a2,a3
it is sufficient to prove
  thus (((the Source of a1) . a4 = a2 implies (the Target of a1) . a4 <> a3)) implies (the Source of a1) . a4 = a3 & (the Target of a1) . a4 = a2;

:: GRAPH_1:def 9
theorem
for b1 being Graph-like MultiGraphStruct
for b2, b3 being Element of the Vertices of b1
for b4 being set holds
      b4 joins b2,b3
   iff
      ((the Source of b1) . b4 = b2 & (the Target of b1) . b4 = b3 or (the Source of b1) . b4 = b3 & (the Target of b1) . b4 = b2);

:: GRAPH_1:prednot 3 => GRAPH_1:pred 3
definition
  let a1 be Graph-like MultiGraphStruct;
  let a2, a3 be Element of the Vertices of a1;
  pred A2,A3 are_incydent means
    ex b1 being set st
       b1 in the Edges of a1 & b1 joins a2,a3;
end;

:: GRAPH_1:dfs 10
definiens
  let a1 be Graph-like MultiGraphStruct;
  let a2, a3 be Element of the Vertices of a1;
To prove
     a2,a3 are_incydent
it is sufficient to prove
  thus ex b1 being set st
       b1 in the Edges of a1 & b1 joins a2,a3;

:: GRAPH_1:def 10
theorem
for b1 being Graph-like MultiGraphStruct
for b2, b3 being Element of the Vertices of b1 holds
   b2,b3 are_incydent
iff
   ex b4 being set st
      b4 in the Edges of b1 & b4 joins b2,b3;

:: GRAPH_1:modenot 2 => GRAPH_1:mode 1
definition
  let a1 be Graph-like MultiGraphStruct;
  mode Chain of A1 -> Relation-like Function-like FinSequence-like set means
    (for b1 being Element of NAT
           st 1 <= b1 & b1 <= len it
        holds it . b1 in the Edges of a1) &
     (ex b1 being Relation-like Function-like FinSequence-like set st
        len b1 = (len it) + 1 &
         (for b2 being Element of NAT
               st 1 <= b2 & b2 <= len b1
            holds b1 . b2 in the Vertices of a1) &
         (for b2 being Element of NAT
               st 1 <= b2 & b2 <= len it
            holds ex b3, b4 being Element of the Vertices of a1 st
               b3 = b1 . b2 & b4 = b1 . (b2 + 1) & it . b2 joins b3,b4));
end;

:: GRAPH_1:dfs 11
definiens
  let a1 be Graph-like MultiGraphStruct;
  let a2 be Relation-like Function-like FinSequence-like set;
To prove
     a2 is Chain of a1
it is sufficient to prove
  thus (for b1 being Element of NAT
           st 1 <= b1 & b1 <= len a2
        holds a2 . b1 in the Edges of a1) &
     (ex b1 being Relation-like Function-like FinSequence-like set st
        len b1 = (len a2) + 1 &
         (for b2 being Element of NAT
               st 1 <= b2 & b2 <= len b1
            holds b1 . b2 in the Vertices of a1) &
         (for b2 being Element of NAT
               st 1 <= b2 & b2 <= len a2
            holds ex b3, b4 being Element of the Vertices of a1 st
               b3 = b1 . b2 & b4 = b1 . (b2 + 1) & a2 . b2 joins b3,b4));

:: GRAPH_1:def 11
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Relation-like Function-like FinSequence-like set holds
      b2 is Chain of b1
   iff
      (for b3 being Element of NAT
             st 1 <= b3 & b3 <= len b2
          holds b2 . b3 in the Edges of b1) &
       (ex b3 being Relation-like Function-like FinSequence-like set st
          len b3 = (len b2) + 1 &
           (for b4 being Element of NAT
                 st 1 <= b4 & b4 <= len b3
              holds b3 . b4 in the Vertices of b1) &
           (for b4 being Element of NAT
                 st 1 <= b4 & b4 <= len b2
              holds ex b5, b6 being Element of the Vertices of b1 st
                 b5 = b3 . b4 & b6 = b3 . (b4 + 1) & b2 . b4 joins b5,b6));

:: GRAPH_1:modenot 3 => GRAPH_1:mode 2
definition
  let a1 be Graph-like MultiGraphStruct;
  redefine mode Chain of a1 -> FinSequence of the Edges of a1;
end;

:: GRAPH_1:attrnot 8 => GRAPH_1:attr 8
definition
  let a1 be Graph-like MultiGraphStruct;
  let a2 be Chain of a1;
  attr a2 is oriented means
    for b1 being Element of NAT
          st 1 <= b1 & b1 < len a2
       holds (the Source of a1) . (a2 . (b1 + 1)) = (the Target of a1) . (a2 . b1);
end;

:: GRAPH_1:dfs 12
definiens
  let a1 be Graph-like MultiGraphStruct;
  let a2 be Chain of a1;
To prove
     a2 is oriented
it is sufficient to prove
  thus for b1 being Element of NAT
          st 1 <= b1 & b1 < len a2
       holds (the Source of a1) . (a2 . (b1 + 1)) = (the Target of a1) . (a2 . b1);

:: GRAPH_1:def 12
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Chain of b1 holds
      b2 is oriented(b1)
   iff
      for b3 being Element of NAT
            st 1 <= b3 & b3 < len b2
         holds (the Source of b1) . (b2 . (b3 + 1)) = (the Target of b1) . (b2 . b3);

:: GRAPH_1:exreg 5
registration
  let a1 be Graph-like MultiGraphStruct;
  cluster Relation-like Function-like finite FinSequence-like oriented Chain of a1;
end;

:: GRAPH_1:attrnot 9 => GRAPH_1:attr 9
definition
  let a1 be Graph-like MultiGraphStruct;
  let a2 be Chain of a1;
  redefine attr a2 is one-to-one means
    for b1, b2 being Element of NAT
          st 1 <= b1 & b1 < b2 & b2 <= len a2
       holds a2 . b1 <> a2 . b2;
end;

:: GRAPH_1:dfs 13
definiens
  let a1 be Graph-like MultiGraphStruct;
  let a2 be Chain of a1;
To prove
     a1 is one-to-one
it is sufficient to prove
  thus for b1, b2 being Element of NAT
          st 1 <= b1 & b1 < b2 & b2 <= len a2
       holds a2 . b1 <> a2 . b2;

:: GRAPH_1:def 13
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Chain of b1 holds
      b2 is one-to-one
   iff
      for b3, b4 being Element of NAT
            st 1 <= b3 & b3 < b4 & b4 <= len b2
         holds b2 . b3 <> b2 . b4;

:: GRAPH_1:exreg 6
registration
  let a1 be Graph-like MultiGraphStruct;
  cluster Relation-like Function-like one-to-one finite FinSequence-like Chain of a1;
end;

:: GRAPH_1:modenot 4
definition
  let a1 be Graph-like MultiGraphStruct;
  mode Path of a1 is one-to-one Chain of a1;
end;

:: GRAPH_1:exreg 7
registration
  let a1 be Graph-like MultiGraphStruct;
  cluster Relation-like Function-like one-to-one finite FinSequence-like oriented Chain of a1;
end;

:: GRAPH_1:modenot 5
definition
  let a1 be Graph-like MultiGraphStruct;
  mode OrientedPath of a1 is one-to-one oriented Chain of a1;
end;

:: GRAPH_1:attrnot 10 => GRAPH_1:attr 10
definition
  let a1 be Graph-like MultiGraphStruct;
  let a2 be one-to-one Chain of a1;
  attr a2 is cyclic means
    ex b1 being Relation-like Function-like FinSequence-like set st
       len b1 = (len a2) + 1 &
        (for b2 being Element of NAT
              st 1 <= b2 & b2 <= len b1
           holds b1 . b2 in the Vertices of a1) &
        (for b2 being Element of NAT
              st 1 <= b2 & b2 <= len a2
           holds ex b3, b4 being Element of the Vertices of a1 st
              b3 = b1 . b2 & b4 = b1 . (b2 + 1) & a2 . b2 joins b3,b4) &
        b1 . 1 = b1 . len b1;
end;

:: GRAPH_1:dfs 14
definiens
  let a1 be Graph-like MultiGraphStruct;
  let a2 be one-to-one Chain of a1;
To prove
     a2 is cyclic
it is sufficient to prove
  thus ex b1 being Relation-like Function-like FinSequence-like set st
       len b1 = (len a2) + 1 &
        (for b2 being Element of NAT
              st 1 <= b2 & b2 <= len b1
           holds b1 . b2 in the Vertices of a1) &
        (for b2 being Element of NAT
              st 1 <= b2 & b2 <= len a2
           holds ex b3, b4 being Element of the Vertices of a1 st
              b3 = b1 . b2 & b4 = b1 . (b2 + 1) & a2 . b2 joins b3,b4) &
        b1 . 1 = b1 . len b1;

:: GRAPH_1:def 15
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being one-to-one Chain of b1 holds
      b2 is cyclic(b1)
   iff
      ex b3 being Relation-like Function-like FinSequence-like set st
         len b3 = (len b2) + 1 &
          (for b4 being Element of NAT
                st 1 <= b4 & b4 <= len b3
             holds b3 . b4 in the Vertices of b1) &
          (for b4 being Element of NAT
                st 1 <= b4 & b4 <= len b2
             holds ex b5, b6 being Element of the Vertices of b1 st
                b5 = b3 . b4 & b6 = b3 . (b4 + 1) & b2 . b4 joins b5,b6) &
          b3 . 1 = b3 . len b3;

:: GRAPH_1:exreg 8
registration
  let a1 be Graph-like MultiGraphStruct;
  cluster Relation-like Function-like one-to-one finite FinSequence-like cyclic Chain of a1;
end;

:: GRAPH_1:modenot 6
definition
  let a1 be Graph-like MultiGraphStruct;
  mode Cycle of a1 is one-to-one cyclic Chain of a1;
end;

:: GRAPH_1:exreg 9
registration
  let a1 be Graph-like MultiGraphStruct;
  cluster Relation-like Function-like one-to-one finite FinSequence-like oriented cyclic Chain of a1;
end;

:: GRAPH_1:modenot 7
definition
  let a1 be Graph-like MultiGraphStruct;
  mode OrientedCycle of a1 is one-to-one oriented cyclic Chain of a1;
end;

:: GRAPH_1:modenot 8 => GRAPH_1:mode 3
definition
  let a1 be Graph-like MultiGraphStruct;
  mode Subgraph of A1 -> Graph-like MultiGraphStruct means
    the Vertices of it c= the Vertices of a1 &
     the Edges of it c= the Edges of a1 &
     (for b1 being set
           st b1 in the Edges of it
        holds (the Source of it) . b1 = (the Source of a1) . b1 & (the Target of it) . b1 = (the Target of a1) . b1 & (the Source of a1) . b1 in the Vertices of it & (the Target of a1) . b1 in the Vertices of it);
end;

:: GRAPH_1:dfs 15
definiens
  let a1, a2 be Graph-like MultiGraphStruct;
To prove
     a2 is Subgraph of a1
it is sufficient to prove
  thus the Vertices of a2 c= the Vertices of a1 &
     the Edges of a2 c= the Edges of a1 &
     (for b1 being set
           st b1 in the Edges of a2
        holds (the Source of a2) . b1 = (the Source of a1) . b1 & (the Target of a2) . b1 = (the Target of a1) . b1 & (the Source of a1) . b1 in the Vertices of a2 & (the Target of a1) . b1 in the Vertices of a2);

:: GRAPH_1:def 17
theorem
for b1, b2 being Graph-like MultiGraphStruct holds
   b2 is Subgraph of b1
iff
   the Vertices of b2 c= the Vertices of b1 &
    the Edges of b2 c= the Edges of b1 &
    (for b3 being set
          st b3 in the Edges of b2
       holds (the Source of b2) . b3 = (the Source of b1) . b3 & (the Target of b2) . b3 = (the Target of b1) . b3 & (the Source of b1) . b3 in the Vertices of b2 & (the Target of b1) . b3 in the Vertices of b2);

:: GRAPH_1:exreg 10
registration
  let a1 be Graph-like MultiGraphStruct;
  cluster strict Graph-like Subgraph of a1;
end;

:: GRAPH_1:funcnot 2 => GRAPH_1:func 2
definition
  let a1 be Graph-like finite MultiGraphStruct;
  func VerticesCount A1 -> Element of NAT means
    ex b1 being finite set st
       b1 = the Vertices of a1 & it = card b1;
end;

:: GRAPH_1:def 18
theorem
for b1 being Graph-like finite MultiGraphStruct
for b2 being Element of NAT holds
      b2 = VerticesCount b1
   iff
      ex b3 being finite set st
         b3 = the Vertices of b1 & b2 = card b3;

:: GRAPH_1:funcnot 3 => GRAPH_1:func 3
definition
  let a1 be Graph-like finite MultiGraphStruct;
  func EdgesCount A1 -> Element of NAT means
    ex b1 being finite set st
       b1 = the Edges of a1 & it = card b1;
end;

:: GRAPH_1:def 19
theorem
for b1 being Graph-like finite MultiGraphStruct
for b2 being Element of NAT holds
      b2 = EdgesCount b1
   iff
      ex b3 being finite set st
         b3 = the Edges of b1 & b2 = card b3;

:: GRAPH_1:funcnot 4 => GRAPH_1:func 4
definition
  let a1 be Graph-like finite MultiGraphStruct;
  let a2 be Element of the Vertices of a1;
  func EdgesIn A2 -> Element of NAT means
    ex b1 being finite set st
       (for b2 being set holds
              b2 in b1
           iff
              b2 in the Edges of a1 & (the Target of a1) . b2 = a2) &
        it = card b1;
end;

:: GRAPH_1:def 20
theorem
for b1 being Graph-like finite MultiGraphStruct
for b2 being Element of the Vertices of b1
for b3 being Element of NAT holds
      b3 = EdgesIn b2
   iff
      ex b4 being finite set st
         (for b5 being set holds
                b5 in b4
             iff
                b5 in the Edges of b1 & (the Target of b1) . b5 = b2) &
          b3 = card b4;

:: GRAPH_1:funcnot 5 => GRAPH_1:func 5
definition
  let a1 be Graph-like finite MultiGraphStruct;
  let a2 be Element of the Vertices of a1;
  func EdgesOut A2 -> Element of NAT means
    ex b1 being finite set st
       (for b2 being set holds
              b2 in b1
           iff
              b2 in the Edges of a1 & (the Source of a1) . b2 = a2) &
        it = card b1;
end;

:: GRAPH_1:def 21
theorem
for b1 being Graph-like finite MultiGraphStruct
for b2 being Element of the Vertices of b1
for b3 being Element of NAT holds
      b3 = EdgesOut b2
   iff
      ex b4 being finite set st
         (for b5 being set holds
                b5 in b4
             iff
                b5 in the Edges of b1 & (the Source of b1) . b5 = b2) &
          b3 = card b4;

:: GRAPH_1:funcnot 6 => GRAPH_1:func 6
definition
  let a1 be Graph-like finite MultiGraphStruct;
  let a2 be Element of the Vertices of a1;
  func Degree A2 -> Element of NAT equals
    (EdgesIn a2) + EdgesOut a2;
end;

:: GRAPH_1:def 22
theorem
for b1 being Graph-like finite MultiGraphStruct
for b2 being Element of the Vertices of b1 holds
   Degree b2 = (EdgesIn b2) + EdgesOut b2;

:: GRAPH_1:prednot 4 => GRAPH_1:pred 4
definition
  let a1, a2 be Graph-like MultiGraphStruct;
  pred A1 c= A2 means
    a1 is Subgraph of a2;
  reflexivity;
::  for a1 being Graph-like MultiGraphStruct holds
::     a1 c= a1;
end;

:: GRAPH_1:dfs 21
definiens
  let a1, a2 be Graph-like MultiGraphStruct;
To prove
     a1 c= a2
it is sufficient to prove
  thus a1 is Subgraph of a2;

:: GRAPH_1:def 23
theorem
for b1, b2 being Graph-like MultiGraphStruct holds
   b1 c= b2
iff
   b1 is Subgraph of b2;

:: GRAPH_1:funcnot 7 => GRAPH_1:func 7
definition
  let a1 be Graph-like MultiGraphStruct;
  func bool A1 -> set means
    for b1 being set holds
          b1 in it
       iff
          b1 is strict Subgraph of a1;
end;

:: GRAPH_1:def 24
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being set holds
      b2 = bool b1
   iff
      for b3 being set holds
            b3 in b2
         iff
            b3 is strict Subgraph of b1;

:: GRAPH_1:sch 1
scheme GRAPH_1:sch 1
{F1 -> Graph-like MultiGraphStruct}:
ex b1 being set st
   for b2 being set holds
         b2 in b1
      iff
         b2 is strict Subgraph of F1() & P1[b2]


:: GRAPH_1:th 1
theorem
for b1 being Graph-like MultiGraphStruct holds
   proj1 the Source of b1 = the Edges of b1 & proj1 the Target of b1 = the Edges of b1;

:: GRAPH_1:th 2
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Element of the Vertices of b1 holds
   b2 in the Vertices of b1;

:: GRAPH_1:th 3
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being set
      st b2 in the Edges of b1
   holds (the Source of b1) . b2 in the Vertices of b1 & (the Target of b1) . b2 in the Vertices of b1;

:: GRAPH_1:th 4
theorem
for b1 being Element of NAT
for b2 being Graph-like MultiGraphStruct
for b3 being Chain of b2 holds
   b3 | Seg b1 is Chain of b2;

:: GRAPH_1:th 5
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st b1 c= b2
   holds the Source of b1 c= the Source of b2 & the Target of b1 c= the Target of b2;

:: GRAPH_1:th 6
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2
   holds the Source of b1 \/ b2 = (the Source of b1) \/ the Source of b2 &
    the Target of b1 \/ b2 = (the Target of b1) \/ the Target of b2;

:: GRAPH_1:th 7
theorem
for b1 being strict Graph-like MultiGraphStruct holds
   b1 = b1 \/ b1;

:: GRAPH_1:th 8
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2
   holds b1 \/ b2 = b2 \/ b1;

:: GRAPH_1:th 9
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2 & the Source of b1 tolerates the Source of b3 & the Target of b1 tolerates the Target of b3 & the Source of b2 tolerates the Source of b3 & the Target of b2 tolerates the Target of b3
   holds (b1 \/ b2) \/ b3 = b1 \/ (b2 \/ b3);

:: GRAPH_1:th 10
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st b1 is_sum_of b2,b3
   holds b1 is_sum_of b3,b2;

:: GRAPH_1:th 11
theorem
for b1 being strict Graph-like MultiGraphStruct holds
   b1 is_sum_of b1,b1;

:: GRAPH_1:th 12
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st ex b3 being Graph-like MultiGraphStruct st
           b1 c= b3 & b2 c= b3
   holds b1 \/ b2 = b2 \/ b1;

:: GRAPH_1:th 13
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st ex b4 being Graph-like MultiGraphStruct st
           b1 c= b4 & b2 c= b4 & b3 c= b4
   holds (b1 \/ b2) \/ b3 = b1 \/ (b2 \/ b3);

:: GRAPH_1:th 14
theorem
for b1 being Graph-like MultiGraphStruct holds
   {} is one-to-one oriented cyclic Chain of b1;

:: GRAPH_1:th 15
theorem
for b1 being Graph-like MultiGraphStruct
for b2, b3 being strict Subgraph of b1
      st the Vertices of b2 = the Vertices of b3 & the Edges of b2 = the Edges of b3
   holds b2 = b3;

:: GRAPH_1:th 16
theorem
for b1, b2 being strict Graph-like MultiGraphStruct
      st b1 c= b2 & b2 c= b1
   holds b1 = b2;

:: GRAPH_1:th 17
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st b1 c= b2 & b2 c= b3
   holds b1 c= b3;

:: GRAPH_1:th 18
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st b1 is_sum_of b2,b3
   holds b2 c= b1 & b3 c= b1;

:: GRAPH_1:th 19
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2
   holds b1 c= b1 \/ b2 & b2 c= b1 \/ b2;

:: GRAPH_1:th 20
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st ex b3 being Graph-like MultiGraphStruct st
           b1 c= b3 & b2 c= b3
   holds b1 c= b1 \/ b2 & b2 c= b1 \/ b2;

:: GRAPH_1:th 21
theorem
for b1, b2, b3, b4 being Graph-like MultiGraphStruct
      st b1 c= b2 & b3 c= b2 & b4 is_sum_of b1,b3
   holds b4 c= b2;

:: GRAPH_1:th 22
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st b1 c= b2 & b3 c= b2
   holds b1 \/ b3 c= b2;

:: GRAPH_1:th 23
theorem
for b1, b2 being strict Graph-like MultiGraphStruct
      st b1 c= b2
   holds b1 \/ b2 = b2 & b2 \/ b1 = b2;

:: GRAPH_1:th 24
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2 & (b1 \/ b2 = b2 or b2 \/ b1 = b2)
   holds b1 c= b2;

:: GRAPH_1:th 27
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Graph-like oriented MultiGraphStruct
      st b1 c= b2
   holds b1 is oriented;

:: GRAPH_1:th 28
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Graph-like non-multi MultiGraphStruct
      st b1 c= b2
   holds b1 is non-multi;

:: GRAPH_1:th 29
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being Graph-like simple MultiGraphStruct
      st b1 c= b2
   holds b1 is simple;

:: GRAPH_1:th 30
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being strict Graph-like MultiGraphStruct holds
      b2 in bool b1
   iff
      b2 c= b1;

:: GRAPH_1:th 31
theorem
for b1 being strict Graph-like MultiGraphStruct holds
   b1 in bool b1;

:: GRAPH_1:th 32
theorem
for b1 being Graph-like MultiGraphStruct
for b2 being strict Graph-like MultiGraphStruct holds
      b2 c= b1
   iff
      bool b2 c= bool b1;

:: GRAPH_1:th 34
theorem
for b1 being strict Graph-like MultiGraphStruct holds
   {b1} c= bool b1;

:: GRAPH_1:th 35
theorem
for b1, b2 being strict Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 &
         the Target of b1 tolerates the Target of b2 &
         bool (b1 \/ b2) c= (bool b1) \/ bool b2 &
         not b1 c= b2
   holds b2 c= b1;

:: GRAPH_1:th 36
theorem
for b1, b2 being Graph-like MultiGraphStruct
      st the Source of b1 tolerates the Source of b2 & the Target of b1 tolerates the Target of b2
   holds (bool b1) \/ bool b2 c= bool (b1 \/ b2);

:: GRAPH_1:th 37
theorem
for b1, b2, b3 being Graph-like MultiGraphStruct
      st b1 in bool b2 & b3 in bool b2
   holds b1 \/ b3 in bool b2;