TPTP Problem File: SWW577_2.p

View Solutions - Solve Problem

%------------------------------------------------------------------------------
% File     : SWW577_2 : TPTP v9.0.0. Released v6.1.0.
% Domain   : Software Verification
% Problem  : Bellman ford-T-WP parameter bellman ford
% Version  : Especial : Let and conditional terms encoded away.
% English  :

% Refs     : [Fil14] Filliatre (2014), Email to Geoff Sutcliffe
%          : [BF+]   Bobot et al. (URL), Toccata: Certified Programs and Cert
% Source   : [Fil14]
% Names    : bellman_ford-T-WP_parameter_bellman_ford [Fil14]

% Status   : Theorem
% Rating   : 0.62 v9.0.0, 0.50 v8.2.0, 0.75 v7.5.0, 0.80 v7.4.0, 0.62 v7.3.0, 0.50 v7.1.0, 0.33 v7.0.0, 0.43 v6.4.0, 1.00 v6.3.0, 0.71 v6.2.0, 1.00 v6.1.0
% Syntax   : Number of formulae    :  301 (  81 unt; 104 typ;   0 def)
%            Number of atoms       :  549 ( 155 equ)
%            Maximal formula atoms :   93 (   1 avg)
%            Number of connectives :  383 (  31   ~;  27   |;  82   &)
%                                         (  42 <=>; 201  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   35 (   5 avg)
%            Maximal term depth    :    7 (   1 avg)
%            Number arithmetic     :  148 (  64 atm;  27 fun;  37 num;  20 var)
%            Number of types       :   13 (  11 usr;   1 ari)
%            Number of type conns  :  157 (  77   >;  80   *;   0   +;   0  <<)
%            Number of predicates  :   20 (  16 usr;   1 prp; 0-3 aty)
%            Number of functors    :   82 (  77 usr;  18 con; 0-5 aty)
%            Number of variables   :  598 ( 541   !;  57   ?; 598   :)
% SPC      : TF0_THM_EQU_ARI

% Comments :
%------------------------------------------------------------------------------
tff(uni,type,
    uni: $tType ).

tff(ty,type,
    ty: $tType ).

tff(sort,type,
    sort: ( ty * uni ) > $o ).

tff(witness,type,
    witness: ty > uni ).

tff(witness_sort,axiom,
    ! [A: ty] : sort(A,witness(A)) ).

tff(int,type,
    int: ty ).

tff(real,type,
    real: ty ).

tff(bool,type,
    bool: $tType ).

tff(bool1,type,
    bool1: ty ).

tff(true,type,
    true: bool ).

tff(false,type,
    false: bool ).

tff(match_bool,type,
    match_bool: ( ty * bool * uni * uni ) > uni ).

tff(match_bool_sort,axiom,
    ! [A: ty,X: bool,X1: uni,X2: uni] : sort(A,match_bool(A,X,X1,X2)) ).

tff(match_bool_True,axiom,
    ! [A: ty,Z: uni,Z1: uni] :
      ( sort(A,Z)
     => ( match_bool(A,true,Z,Z1) = Z ) ) ).

tff(match_bool_False,axiom,
    ! [A: ty,Z: uni,Z1: uni] :
      ( sort(A,Z1)
     => ( match_bool(A,false,Z,Z1) = Z1 ) ) ).

tff(true_False,axiom,
    true != false ).

tff(bool_inversion,axiom,
    ! [U: bool] :
      ( ( U = true )
      | ( U = false ) ) ).

tff(tuple0,type,
    tuple0: $tType ).

tff(tuple01,type,
    tuple01: ty ).

tff(tuple02,type,
    tuple02: tuple0 ).

tff(tuple0_inversion,axiom,
    ! [U: tuple0] : ( U = tuple02 ) ).

tff(qtmark,type,
    qtmark: ty ).

tff(map,type,
    map: ( ty * ty ) > ty ).

tff(vertex,type,
    vertex: $tType ).

tff(vertex1,type,
    vertex1: ty ).

tff(t,type,
    t: $tType ).

tff(t1,type,
    t1: ty ).

tff(get,type,
    get: ( ty * ty * uni * uni ) > uni ).

tff(get_sort,axiom,
    ! [A: ty,B: ty,X: uni,X1: uni] : sort(B,get(B,A,X,X1)) ).

tff(map_vertex_t19,type,
    map_vertex_t19: $tType ).

tff(get1,type,
    get1: ( map_vertex_t19 * vertex ) > t ).

tff(set,type,
    set: ( ty * ty * uni * uni * uni ) > uni ).

tff(set_sort,axiom,
    ! [A: ty,B: ty,X: uni,X1: uni,X2: uni] : sort(map(A,B),set(B,A,X,X1,X2)) ).

tff(t2tb,type,
    t2tb: vertex > uni ).

tff(t2tb_sort,axiom,
    ! [X: vertex] : sort(vertex1,t2tb(X)) ).

tff(tb2t,type,
    tb2t: uni > vertex ).

tff(bridgeL,axiom,
    ! [I: vertex] : ( tb2t(t2tb(I)) = I ) ).

tff(bridgeR,axiom,
    ! [J: uni] :
      ( sort(vertex1,J)
     => ( t2tb(tb2t(J)) = J ) ) ).

tff(t2tb1,type,
    t2tb1: map_vertex_t19 > uni ).

tff(t2tb_sort1,axiom,
    ! [X: map_vertex_t19] : sort(map(vertex1,t1),t2tb1(X)) ).

tff(tb2t1,type,
    tb2t1: uni > map_vertex_t19 ).

tff(bridgeL1,axiom,
    ! [I: map_vertex_t19] : ( tb2t1(t2tb1(I)) = I ) ).

tff(bridgeR1,axiom,
    ! [J: uni] : ( t2tb1(tb2t1(J)) = J ) ).

tff(t2tb2,type,
    t2tb2: t > uni ).

tff(t2tb_sort2,axiom,
    ! [X: t] : sort(t1,t2tb2(X)) ).

tff(tb2t2,type,
    tb2t2: uni > t ).

tff(bridgeL2,axiom,
    ! [I: t] : ( tb2t2(t2tb2(I)) = I ) ).

tff(bridgeR2,axiom,
    ! [J: uni] : ( t2tb2(tb2t2(J)) = J ) ).

tff(select_eq,axiom,
    ! [M: map_vertex_t19,A1: vertex,A2: vertex,B: t] :
      ( ( A1 = A2 )
     => ( get1(tb2t1(set(t1,vertex1,t2tb1(M),t2tb(A1),t2tb2(B))),A2) = B ) ) ).

tff(select_eq1,axiom,
    ! [A: ty,B: ty,M: uni,A1: uni,A2: uni,B1: uni] :
      ( sort(B,B1)
     => ( ( A1 = A2 )
       => ( get(B,A,set(B,A,M,A1,B1),A2) = B1 ) ) ) ).

tff(select_neq,axiom,
    ! [M: map_vertex_t19,A1: vertex,A2: vertex,B: t] :
      ( ( A1 != A2 )
     => ( get1(tb2t1(set(t1,vertex1,t2tb1(M),t2tb(A1),t2tb2(B))),A2) = get1(M,A2) ) ) ).

tff(select_neq1,axiom,
    ! [A: ty,B: ty,M: uni,A1: uni,A2: uni] :
      ( sort(A,A1)
     => ( sort(A,A2)
       => ! [B1: uni] :
            ( ( A1 != A2 )
           => ( get(B,A,set(B,A,M,A1,B1),A2) = get(B,A,M,A2) ) ) ) ) ).

tff(const,type,
    const: ( ty * ty * uni ) > uni ).

tff(const_sort,axiom,
    ! [A: ty,B: ty,X: uni] : sort(map(A,B),const(B,A,X)) ).

tff(const1,axiom,
    ! [B: t,A: vertex] : ( get1(tb2t1(const(t1,vertex1,t2tb2(B))),A) = B ) ).

tff(const2,axiom,
    ! [A: ty,B: ty,B1: uni,A1: uni] :
      ( sort(B,B1)
     => ( get(B,A,const(B,A,B1),A1) = B1 ) ) ).

tff(compatOrderMult,axiom,
    ! [X: $int,Y: $int,Z: $int] :
      ( $lesseq(X,Y)
     => ( $lesseq(0,Z)
       => $lesseq($product(X,Z),$product(Y,Z)) ) ) ).

tff(list,type,
    list: ty > ty ).

tff(nil,type,
    nil: ty > uni ).

tff(nil_sort,axiom,
    ! [A: ty] : sort(list(A),nil(A)) ).

tff(cons,type,
    cons: ( ty * uni * uni ) > uni ).

tff(cons_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(list(A),cons(A,X,X1)) ).

tff(match_list,type,
    match_list: ( ty * ty * uni * uni * uni ) > uni ).

tff(match_list_sort,axiom,
    ! [A: ty,A1: ty,X: uni,X1: uni,X2: uni] : sort(A1,match_list(A1,A,X,X1,X2)) ).

tff(match_list_Nil,axiom,
    ! [A: ty,A1: ty,Z: uni,Z1: uni] :
      ( sort(A1,Z)
     => ( match_list(A1,A,nil(A),Z,Z1) = Z ) ) ).

tff(match_list_Cons,axiom,
    ! [A: ty,A1: ty,Z: uni,Z1: uni,U: uni,U1: uni] :
      ( sort(A1,Z1)
     => ( match_list(A1,A,cons(A,U,U1),Z,Z1) = Z1 ) ) ).

tff(nil_Cons,axiom,
    ! [A: ty,V: uni,V1: uni] : ( nil(A) != cons(A,V,V1) ) ).

tff(cons_proj_1,type,
    cons_proj_1: ( ty * uni ) > uni ).

tff(cons_proj_1_sort,axiom,
    ! [A: ty,X: uni] : sort(A,cons_proj_1(A,X)) ).

tff(cons_proj_1_def,axiom,
    ! [A: ty,U: uni,U1: uni] :
      ( sort(A,U)
     => ( cons_proj_1(A,cons(A,U,U1)) = U ) ) ).

tff(cons_proj_2,type,
    cons_proj_2: ( ty * uni ) > uni ).

tff(cons_proj_2_sort,axiom,
    ! [A: ty,X: uni] : sort(list(A),cons_proj_2(A,X)) ).

tff(cons_proj_2_def,axiom,
    ! [A: ty,U: uni,U1: uni] : ( cons_proj_2(A,cons(A,U,U1)) = U1 ) ).

tff(list_inversion,axiom,
    ! [A: ty,U: uni] :
      ( ( U = nil(A) )
      | ( U = cons(A,cons_proj_1(A,U),cons_proj_2(A,U)) ) ) ).

tff(length,type,
    length: ( ty * uni ) > $int ).

tff(list_vertex,type,
    list_vertex: $tType ).

tff(length1,type,
    length1: list_vertex > $int ).

tff(t2tb3,type,
    t2tb3: list_vertex > uni ).

tff(t2tb_sort3,axiom,
    ! [X: list_vertex] : sort(list(vertex1),t2tb3(X)) ).

tff(tb2t3,type,
    tb2t3: uni > list_vertex ).

tff(bridgeL3,axiom,
    ! [I: list_vertex] : ( tb2t3(t2tb3(I)) = I ) ).

tff(bridgeR3,axiom,
    ! [J: uni] : ( t2tb3(tb2t3(J)) = J ) ).

tff(length_def,axiom,
    ( ( length1(tb2t3(nil(vertex1))) = 0 )
    & ! [X: vertex,X1: list_vertex] : ( length1(tb2t3(cons(vertex1,t2tb(X),t2tb3(X1)))) = $sum(1,length1(X1)) ) ) ).

tff(length_def1,axiom,
    ! [A: ty] :
      ( ( length(A,nil(A)) = 0 )
      & ! [X: uni,X1: uni] : ( length(A,cons(A,X,X1)) = $sum(1,length(A,X1)) ) ) ).

tff(length_nonnegative,axiom,
    ! [L: list_vertex] : $lesseq(0,length1(L)) ).

tff(length_nonnegative1,axiom,
    ! [A: ty,L: uni] : $lesseq(0,length(A,L)) ).

tff(length_nil,axiom,
    ! [L: list_vertex] :
      ( ( length1(L) = 0 )
    <=> ( L = tb2t3(nil(vertex1)) ) ) ).

tff(length_nil1,axiom,
    ! [A: ty,L: uni] :
      ( ( length(A,L) = 0 )
    <=> ( L = nil(A) ) ) ).

tff(set1,type,
    set1: ty > ty ).

tff(tuple2,type,
    tuple2: ( ty * ty ) > ty ).

tff(mem,type,
    mem: ( ty * uni * uni ) > $o ).

tff(set_vertex,type,
    set_vertex: $tType ).

tff(mem1,type,
    mem1: ( vertex * set_vertex ) > $o ).

tff(set_lpvertexcm_vertexrp,type,
    set_lpvertexcm_vertexrp: $tType ).

tff(lpvertexcm_vertexrp,type,
    lpvertexcm_vertexrp: $tType ).

tff(mem2,type,
    mem2: ( lpvertexcm_vertexrp * set_lpvertexcm_vertexrp ) > $o ).

tff(infix_eqeq,type,
    infix_eqeq: ( ty * uni * uni ) > $o ).

tff(t2tb4,type,
    t2tb4: set_lpvertexcm_vertexrp > uni ).

tff(t2tb_sort4,axiom,
    ! [X: set_lpvertexcm_vertexrp] : sort(set1(tuple2(vertex1,vertex1)),t2tb4(X)) ).

tff(tb2t4,type,
    tb2t4: uni > set_lpvertexcm_vertexrp ).

tff(bridgeL4,axiom,
    ! [I: set_lpvertexcm_vertexrp] : ( tb2t4(t2tb4(I)) = I ) ).

tff(bridgeR4,axiom,
    ! [J: uni] :
      ( sort(set1(tuple2(vertex1,vertex1)),J)
     => ( t2tb4(tb2t4(J)) = J ) ) ).

tff(infix_eqeq_def,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp] :
      ( infix_eqeq(tuple2(vertex1,vertex1),t2tb4(S1),t2tb4(S2))
    <=> ! [X: lpvertexcm_vertexrp] :
          ( mem2(X,S1)
        <=> mem2(X,S2) ) ) ).

tff(t2tb5,type,
    t2tb5: set_vertex > uni ).

tff(t2tb_sort5,axiom,
    ! [X: set_vertex] : sort(set1(vertex1),t2tb5(X)) ).

tff(tb2t5,type,
    tb2t5: uni > set_vertex ).

tff(bridgeL5,axiom,
    ! [I: set_vertex] : ( tb2t5(t2tb5(I)) = I ) ).

tff(bridgeR5,axiom,
    ! [J: uni] :
      ( sort(set1(vertex1),J)
     => ( t2tb5(tb2t5(J)) = J ) ) ).

tff(infix_eqeq_def1,axiom,
    ! [S1: set_vertex,S2: set_vertex] :
      ( infix_eqeq(vertex1,t2tb5(S1),t2tb5(S2))
    <=> ! [X: vertex] :
          ( mem1(X,S1)
        <=> mem1(X,S2) ) ) ).

tff(infix_eqeq_def2,axiom,
    ! [A: ty,S1: uni,S2: uni] :
      ( ( infix_eqeq(A,S1,S2)
       => ! [X: uni] :
            ( mem(A,X,S1)
          <=> mem(A,X,S2) ) )
      & ( ! [X: uni] :
            ( sort(A,X)
           => ( mem(A,X,S1)
            <=> mem(A,X,S2) ) )
       => infix_eqeq(A,S1,S2) ) ) ).

tff(extensionality,axiom,
    ! [A: ty,S1: uni,S2: uni] :
      ( sort(set1(A),S1)
     => ( sort(set1(A),S2)
       => ( infix_eqeq(A,S1,S2)
         => ( S1 = S2 ) ) ) ) ).

tff(subset,type,
    subset: ( ty * uni * uni ) > $o ).

tff(subset_def,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp] :
      ( subset(tuple2(vertex1,vertex1),t2tb4(S1),t2tb4(S2))
    <=> ! [X: lpvertexcm_vertexrp] :
          ( mem2(X,S1)
         => mem2(X,S2) ) ) ).

tff(subset_def1,axiom,
    ! [S1: set_vertex,S2: set_vertex] :
      ( subset(vertex1,t2tb5(S1),t2tb5(S2))
    <=> ! [X: vertex] :
          ( mem1(X,S1)
         => mem1(X,S2) ) ) ).

tff(subset_def2,axiom,
    ! [A: ty,S1: uni,S2: uni] :
      ( ( subset(A,S1,S2)
       => ! [X: uni] :
            ( mem(A,X,S1)
           => mem(A,X,S2) ) )
      & ( ! [X: uni] :
            ( sort(A,X)
           => ( mem(A,X,S1)
             => mem(A,X,S2) ) )
       => subset(A,S1,S2) ) ) ).

tff(subset_refl,axiom,
    ! [A: ty,S: uni] : subset(A,S,S) ).

tff(subset_trans,axiom,
    ! [A: ty,S1: uni,S2: uni,S3: uni] :
      ( subset(A,S1,S2)
     => ( subset(A,S2,S3)
       => subset(A,S1,S3) ) ) ).

tff(empty,type,
    empty: ty > uni ).

tff(empty_sort,axiom,
    ! [A: ty] : sort(set1(A),empty(A)) ).

tff(empty1,type,
    empty1: set_vertex ).

tff(empty2,type,
    empty2: set_lpvertexcm_vertexrp ).

tff(is_empty,type,
    is_empty: ( ty * uni ) > $o ).

tff(is_empty_def,axiom,
    ! [S: set_lpvertexcm_vertexrp] :
      ( is_empty(tuple2(vertex1,vertex1),t2tb4(S))
    <=> ! [X: lpvertexcm_vertexrp] : ~ mem2(X,S) ) ).

tff(is_empty_def1,axiom,
    ! [S: set_vertex] :
      ( is_empty(vertex1,t2tb5(S))
    <=> ! [X: vertex] : ~ mem1(X,S) ) ).

tff(is_empty_def2,axiom,
    ! [A: ty,S: uni] :
      ( ( is_empty(A,S)
       => ! [X: uni] : ~ mem(A,X,S) )
      & ( ! [X: uni] :
            ( sort(A,X)
           => ~ mem(A,X,S) )
       => is_empty(A,S) ) ) ).

tff(empty_def1,axiom,
    is_empty(tuple2(vertex1,vertex1),t2tb4(empty2)) ).

tff(empty_def11,axiom,
    is_empty(vertex1,t2tb5(empty1)) ).

tff(empty_def12,axiom,
    ! [A: ty] : is_empty(A,empty(A)) ).

tff(mem_empty,axiom,
    ! [X: lpvertexcm_vertexrp] :
      ( mem2(X,empty2)
    <=> $false ) ).

tff(mem_empty1,axiom,
    ! [X: vertex] :
      ( mem1(X,empty1)
    <=> $false ) ).

tff(mem_empty2,axiom,
    ! [A: ty,X: uni] :
      ( mem(A,X,empty(A))
    <=> $false ) ).

tff(add,type,
    add: ( ty * uni * uni ) > uni ).

tff(add_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(set1(A),add(A,X,X1)) ).

tff(add1,type,
    add1: ( vertex * set_vertex ) > set_vertex ).

tff(add2,type,
    add2: ( lpvertexcm_vertexrp * set_lpvertexcm_vertexrp ) > set_lpvertexcm_vertexrp ).

tff(add_def1,axiom,
    ! [X: lpvertexcm_vertexrp,Y: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] :
      ( mem2(X,add2(Y,S))
    <=> ( ( X = Y )
        | mem2(X,S) ) ) ).

tff(add_def11,axiom,
    ! [X: vertex,Y: vertex,S: set_vertex] :
      ( mem1(X,add1(Y,S))
    <=> ( ( X = Y )
        | mem1(X,S) ) ) ).

tff(add_def12,axiom,
    ! [A: ty,X: uni,Y: uni] :
      ( sort(A,X)
     => ( sort(A,Y)
       => ! [S: uni] :
            ( mem(A,X,add(A,Y,S))
          <=> ( ( X = Y )
              | mem(A,X,S) ) ) ) ) ).

tff(remove,type,
    remove: ( ty * uni * uni ) > uni ).

tff(remove_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(set1(A),remove(A,X,X1)) ).

tff(remove1,type,
    remove1: ( vertex * set_vertex ) > set_vertex ).

tff(remove2,type,
    remove2: ( lpvertexcm_vertexrp * set_lpvertexcm_vertexrp ) > set_lpvertexcm_vertexrp ).

tff(remove_def1,axiom,
    ! [X: lpvertexcm_vertexrp,Y: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] :
      ( mem2(X,remove2(Y,S))
    <=> ( ( X != Y )
        & mem2(X,S) ) ) ).

tff(remove_def11,axiom,
    ! [X: vertex,Y: vertex,S: set_vertex] :
      ( mem1(X,remove1(Y,S))
    <=> ( ( X != Y )
        & mem1(X,S) ) ) ).

tff(remove_def12,axiom,
    ! [A: ty,X: uni,Y: uni,S: uni] :
      ( sort(A,X)
     => ( sort(A,Y)
       => ( mem(A,X,remove(A,Y,S))
        <=> ( ( X != Y )
            & mem(A,X,S) ) ) ) ) ).

tff(add_remove,axiom,
    ! [X: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] :
      ( mem2(X,S)
     => ( add2(X,remove2(X,S)) = S ) ) ).

tff(add_remove1,axiom,
    ! [X: vertex,S: set_vertex] :
      ( mem1(X,S)
     => ( add1(X,remove1(X,S)) = S ) ) ).

tff(add_remove2,axiom,
    ! [A: ty,X: uni,S: uni] :
      ( sort(set1(A),S)
     => ( mem(A,X,S)
       => ( add(A,X,remove(A,X,S)) = S ) ) ) ).

tff(remove_add,axiom,
    ! [X: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] : ( remove2(X,add2(X,S)) = remove2(X,S) ) ).

tff(remove_add1,axiom,
    ! [X: vertex,S: set_vertex] : ( remove1(X,add1(X,S)) = remove1(X,S) ) ).

tff(remove_add2,axiom,
    ! [A: ty,X: uni,S: uni] : ( remove(A,X,add(A,X,S)) = remove(A,X,S) ) ).

tff(subset_remove,axiom,
    ! [X: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] : subset(tuple2(vertex1,vertex1),t2tb4(remove2(X,S)),t2tb4(S)) ).

tff(subset_remove1,axiom,
    ! [X: vertex,S: set_vertex] : subset(vertex1,t2tb5(remove1(X,S)),t2tb5(S)) ).

tff(subset_remove2,axiom,
    ! [A: ty,X: uni,S: uni] : subset(A,remove(A,X,S),S) ).

tff(union,type,
    union: ( ty * uni * uni ) > uni ).

tff(union_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(set1(A),union(A,X,X1)) ).

tff(union_def1,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp,X: lpvertexcm_vertexrp] :
      ( mem2(X,tb2t4(union(tuple2(vertex1,vertex1),t2tb4(S1),t2tb4(S2))))
    <=> ( mem2(X,S1)
        | mem2(X,S2) ) ) ).

tff(union_def11,axiom,
    ! [S1: set_vertex,S2: set_vertex,X: vertex] :
      ( mem1(X,tb2t5(union(vertex1,t2tb5(S1),t2tb5(S2))))
    <=> ( mem1(X,S1)
        | mem1(X,S2) ) ) ).

tff(union_def12,axiom,
    ! [A: ty,S1: uni,S2: uni,X: uni] :
      ( mem(A,X,union(A,S1,S2))
    <=> ( mem(A,X,S1)
        | mem(A,X,S2) ) ) ).

tff(inter,type,
    inter: ( ty * uni * uni ) > uni ).

tff(inter_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(set1(A),inter(A,X,X1)) ).

tff(inter_def1,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp,X: lpvertexcm_vertexrp] :
      ( mem2(X,tb2t4(inter(tuple2(vertex1,vertex1),t2tb4(S1),t2tb4(S2))))
    <=> ( mem2(X,S1)
        & mem2(X,S2) ) ) ).

tff(inter_def11,axiom,
    ! [S1: set_vertex,S2: set_vertex,X: vertex] :
      ( mem1(X,tb2t5(inter(vertex1,t2tb5(S1),t2tb5(S2))))
    <=> ( mem1(X,S1)
        & mem1(X,S2) ) ) ).

tff(inter_def12,axiom,
    ! [A: ty,S1: uni,S2: uni,X: uni] :
      ( mem(A,X,inter(A,S1,S2))
    <=> ( mem(A,X,S1)
        & mem(A,X,S2) ) ) ).

tff(diff,type,
    diff: ( ty * uni * uni ) > uni ).

tff(diff_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(set1(A),diff(A,X,X1)) ).

tff(diff1,type,
    diff1: ( set_vertex * set_vertex ) > set_vertex ).

tff(diff2,type,
    diff2: ( set_lpvertexcm_vertexrp * set_lpvertexcm_vertexrp ) > set_lpvertexcm_vertexrp ).

tff(diff_def1,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp,X: lpvertexcm_vertexrp] :
      ( mem2(X,diff2(S1,S2))
    <=> ( mem2(X,S1)
        & ~ mem2(X,S2) ) ) ).

tff(diff_def11,axiom,
    ! [S1: set_vertex,S2: set_vertex,X: vertex] :
      ( mem1(X,diff1(S1,S2))
    <=> ( mem1(X,S1)
        & ~ mem1(X,S2) ) ) ).

tff(diff_def12,axiom,
    ! [A: ty,S1: uni,S2: uni,X: uni] :
      ( mem(A,X,diff(A,S1,S2))
    <=> ( mem(A,X,S1)
        & ~ mem(A,X,S2) ) ) ).

tff(subset_diff,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp] : subset(tuple2(vertex1,vertex1),t2tb4(diff2(S1,S2)),t2tb4(S1)) ).

tff(subset_diff1,axiom,
    ! [S1: set_vertex,S2: set_vertex] : subset(vertex1,t2tb5(diff1(S1,S2)),t2tb5(S1)) ).

tff(subset_diff2,axiom,
    ! [A: ty,S1: uni,S2: uni] : subset(A,diff(A,S1,S2),S1) ).

tff(choose,type,
    choose: ( ty * uni ) > uni ).

tff(choose_sort,axiom,
    ! [A: ty,X: uni] : sort(A,choose(A,X)) ).

tff(t2tb6,type,
    t2tb6: lpvertexcm_vertexrp > uni ).

tff(t2tb_sort6,axiom,
    ! [X: lpvertexcm_vertexrp] : sort(tuple2(vertex1,vertex1),t2tb6(X)) ).

tff(tb2t6,type,
    tb2t6: uni > lpvertexcm_vertexrp ).

tff(bridgeL6,axiom,
    ! [I: lpvertexcm_vertexrp] : ( tb2t6(t2tb6(I)) = I ) ).

tff(bridgeR6,axiom,
    ! [J: uni] :
      ( sort(tuple2(vertex1,vertex1),J)
     => ( t2tb6(tb2t6(J)) = J ) ) ).

tff(choose_def,axiom,
    ! [S: set_lpvertexcm_vertexrp] :
      ( ~ is_empty(tuple2(vertex1,vertex1),t2tb4(S))
     => mem2(tb2t6(choose(tuple2(vertex1,vertex1),t2tb4(S))),S) ) ).

tff(choose_def1,axiom,
    ! [S: set_vertex] :
      ( ~ is_empty(vertex1,t2tb5(S))
     => mem1(tb2t(choose(vertex1,t2tb5(S))),S) ) ).

tff(choose_def2,axiom,
    ! [A: ty,S: uni] :
      ( ~ is_empty(A,S)
     => mem(A,choose(A,S),S) ) ).

tff(cardinal,type,
    cardinal: ( ty * uni ) > $int ).

tff(cardinal1,type,
    cardinal1: set_vertex > $int ).

tff(cardinal2,type,
    cardinal2: set_lpvertexcm_vertexrp > $int ).

tff(cardinal_nonneg,axiom,
    ! [S: set_lpvertexcm_vertexrp] : $lesseq(0,cardinal2(S)) ).

tff(cardinal_nonneg1,axiom,
    ! [S: set_vertex] : $lesseq(0,cardinal1(S)) ).

tff(cardinal_nonneg2,axiom,
    ! [A: ty,S: uni] : $lesseq(0,cardinal(A,S)) ).

tff(cardinal_empty,axiom,
    ! [S: set_lpvertexcm_vertexrp] :
      ( ( cardinal2(S) = 0 )
    <=> is_empty(tuple2(vertex1,vertex1),t2tb4(S)) ) ).

tff(cardinal_empty1,axiom,
    ! [S: set_vertex] :
      ( ( cardinal1(S) = 0 )
    <=> is_empty(vertex1,t2tb5(S)) ) ).

tff(cardinal_empty2,axiom,
    ! [A: ty,S: uni] :
      ( ( cardinal(A,S) = 0 )
    <=> is_empty(A,S) ) ).

tff(cardinal_add,axiom,
    ! [X: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] :
      ( ~ mem2(X,S)
     => ( cardinal2(add2(X,S)) = $sum(1,cardinal2(S)) ) ) ).

tff(cardinal_add1,axiom,
    ! [X: vertex,S: set_vertex] :
      ( ~ mem1(X,S)
     => ( cardinal1(add1(X,S)) = $sum(1,cardinal1(S)) ) ) ).

tff(cardinal_add2,axiom,
    ! [A: ty,X: uni,S: uni] :
      ( ~ mem(A,X,S)
     => ( cardinal(A,add(A,X,S)) = $sum(1,cardinal(A,S)) ) ) ).

tff(cardinal_remove,axiom,
    ! [X: lpvertexcm_vertexrp,S: set_lpvertexcm_vertexrp] :
      ( mem2(X,S)
     => ( cardinal2(S) = $sum(1,cardinal2(remove2(X,S))) ) ) ).

tff(cardinal_remove1,axiom,
    ! [X: vertex,S: set_vertex] :
      ( mem1(X,S)
     => ( cardinal1(S) = $sum(1,cardinal1(remove1(X,S))) ) ) ).

tff(cardinal_remove2,axiom,
    ! [A: ty,X: uni,S: uni] :
      ( mem(A,X,S)
     => ( cardinal(A,S) = $sum(1,cardinal(A,remove(A,X,S))) ) ) ).

tff(cardinal_subset,axiom,
    ! [S1: set_lpvertexcm_vertexrp,S2: set_lpvertexcm_vertexrp] :
      ( subset(tuple2(vertex1,vertex1),t2tb4(S1),t2tb4(S2))
     => $lesseq(cardinal2(S1),cardinal2(S2)) ) ).

tff(cardinal_subset1,axiom,
    ! [S1: set_vertex,S2: set_vertex] :
      ( subset(vertex1,t2tb5(S1),t2tb5(S2))
     => $lesseq(cardinal1(S1),cardinal1(S2)) ) ).

tff(cardinal_subset2,axiom,
    ! [A: ty,S1: uni,S2: uni] :
      ( subset(A,S1,S2)
     => $lesseq(cardinal(A,S1),cardinal(A,S2)) ) ).

tff(cardinal11,axiom,
    ! [S: set_lpvertexcm_vertexrp] :
      ( ( cardinal2(S) = 1 )
     => ! [X: lpvertexcm_vertexrp] :
          ( mem2(X,S)
         => ( X = tb2t6(choose(tuple2(vertex1,vertex1),t2tb4(S))) ) ) ) ).

tff(cardinal12,axiom,
    ! [S: set_vertex] :
      ( ( cardinal1(S) = 1 )
     => ! [X: vertex] :
          ( mem1(X,S)
         => ( X = tb2t(choose(vertex1,t2tb5(S))) ) ) ) ).

tff(cardinal13,axiom,
    ! [A: ty,S: uni] :
      ( ( cardinal(A,S) = 1 )
     => ! [X: uni] :
          ( sort(A,X)
         => ( mem(A,X,S)
           => ( X = choose(A,S) ) ) ) ) ).

tff(vertices,type,
    vertices: set_vertex ).

tff(tuple21,type,
    tuple21: ( ty * ty * uni * uni ) > uni ).

tff(tuple2_sort,axiom,
    ! [A: ty,A1: ty,X: uni,X1: uni] : sort(tuple2(A1,A),tuple21(A1,A,X,X1)) ).

tff(tuple22,type,
    tuple22: ( vertex * vertex ) > lpvertexcm_vertexrp ).

tff(tuple2_proj_1,type,
    tuple2_proj_1: ( ty * ty * uni ) > uni ).

tff(tuple2_proj_1_sort,axiom,
    ! [A: ty,A1: ty,X: uni] : sort(A1,tuple2_proj_1(A1,A,X)) ).

tff(tuple2_proj_1_def,axiom,
    ! [U: vertex,U1: vertex] : ( tb2t(tuple2_proj_1(vertex1,vertex1,t2tb6(tuple22(U,U1)))) = U ) ).

tff(tuple2_proj_1_def1,axiom,
    ! [A: ty,A1: ty,U: uni,U1: uni] :
      ( sort(A1,U)
     => ( tuple2_proj_1(A1,A,tuple21(A1,A,U,U1)) = U ) ) ).

tff(tuple2_proj_2,type,
    tuple2_proj_2: ( ty * ty * uni ) > uni ).

tff(tuple2_proj_2_sort,axiom,
    ! [A: ty,A1: ty,X: uni] : sort(A,tuple2_proj_2(A1,A,X)) ).

tff(tuple2_proj_2_def,axiom,
    ! [U: vertex,U1: vertex] : ( tb2t(tuple2_proj_2(vertex1,vertex1,t2tb6(tuple22(U,U1)))) = U1 ) ).

tff(tuple2_proj_2_def1,axiom,
    ! [A: ty,A1: ty,U: uni,U1: uni] :
      ( sort(A,U1)
     => ( tuple2_proj_2(A1,A,tuple21(A1,A,U,U1)) = U1 ) ) ).

tff(tuple2_inversion,axiom,
    ! [U: lpvertexcm_vertexrp] : ( U = tuple22(tb2t(tuple2_proj_1(vertex1,vertex1,t2tb6(U))),tb2t(tuple2_proj_2(vertex1,vertex1,t2tb6(U)))) ) ).

tff(tuple2_inversion1,axiom,
    ! [A: ty,A1: ty,U: uni] :
      ( sort(tuple2(A1,A),U)
     => ( U = tuple21(A1,A,tuple2_proj_1(A1,A,U),tuple2_proj_2(A1,A,U)) ) ) ).

tff(edges,type,
    edges: set_lpvertexcm_vertexrp ).

tff(edge,type,
    edge: ( vertex * vertex ) > $o ).

tff(edge_def,axiom,
    ! [X: vertex,Y: vertex] :
      ( edge(X,Y)
    <=> mem2(tuple22(X,Y),edges) ) ).

tff(edges_def,axiom,
    ! [X: vertex,Y: vertex] :
      ( mem2(tuple22(X,Y),edges)
     => ( mem1(X,vertices)
        & mem1(Y,vertices) ) ) ).

tff(s,type,
    s: vertex ).

tff(s_in_graph,axiom,
    mem1(s,vertices) ).

tff(vertices_cardinal_pos,axiom,
    $less(0,cardinal1(vertices)) ).

tff(infix_plpl,type,
    infix_plpl: ( ty * uni * uni ) > uni ).

tff(infix_plpl_sort,axiom,
    ! [A: ty,X: uni,X1: uni] : sort(list(A),infix_plpl(A,X,X1)) ).

tff(infix_plpl_def,axiom,
    ! [A: ty,L2: uni] :
      ( ( infix_plpl(A,nil(A),L2) = L2 )
      & ! [X: uni,X1: uni] : ( infix_plpl(A,cons(A,X,X1),L2) = cons(A,X,infix_plpl(A,X1,L2)) ) ) ).

tff(append_assoc,axiom,
    ! [A: ty,L1: uni,L2: uni,L3: uni] : ( infix_plpl(A,L1,infix_plpl(A,L2,L3)) = infix_plpl(A,infix_plpl(A,L1,L2),L3) ) ).

tff(append_l_nil,axiom,
    ! [A: ty,L: uni] : ( infix_plpl(A,L,nil(A)) = L ) ).

tff(append_length,axiom,
    ! [L1: list_vertex,L2: list_vertex] : ( length1(tb2t3(infix_plpl(vertex1,t2tb3(L1),t2tb3(L2)))) = $sum(length1(L1),length1(L2)) ) ).

tff(append_length1,axiom,
    ! [A: ty,L1: uni,L2: uni] : ( length(A,infix_plpl(A,L1,L2)) = $sum(length(A,L1),length(A,L2)) ) ).

tff(mem3,type,
    mem3: ( ty * uni * uni ) > $o ).

tff(mem_def,axiom,
    ! [A: ty,X: uni] :
      ( sort(A,X)
     => ( ~ mem3(A,X,nil(A))
        & ! [X1: uni,X2: uni] :
            ( sort(A,X1)
           => ( mem3(A,X,cons(A,X1,X2))
            <=> ( ( X = X1 )
                | mem3(A,X,X2) ) ) ) ) ) ).

tff(mem_append,axiom,
    ! [A: ty,X: uni,L1: uni,L2: uni] :
      ( mem3(A,X,infix_plpl(A,L1,L2))
    <=> ( mem3(A,X,L1)
        | mem3(A,X,L2) ) ) ).

tff(mem_decomp,axiom,
    ! [A: ty,X: uni,L: uni] :
      ( mem3(A,X,L)
     => ? [L1: uni,L2: uni] :
          ( sort(list(A),L1)
          & sort(list(A),L2)
          & ( L = infix_plpl(A,L1,cons(A,X,L2)) ) ) ) ).

tff(path,type,
    path: ( vertex * list_vertex * vertex ) > $o ).

tff(path_empty,axiom,
    ! [X: vertex] : path(X,tb2t3(nil(vertex1)),X) ).

tff(path_cons,axiom,
    ! [X: vertex,Y: vertex,Z: vertex,L: list_vertex] :
      ( edge(X,Y)
     => ( path(Y,L,Z)
       => path(X,tb2t3(cons(vertex1,t2tb(X),t2tb3(L))),Z) ) ) ).

tff(path_inversion,axiom,
    ! [Z: vertex,Z1: list_vertex,Z2: vertex] :
      ( path(Z,Z1,Z2)
     => ( ? [X: vertex] :
            ( ( Z = X )
            & ( Z1 = tb2t3(nil(vertex1)) )
            & ( Z2 = X ) )
        | ? [X: vertex,Y: vertex,Z3: vertex,L: list_vertex] :
            ( edge(X,Y)
            & path(Y,L,Z3)
            & ( Z = X )
            & ( Z1 = tb2t3(cons(vertex1,t2tb(X),t2tb3(L))) )
            & ( Z2 = Z3 ) ) ) ) ).

tff(path_right_extension,axiom,
    ! [X: vertex,Y: vertex,Z: vertex,L: list_vertex] :
      ( path(X,L,Y)
     => ( edge(Y,Z)
       => path(X,tb2t3(infix_plpl(vertex1,t2tb3(L),cons(vertex1,t2tb(Y),nil(vertex1)))),Z) ) ) ).

tff(path_right_inversion,axiom,
    ! [X: vertex,Z: vertex,L: list_vertex] :
      ( path(X,L,Z)
     => ( ( ( X = Z )
          & ( L = tb2t3(nil(vertex1)) ) )
        | ? [Y: vertex,Lqt: list_vertex] :
            ( path(X,Lqt,Y)
            & edge(Y,Z)
            & ( L = tb2t3(infix_plpl(vertex1,t2tb3(Lqt),cons(vertex1,t2tb(Y),nil(vertex1)))) ) ) ) ) ).

tff(path_trans,axiom,
    ! [X: vertex,Y: vertex,Z: vertex,L1: list_vertex,L2: list_vertex] :
      ( path(X,L1,Y)
     => ( path(Y,L2,Z)
       => path(X,tb2t3(infix_plpl(vertex1,t2tb3(L1),t2tb3(L2))),Z) ) ) ).

tff(empty_path,axiom,
    ! [X: vertex,Y: vertex] :
      ( path(X,tb2t3(nil(vertex1)),Y)
     => ( X = Y ) ) ).

tff(path_decomposition,axiom,
    ! [X: vertex,Y: vertex,Z: vertex,L1: list_vertex,L2: list_vertex] :
      ( path(X,tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(Y),t2tb3(L2)))),Z)
     => ( path(X,L1,Y)
        & path(Y,tb2t3(cons(vertex1,t2tb(Y),t2tb3(L2))),Z) ) ) ).

tff(weight,type,
    weight: ( vertex * vertex ) > $int ).

tff(path_weight,type,
    path_weight: ( list_vertex * vertex ) > $int ).

tff(path_weight_def,axiom,
    ! [Dst: vertex] :
      ( ( path_weight(tb2t3(nil(vertex1)),Dst) = 0 )
      & ! [X: vertex,X1: list_vertex] :
          ( ( ( X1 = tb2t3(nil(vertex1)) )
           => ( path_weight(tb2t3(cons(vertex1,t2tb(X),t2tb3(X1))),Dst) = weight(X,Dst) ) )
          & ! [X2: vertex,X3: list_vertex] :
              ( ( X1 = tb2t3(cons(vertex1,t2tb(X2),t2tb3(X3))) )
             => ( path_weight(tb2t3(cons(vertex1,t2tb(X),t2tb3(X1))),Dst) = $sum(weight(X,X2),path_weight(X1,Dst)) ) ) ) ) ).

tff(path_weight_right_extension,axiom,
    ! [X: vertex,Y: vertex,L: list_vertex] : ( path_weight(tb2t3(infix_plpl(vertex1,t2tb3(L),cons(vertex1,t2tb(X),nil(vertex1)))),Y) = $sum(path_weight(L,X),weight(X,Y)) ) ).

tff(path_weight_decomposition,axiom,
    ! [Y: vertex,Z: vertex,L1: list_vertex,L2: list_vertex] : ( path_weight(tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(Y),t2tb3(L2)))),Z) = $sum(path_weight(L1,Y),path_weight(tb2t3(cons(vertex1,t2tb(Y),t2tb3(L2))),Z)) ) ).

tff(path_in_vertices,axiom,
    ! [V1: vertex,V2: vertex,L: list_vertex] :
      ( mem1(V1,vertices)
     => ( path(V1,L,V2)
       => mem1(V2,vertices) ) ) ).

tff(pigeon_set,type,
    pigeon_set: set_vertex > $o ).

tff(pigeon_set_def,axiom,
    ! [S: set_vertex] :
      ( pigeon_set(S)
    <=> ! [L: list_vertex] :
          ( ! [E: vertex] :
              ( mem3(vertex1,t2tb(E),t2tb3(L))
             => mem1(E,S) )
         => ( $less(cardinal1(S),length1(L))
           => ? [E: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(E),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(E),t2tb3(L3)))))) ) ) ) ) ).

tff(induction,axiom,
    ( ! [S: set_vertex] :
        ( is_empty(vertex1,t2tb5(S))
       => pigeon_set(S) )
   => ( ! [S: set_vertex] :
          ( pigeon_set(S)
         => ! [T: vertex] :
              ( ~ mem1(T,S)
             => pigeon_set(add1(T,S)) ) )
     => ! [S: set_vertex] : pigeon_set(S) ) ) ).

tff(corner,axiom,
    ! [S: set_vertex,L: list_vertex] :
      ( ( length1(L) = cardinal1(S) )
     => ( ! [E: vertex] :
            ( mem3(vertex1,t2tb(E),t2tb3(L))
           => mem1(E,S) )
       => ( ? [E: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(E),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(E),t2tb3(L3)))))) )
          | ! [E: vertex] :
              ( mem1(E,S)
             => mem3(vertex1,t2tb(E),t2tb3(L)) ) ) ) ) ).

tff(pigeon_0,axiom,
    pigeon_set(empty1) ).

tff(pigeon_1,axiom,
    ! [S: set_vertex] :
      ( pigeon_set(S)
     => ! [T: vertex] : pigeon_set(add1(T,S)) ) ).

tff(pigeon_2,axiom,
    ! [S: set_vertex] : pigeon_set(S) ).

tff(pigeonhole,axiom,
    ! [S: set_vertex,L: list_vertex] :
      ( ! [E: vertex] :
          ( mem3(vertex1,t2tb(E),t2tb3(L))
         => mem1(E,S) )
     => ( $less(cardinal1(S),length1(L))
       => ? [E: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(E),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(E),t2tb3(L3)))))) ) ) ) ).

tff(long_path_decomposition_pigeon1,axiom,
    ! [L: list_vertex,V: vertex] :
      ( path(s,L,V)
     => ( ( L != tb2t3(nil(vertex1)) )
       => ! [V1: vertex] :
            ( mem3(vertex1,t2tb(V1),cons(vertex1,t2tb(V),t2tb3(L)))
           => mem1(V1,vertices) ) ) ) ).

tff(long_path_decomposition_pigeon2,axiom,
    ! [L: list_vertex,V: vertex] :
      ( ! [V1: vertex] :
          ( mem3(vertex1,t2tb(V1),cons(vertex1,t2tb(V),t2tb3(L)))
         => mem1(V1,vertices) )
     => ( $less(cardinal1(vertices),length1(tb2t3(cons(vertex1,t2tb(V),t2tb3(L)))))
       => ? [E: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( tb2t3(cons(vertex1,t2tb(V),t2tb3(L))) = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(E),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(E),t2tb3(L3)))))) ) ) ) ).

tff(long_path_decomposition_pigeon3,axiom,
    ! [L: list_vertex,V: vertex] :
      ( ? [E: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( tb2t3(cons(vertex1,t2tb(V),t2tb3(L))) = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(E),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(E),t2tb3(L3)))))) )
     => ( ? [L1: list_vertex,L2: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(V),t2tb3(L2)))) )
        | ? [N: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(N),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(N),t2tb3(L3)))))) ) ) ) ).

tff(long_path_decomposition,axiom,
    ! [L: list_vertex,V: vertex] :
      ( path(s,L,V)
     => ( $lesseq(cardinal1(vertices),length1(L))
       => ( ? [L1: list_vertex,L2: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(V),t2tb3(L2)))) )
          | ? [N: vertex,L1: list_vertex,L2: list_vertex,L3: list_vertex] : ( L = tb2t3(infix_plpl(vertex1,t2tb3(L1),cons(vertex1,t2tb(N),infix_plpl(vertex1,t2tb3(L2),cons(vertex1,t2tb(N),t2tb3(L3)))))) ) ) ) ) ).

tff(simple_path,axiom,
    ! [V: vertex,L: list_vertex] :
      ( path(s,L,V)
     => ? [Lqt: list_vertex] :
          ( path(s,Lqt,V)
          & $less(length1(Lqt),cardinal1(vertices)) ) ) ).

tff(negative_cycle,type,
    negative_cycle: vertex > $o ).

tff(negative_cycle_def,axiom,
    ! [V: vertex] :
      ( negative_cycle(V)
    <=> ( mem1(V,vertices)
        & ? [L1: list_vertex] : path(s,L1,V)
        & ? [L2: list_vertex] :
            ( path(V,L2,V)
            & $less(path_weight(L2,V),0) ) ) ) ).

tff(key_lemma_1,axiom,
    ! [V: vertex,N: $int] :
      ( ! [L: list_vertex] :
          ( path(s,L,V)
         => ( $less(length1(L),cardinal1(vertices))
           => $lesseq(N,path_weight(L,V)) ) )
     => ( ? [L: list_vertex] :
            ( path(s,L,V)
            & $less(path_weight(L,V),N) )
       => ? [U: vertex] : negative_cycle(U) ) ) ).

tff(finite,type,
    finite: $int > t ).

tff(infinite,type,
    infinite: t ).

tff(match_t,type,
    match_t: ( ty * t * uni * uni ) > uni ).

tff(match_t_sort,axiom,
    ! [A: ty,X: t,X1: uni,X2: uni] : sort(A,match_t(A,X,X1,X2)) ).

tff(match_t_Finite,axiom,
    ! [A: ty,Z: uni,Z1: uni,U: $int] :
      ( sort(A,Z)
     => ( match_t(A,finite(U),Z,Z1) = Z ) ) ).

tff(match_t_Infinite,axiom,
    ! [A: ty,Z: uni,Z1: uni] :
      ( sort(A,Z1)
     => ( match_t(A,infinite,Z,Z1) = Z1 ) ) ).

tff(finite_Infinite,axiom,
    ! [U: $int] : ( finite(U) != infinite ) ).

tff(finite_proj_1,type,
    finite_proj_1: t > $int ).

tff(finite_proj_1_def,axiom,
    ! [U: $int] : ( finite_proj_1(finite(U)) = U ) ).

tff(t_inversion,axiom,
    ! [U: t] :
      ( ( U = finite(finite_proj_1(U)) )
      | ( U = infinite ) ) ).

tff(add3,type,
    add3: ( t * t ) > t ).

tff(add_def,axiom,
    ! [Y: t] :
      ( ! [X: $int] :
          ( ! [Y1: $int] : ( add3(finite(X),finite(Y1)) = finite($sum(X,Y1)) )
          & ( add3(finite(X),infinite) = infinite ) )
      & ( add3(infinite,Y) = infinite ) ) ).

tff(lt,type,
    lt: ( t * t ) > $o ).

tff(lt_def,axiom,
    ! [Y: t] :
      ( ! [X: $int] :
          ( ! [Y1: $int] :
              ( lt(finite(X),finite(Y1))
            <=> $less(X,Y1) )
          & lt(finite(X),infinite) )
      & ~ lt(infinite,Y) ) ).

tff(le,type,
    le: ( t * t ) > $o ).

tff(le_def,axiom,
    ! [X: t,Y: t] :
      ( le(X,Y)
    <=> ( lt(X,Y)
        | ( X = Y ) ) ) ).

tff(refl,axiom,
    ! [X: t] : le(X,X) ).

tff(trans,axiom,
    ! [X: t,Y: t,Z: t] :
      ( le(X,Y)
     => ( le(Y,Z)
       => le(X,Z) ) ) ).

tff(antisymm,axiom,
    ! [X: t,Y: t] :
      ( le(X,Y)
     => ( le(Y,X)
       => ( X = Y ) ) ) ).

tff(total,axiom,
    ! [X: t,Y: t] :
      ( le(X,Y)
      | le(Y,X) ) ).

tff(ref,type,
    ref: ty > ty ).

tff(mk_ref,type,
    mk_ref: ( ty * uni ) > uni ).

tff(mk_ref_sort,axiom,
    ! [A: ty,X: uni] : sort(ref(A),mk_ref(A,X)) ).

tff(contents,type,
    contents: ( ty * uni ) > uni ).

tff(contents_sort,axiom,
    ! [A: ty,X: uni] : sort(A,contents(A,X)) ).

tff(contents_def,axiom,
    ! [A: ty,U: uni] :
      ( sort(A,U)
     => ( contents(A,mk_ref(A,U)) = U ) ) ).

tff(ref_inversion,axiom,
    ! [A: ty,U: uni] :
      ( sort(ref(A),U)
     => ( U = mk_ref(A,contents(A,U)) ) ) ).

tff(inv1,type,
    inv1: ( map_vertex_t19 * $int * set_lpvertexcm_vertexrp ) > $o ).

tff(inv1_def,axiom,
    ! [M: map_vertex_t19,Pass: $int,Via: set_lpvertexcm_vertexrp] :
      ( ( inv1(M,Pass,Via)
       => ! [V: vertex] :
            ( mem1(V,vertices)
           => ( ! [X: $int] :
                  ( ( get1(M,V) = finite(X) )
                 => ( ? [L: list_vertex] :
                        ( path(s,L,V)
                        & ( path_weight(L,V) = X ) )
                    & ! [L: list_vertex] :
                        ( path(s,L,V)
                       => ( $less(length1(L),Pass)
                         => $lesseq(X,path_weight(L,V)) ) )
                    & ! [U: vertex,L: list_vertex] :
                        ( path(s,L,U)
                       => ( $less(length1(L),Pass)
                         => ( mem2(tuple22(U,V),Via)
                           => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) ) )
              & ( ( get1(M,V) = infinite )
               => ( ! [L: list_vertex] :
                      ( path(s,L,V)
                     => $lesseq(Pass,length1(L)) )
                  & ! [U: vertex] :
                      ( mem2(tuple22(U,V),Via)
                     => ! [Lu: list_vertex] :
                          ( path(s,Lu,U)
                         => $lesseq(Pass,length1(Lu)) ) ) ) ) ) ) )
      & ( ! [V: vertex] :
            ( mem1(V,vertices)
           => ( ? [X: $int] :
                  ( ( get1(M,V) = finite(X) )
                  & ? [L: list_vertex] :
                      ( path(s,L,V)
                      & ( path_weight(L,V) = X ) )
                  & ! [L: list_vertex] :
                      ( path(s,L,V)
                     => ( $less(length1(L),Pass)
                       => $lesseq(X,path_weight(L,V)) ) )
                  & ! [U: vertex,L: list_vertex] :
                      ( path(s,L,U)
                     => ( $less(length1(L),Pass)
                       => ( mem2(tuple22(U,V),Via)
                         => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) )
              | ( ( get1(M,V) = infinite )
                & ! [L: list_vertex] :
                    ( path(s,L,V)
                   => $lesseq(Pass,length1(L)) )
                & ! [U: vertex] :
                    ( mem2(tuple22(U,V),Via)
                   => ! [Lu: list_vertex] :
                        ( path(s,Lu,U)
                       => $lesseq(Pass,length1(Lu)) ) ) ) ) )
       => inv1(M,Pass,Via) ) ) ).

tff(inv2,type,
    inv2: ( map_vertex_t19 * set_lpvertexcm_vertexrp ) > $o ).

tff(inv2_def,axiom,
    ! [M: map_vertex_t19,Via: set_lpvertexcm_vertexrp] :
      ( inv2(M,Via)
    <=> ! [U: vertex,V: vertex] :
          ( mem2(tuple22(U,V),Via)
         => le(get1(M,V),add3(get1(M,U),finite(weight(U,V)))) ) ) ).

tff(key_lemma_2,axiom,
    ! [M: map_vertex_t19] :
      ( inv1(M,cardinal1(vertices),empty2)
     => ( inv2(M,edges)
       => ! [V: vertex] : ~ negative_cycle(V) ) ) ).

tff(wP_parameter_bellman_ford,conjecture,
    ( ( $less(1,$difference(cardinal1(vertices),1))
      | ( 1 = $difference(cardinal1(vertices),1) ) )
   => ! [M: map_vertex_t19,I: $int] :
        ( ( ( $less(1,I)
            | ( 1 = I ) )
          & ( $less(I,$difference(cardinal1(vertices),1))
            | ( I = $difference(cardinal1(vertices),1) ) ) )
       => ( ! [V: vertex] :
              ( mem1(V,vertices)
             => ( ? [X: $int] :
                    ( ( get1(M,V) = finite(X) )
                    & ? [L: list_vertex] :
                        ( path(s,L,V)
                        & ( path_weight(L,V) = X ) )
                    & ! [L: list_vertex] :
                        ( path(s,L,V)
                       => ( $less(length1(L),I)
                         => $lesseq(X,path_weight(L,V)) ) )
                    & ! [U: vertex,L: list_vertex] :
                        ( path(s,L,U)
                       => ( $less(length1(L),I)
                         => ( mem2(tuple22(U,V),empty2)
                           => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) )
                | ( ( get1(M,V) = infinite )
                  & ! [L: list_vertex] :
                      ( path(s,L,V)
                     => $lesseq(I,length1(L)) )
                  & ! [U: vertex] :
                      ( mem2(tuple22(U,V),empty2)
                     => ! [Lu: list_vertex] :
                          ( path(s,Lu,U)
                         => $lesseq(I,length1(Lu)) ) ) ) ) )
         => ! [Es: set_lpvertexcm_vertexrp] :
              ( ( Es = edges )
             => ! [Es1: set_lpvertexcm_vertexrp,M1: map_vertex_t19] :
                  ( ( ! [X: lpvertexcm_vertexrp] :
                        ( mem2(X,Es1)
                       => mem2(X,edges) )
                    & ! [V: vertex] :
                        ( mem1(V,vertices)
                       => ( ? [X: $int] :
                              ( ( get1(M1,V) = finite(X) )
                              & ? [L: list_vertex] :
                                  ( path(s,L,V)
                                  & ( path_weight(L,V) = X ) )
                              & ! [L: list_vertex] :
                                  ( path(s,L,V)
                                 => ( $less(length1(L),I)
                                   => $lesseq(X,path_weight(L,V)) ) )
                              & ! [U: vertex,L: list_vertex] :
                                  ( path(s,L,U)
                                 => ( $less(length1(L),I)
                                   => ( mem2(tuple22(U,V),diff2(edges,Es1))
                                     => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) )
                          | ( ( get1(M1,V) = infinite )
                            & ! [L: list_vertex] :
                                ( path(s,L,V)
                               => $lesseq(I,length1(L)) )
                            & ! [U: vertex] :
                                ( mem2(tuple22(U,V),diff2(edges,Es1))
                               => ! [Lu: list_vertex] :
                                    ( path(s,Lu,U)
                                   => $lesseq(I,length1(Lu)) ) ) ) ) ) )
                 => ! [O: bool] :
                      ( ( ( O = true )
                      <=> ! [X: lpvertexcm_vertexrp] : ~ mem2(X,Es1) )
                     => ( ( O != true )
                       => ( ~ ! [X: lpvertexcm_vertexrp] : ~ mem2(X,Es1)
                         => ! [Es2: set_lpvertexcm_vertexrp,Result: vertex,Result1: vertex] :
                              ( ( mem2(tuple22(Result,Result1),Es1)
                                & ( Es2 = remove2(tuple22(Result,Result1),Es1) ) )
                             => ( ( ( $less(1,I)
                                    | ( 1 = I ) )
                                  & mem2(tuple22(Result,Result1),edges)
                                  & ~ mem2(tuple22(Result,Result1),diff2(edges,Es1))
                                  & ! [V: vertex] :
                                      ( mem1(V,vertices)
                                     => ( ? [X: $int] :
                                            ( ( get1(M1,V) = finite(X) )
                                            & ? [L: list_vertex] :
                                                ( path(s,L,V)
                                                & ( path_weight(L,V) = X ) )
                                            & ! [L: list_vertex] :
                                                ( path(s,L,V)
                                               => ( $less(length1(L),I)
                                                 => $lesseq(X,path_weight(L,V)) ) )
                                            & ! [U: vertex,L: list_vertex] :
                                                ( path(s,L,U)
                                               => ( $less(length1(L),I)
                                                 => ( mem2(tuple22(U,V),diff2(edges,Es1))
                                                   => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) )
                                        | ( ( get1(M1,V) = infinite )
                                          & ! [L: list_vertex] :
                                              ( path(s,L,V)
                                             => $lesseq(I,length1(L)) )
                                          & ! [U: vertex] :
                                              ( mem2(tuple22(U,V),diff2(edges,Es1))
                                             => ! [Lu: list_vertex] :
                                                  ( path(s,Lu,U)
                                                 => $lesseq(I,length1(Lu)) ) ) ) ) ) )
                               => ! [M2: map_vertex_t19] :
                                    ( ! [V: vertex] :
                                        ( mem1(V,vertices)
                                       => ( ? [X: $int] :
                                              ( ( get1(M2,V) = finite(X) )
                                              & ? [L: list_vertex] :
                                                  ( path(s,L,V)
                                                  & ( path_weight(L,V) = X ) )
                                              & ! [L: list_vertex] :
                                                  ( path(s,L,V)
                                                 => ( $less(length1(L),I)
                                                   => $lesseq(X,path_weight(L,V)) ) )
                                              & ! [U: vertex,L: list_vertex] :
                                                  ( path(s,L,U)
                                                 => ( $less(length1(L),I)
                                                   => ( mem2(tuple22(U,V),add2(tuple22(Result,Result1),diff2(edges,Es1)))
                                                     => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) )
                                          | ( ( get1(M2,V) = infinite )
                                            & ! [L: list_vertex] :
                                                ( path(s,L,V)
                                               => $lesseq(I,length1(L)) )
                                            & ! [U: vertex] :
                                                ( mem2(tuple22(U,V),add2(tuple22(Result,Result1),diff2(edges,Es1)))
                                               => ! [Lu: list_vertex] :
                                                    ( path(s,Lu,U)
                                                   => $lesseq(I,length1(Lu)) ) ) ) ) )
                                   => ! [V: vertex] :
                                        ( mem1(V,vertices)
                                       => ! [X: $int] :
                                            ( ( get1(M2,V) = finite(X) )
                                           => ! [U: vertex,L: list_vertex] :
                                                ( path(s,L,U)
                                               => ( $less(length1(L),I)
                                                 => ( mem2(tuple22(U,V),diff2(edges,Es2))
                                                   => $lesseq(X,$sum(path_weight(L,U),weight(U,V))) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ).

%------------------------------------------------------------------------------