TSTP Solution File: MGT048+1 by Metis---2.4

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Metis---2.4
% Problem  : MGT048+1 : TPTP v8.1.0. Released v2.4.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : metis --show proof --show saturation %s

% Computer : n025.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8042.1875MB
% OS       : Linux 3.10.0-693.el7.x86_64
% CPULimit : 300s
% WCLimit  : 600s
% DateTime : Sun Jul 17 22:19:52 EDT 2022

% Result   : Theorem 0.18s 0.47s
% Output   : CNFRefutation 0.18s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   17
%            Number of leaves      :    9
% Syntax   : Number of formulae    :   57 (  16 unt;   0 def)
%            Number of atoms       :  162 (  39 equ)
%            Maximal formula atoms :   12 (   2 avg)
%            Number of connectives :  184 (  79   ~;  70   |;  23   &)
%                                         (   3 <=>;   9  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   10 (   4 avg)
%            Maximal term depth    :    2 (   1 avg)
%            Number of predicates  :    7 (   4 usr;   1 prp; 0-2 aty)
%            Number of functors    :    7 (   7 usr;   3 con; 0-2 aty)
%            Number of variables   :  114 (  14 sgn  63   !;   3   ?)

% Comments : 
%------------------------------------------------------------------------------
fof(definition_smaller_or_equal,axiom,
    ! [X,Y] :
      ( smaller_or_equal(X,Y)
    <=> ( smaller(X,Y)
        | X = Y ) ) ).

fof(assumption_5,axiom,
    ! [X,T0,T] :
      ( organization(X)
     => ( ( ( greater(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
            & smaller_or_equal(internal_friction(X,T),internal_friction(X,T0)) )
         => greater(capability(X,T),capability(X,T0)) )
        & ( ( smaller_or_equal(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
            & greater(internal_friction(X,T),internal_friction(X,T0)) )
         => smaller(capability(X,T),capability(X,T0)) )
        & ( ( stock_of_knowledge(X,T) = stock_of_knowledge(X,T0)
            & internal_friction(X,T) = internal_friction(X,T0) )
         => capability(X,T) = capability(X,T0) ) ) ) ).

fof(assumption_10,axiom,
    ! [X,T0,T] :
      ( organization(X)
     => stock_of_knowledge(X,T) = stock_of_knowledge(X,T0) ) ).

fof(assumption_12,axiom,
    ! [X,T0,T] :
      ( ( organization(X)
        & greater(age(X,T),age(X,T0)) )
     => greater(internal_friction(X,T),internal_friction(X,T0)) ) ).

fof(lemma_5,conjecture,
    ! [X,T0,T] :
      ( ( organization(X)
        & greater(age(X,T),age(X,T0)) )
     => smaller(capability(X,T),capability(X,T0)) ) ).

fof(subgoal_0,plain,
    ! [X,T0,T] :
      ( ( organization(X)
        & greater(age(X,T),age(X,T0)) )
     => smaller(capability(X,T),capability(X,T0)) ),
    inference(strip,[],[lemma_5]) ).

fof(negate_0_0,plain,
    ~ ! [X,T0,T] :
        ( ( organization(X)
          & greater(age(X,T),age(X,T0)) )
       => smaller(capability(X,T),capability(X,T0)) ),
    inference(negate,[],[subgoal_0]) ).

fof(normalize_0_0,plain,
    ? [T,T0,X] :
      ( ~ smaller(capability(X,T),capability(X,T0))
      & greater(age(X,T),age(X,T0))
      & organization(X) ),
    inference(canonicalize,[],[negate_0_0]) ).

fof(normalize_0_1,plain,
    ( ~ smaller(capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T),capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T0))
    & greater(age(skolemFOFtoCNF_X,skolemFOFtoCNF_T),age(skolemFOFtoCNF_X,skolemFOFtoCNF_T0))
    & organization(skolemFOFtoCNF_X) ),
    inference(skolemize,[],[normalize_0_0]) ).

fof(normalize_0_2,plain,
    greater(age(skolemFOFtoCNF_X,skolemFOFtoCNF_T),age(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)),
    inference(conjunct,[],[normalize_0_1]) ).

fof(normalize_0_3,plain,
    ! [T,T0,X] :
      ( ~ greater(age(X,T),age(X,T0))
      | ~ organization(X)
      | greater(internal_friction(X,T),internal_friction(X,T0)) ),
    inference(canonicalize,[],[assumption_12]) ).

fof(normalize_0_4,plain,
    ! [T,T0,X] :
      ( ~ greater(age(X,T),age(X,T0))
      | ~ organization(X)
      | greater(internal_friction(X,T),internal_friction(X,T0)) ),
    inference(specialize,[],[normalize_0_3]) ).

fof(normalize_0_5,plain,
    organization(skolemFOFtoCNF_X),
    inference(conjunct,[],[normalize_0_1]) ).

fof(normalize_0_6,plain,
    ! [X,Y] :
      ( ~ smaller_or_equal(X,Y)
    <=> ( X != Y
        & ~ smaller(X,Y) ) ),
    inference(canonicalize,[],[definition_smaller_or_equal]) ).

fof(normalize_0_7,plain,
    ! [X,Y] :
      ( ~ smaller_or_equal(X,Y)
    <=> ( X != Y
        & ~ smaller(X,Y) ) ),
    inference(specialize,[],[normalize_0_6]) ).

fof(normalize_0_8,plain,
    ! [X,Y] :
      ( ( X != Y
        | smaller_or_equal(X,Y) )
      & ( ~ smaller(X,Y)
        | smaller_or_equal(X,Y) )
      & ( ~ smaller_or_equal(X,Y)
        | X = Y
        | smaller(X,Y) ) ),
    inference(clausify,[],[normalize_0_7]) ).

fof(normalize_0_9,plain,
    ! [X,Y] :
      ( X != Y
      | smaller_or_equal(X,Y) ),
    inference(conjunct,[],[normalize_0_8]) ).

fof(normalize_0_10,plain,
    ! [X] :
      ( ~ organization(X)
      | ( ! [T,T0] :
            ( internal_friction(X,T) != internal_friction(X,T0)
            | stock_of_knowledge(X,T) != stock_of_knowledge(X,T0)
            | capability(X,T) = capability(X,T0) )
        & ! [T,T0] :
            ( ~ greater(internal_friction(X,T),internal_friction(X,T0))
            | ~ smaller_or_equal(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
            | smaller(capability(X,T),capability(X,T0)) )
        & ! [T,T0] :
            ( ~ greater(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
            | ~ smaller_or_equal(internal_friction(X,T),internal_friction(X,T0))
            | greater(capability(X,T),capability(X,T0)) ) ) ),
    inference(canonicalize,[],[assumption_5]) ).

fof(normalize_0_11,plain,
    ! [X] :
      ( ~ organization(X)
      | ( ! [T,T0] :
            ( internal_friction(X,T) != internal_friction(X,T0)
            | stock_of_knowledge(X,T) != stock_of_knowledge(X,T0)
            | capability(X,T) = capability(X,T0) )
        & ! [T,T0] :
            ( ~ greater(internal_friction(X,T),internal_friction(X,T0))
            | ~ smaller_or_equal(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
            | smaller(capability(X,T),capability(X,T0)) )
        & ! [T,T0] :
            ( ~ greater(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
            | ~ smaller_or_equal(internal_friction(X,T),internal_friction(X,T0))
            | greater(capability(X,T),capability(X,T0)) ) ) ),
    inference(specialize,[],[normalize_0_10]) ).

fof(normalize_0_12,plain,
    ! [T,T0,X] :
      ( ( internal_friction(X,T) != internal_friction(X,T0)
        | stock_of_knowledge(X,T) != stock_of_knowledge(X,T0)
        | ~ organization(X)
        | capability(X,T) = capability(X,T0) )
      & ( ~ greater(internal_friction(X,T),internal_friction(X,T0))
        | ~ organization(X)
        | ~ smaller_or_equal(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
        | smaller(capability(X,T),capability(X,T0)) )
      & ( ~ greater(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
        | ~ organization(X)
        | ~ smaller_or_equal(internal_friction(X,T),internal_friction(X,T0))
        | greater(capability(X,T),capability(X,T0)) ) ),
    inference(clausify,[],[normalize_0_11]) ).

fof(normalize_0_13,plain,
    ! [T,T0,X] :
      ( ~ greater(internal_friction(X,T),internal_friction(X,T0))
      | ~ organization(X)
      | ~ smaller_or_equal(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
      | smaller(capability(X,T),capability(X,T0)) ),
    inference(conjunct,[],[normalize_0_12]) ).

fof(normalize_0_14,plain,
    ! [X] :
      ( ~ organization(X)
      | ! [T,T0] : stock_of_knowledge(X,T) = stock_of_knowledge(X,T0) ),
    inference(canonicalize,[],[assumption_10]) ).

fof(normalize_0_15,plain,
    ! [X] :
      ( ~ organization(X)
      | ! [T,T0] : stock_of_knowledge(X,T) = stock_of_knowledge(X,T0) ),
    inference(specialize,[],[normalize_0_14]) ).

fof(normalize_0_16,plain,
    ! [T,T0,X] :
      ( ~ organization(X)
      | stock_of_knowledge(X,T) = stock_of_knowledge(X,T0) ),
    inference(clausify,[],[normalize_0_15]) ).

fof(normalize_0_17,plain,
    ~ smaller(capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T),capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)),
    inference(conjunct,[],[normalize_0_1]) ).

cnf(refute_0_0,plain,
    greater(age(skolemFOFtoCNF_X,skolemFOFtoCNF_T),age(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)),
    inference(canonicalize,[],[normalize_0_2]) ).

cnf(refute_0_1,plain,
    ( ~ greater(age(X,T),age(X,T0))
    | ~ organization(X)
    | greater(internal_friction(X,T),internal_friction(X,T0)) ),
    inference(canonicalize,[],[normalize_0_4]) ).

cnf(refute_0_2,plain,
    ( ~ greater(age(skolemFOFtoCNF_X,skolemFOFtoCNF_T),age(skolemFOFtoCNF_X,skolemFOFtoCNF_T0))
    | ~ organization(skolemFOFtoCNF_X)
    | greater(internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T),internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)) ),
    inference(subst,[],[refute_0_1:[bind(T,$fot(skolemFOFtoCNF_T)),bind(T0,$fot(skolemFOFtoCNF_T0)),bind(X,$fot(skolemFOFtoCNF_X))]]) ).

cnf(refute_0_3,plain,
    ( ~ organization(skolemFOFtoCNF_X)
    | greater(internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T),internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)) ),
    inference(resolve,[$cnf( greater(age(skolemFOFtoCNF_X,skolemFOFtoCNF_T),age(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)) )],[refute_0_0,refute_0_2]) ).

cnf(refute_0_4,plain,
    organization(skolemFOFtoCNF_X),
    inference(canonicalize,[],[normalize_0_5]) ).

cnf(refute_0_5,plain,
    greater(internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T),internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)),
    inference(resolve,[$cnf( organization(skolemFOFtoCNF_X) )],[refute_0_4,refute_0_3]) ).

cnf(refute_0_6,plain,
    ( X != Y
    | smaller_or_equal(X,Y) ),
    inference(canonicalize,[],[normalize_0_9]) ).

cnf(refute_0_7,plain,
    ( Y != Y
    | smaller_or_equal(Y,Y) ),
    inference(subst,[],[refute_0_6:[bind(X,$fot(Y))]]) ).

cnf(refute_0_8,plain,
    Y = Y,
    introduced(tautology,[refl,[$fot(Y)]]) ).

cnf(refute_0_9,plain,
    smaller_or_equal(Y,Y),
    inference(resolve,[$cnf( $equal(Y,Y) )],[refute_0_8,refute_0_7]) ).

cnf(refute_0_10,plain,
    smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_129),stock_of_knowledge(skolemFOFtoCNF_X,X_129)),
    inference(subst,[],[refute_0_9:[bind(Y,$fot(stock_of_knowledge(skolemFOFtoCNF_X,X_129)))]]) ).

cnf(refute_0_11,plain,
    ( ~ greater(internal_friction(X,T),internal_friction(X,T0))
    | ~ organization(X)
    | ~ smaller_or_equal(stock_of_knowledge(X,T),stock_of_knowledge(X,T0))
    | smaller(capability(X,T),capability(X,T0)) ),
    inference(canonicalize,[],[normalize_0_13]) ).

cnf(refute_0_12,plain,
    ( ~ greater(internal_friction(skolemFOFtoCNF_X,X_124),internal_friction(skolemFOFtoCNF_X,X_125))
    | ~ organization(skolemFOFtoCNF_X)
    | ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_125))
    | smaller(capability(skolemFOFtoCNF_X,X_124),capability(skolemFOFtoCNF_X,X_125)) ),
    inference(subst,[],[refute_0_11:[bind(T,$fot(X_124)),bind(T0,$fot(X_125)),bind(X,$fot(skolemFOFtoCNF_X))]]) ).

cnf(refute_0_13,plain,
    ( ~ organization(X)
    | stock_of_knowledge(X,T) = stock_of_knowledge(X,T0) ),
    inference(canonicalize,[],[normalize_0_16]) ).

cnf(refute_0_14,plain,
    ( ~ organization(skolemFOFtoCNF_X)
    | stock_of_knowledge(skolemFOFtoCNF_X,X_15) = stock_of_knowledge(skolemFOFtoCNF_X,X_16) ),
    inference(subst,[],[refute_0_13:[bind(T,$fot(X_15)),bind(T0,$fot(X_16)),bind(X,$fot(skolemFOFtoCNF_X))]]) ).

cnf(refute_0_15,plain,
    stock_of_knowledge(skolemFOFtoCNF_X,X_15) = stock_of_knowledge(skolemFOFtoCNF_X,X_16),
    inference(resolve,[$cnf( organization(skolemFOFtoCNF_X) )],[refute_0_4,refute_0_14]) ).

cnf(refute_0_16,plain,
    stock_of_knowledge(skolemFOFtoCNF_X,X_15) = stock_of_knowledge(skolemFOFtoCNF_X,X_125),
    inference(subst,[],[refute_0_15:[bind(X_16,$fot(X_125))]]) ).

cnf(refute_0_17,plain,
    X0 = X0,
    introduced(tautology,[refl,[$fot(X0)]]) ).

cnf(refute_0_18,plain,
    ( X0 != X0
    | X0 != Y0
    | Y0 = X0 ),
    introduced(tautology,[equality,[$cnf( $equal(X0,X0) ),[0],$fot(Y0)]]) ).

cnf(refute_0_19,plain,
    ( X0 != Y0
    | Y0 = X0 ),
    inference(resolve,[$cnf( $equal(X0,X0) )],[refute_0_17,refute_0_18]) ).

cnf(refute_0_20,plain,
    ( stock_of_knowledge(skolemFOFtoCNF_X,X_15) != stock_of_knowledge(skolemFOFtoCNF_X,X_125)
    | stock_of_knowledge(skolemFOFtoCNF_X,X_125) = stock_of_knowledge(skolemFOFtoCNF_X,X_15) ),
    inference(subst,[],[refute_0_19:[bind(X0,$fot(stock_of_knowledge(skolemFOFtoCNF_X,X_15))),bind(Y0,$fot(stock_of_knowledge(skolemFOFtoCNF_X,X_125)))]]) ).

cnf(refute_0_21,plain,
    stock_of_knowledge(skolemFOFtoCNF_X,X_125) = stock_of_knowledge(skolemFOFtoCNF_X,X_15),
    inference(resolve,[$cnf( $equal(stock_of_knowledge(skolemFOFtoCNF_X,X_15),stock_of_knowledge(skolemFOFtoCNF_X,X_125)) )],[refute_0_16,refute_0_20]) ).

cnf(refute_0_22,plain,
    ( stock_of_knowledge(skolemFOFtoCNF_X,X_125) != stock_of_knowledge(skolemFOFtoCNF_X,X_15)
    | ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_15))
    | smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_125)) ),
    introduced(tautology,[equality,[$cnf( ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_125)) ),[1],$fot(stock_of_knowledge(skolemFOFtoCNF_X,X_15))]]) ).

cnf(refute_0_23,plain,
    ( ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_15))
    | smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_125)) ),
    inference(resolve,[$cnf( $equal(stock_of_knowledge(skolemFOFtoCNF_X,X_125),stock_of_knowledge(skolemFOFtoCNF_X,X_15)) )],[refute_0_21,refute_0_22]) ).

cnf(refute_0_24,plain,
    ( ~ greater(internal_friction(skolemFOFtoCNF_X,X_124),internal_friction(skolemFOFtoCNF_X,X_125))
    | ~ organization(skolemFOFtoCNF_X)
    | ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_15))
    | smaller(capability(skolemFOFtoCNF_X,X_124),capability(skolemFOFtoCNF_X,X_125)) ),
    inference(resolve,[$cnf( smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_125)) )],[refute_0_23,refute_0_12]) ).

cnf(refute_0_25,plain,
    ( ~ greater(internal_friction(skolemFOFtoCNF_X,X_124),internal_friction(skolemFOFtoCNF_X,X_125))
    | ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_124),stock_of_knowledge(skolemFOFtoCNF_X,X_15))
    | smaller(capability(skolemFOFtoCNF_X,X_124),capability(skolemFOFtoCNF_X,X_125)) ),
    inference(resolve,[$cnf( organization(skolemFOFtoCNF_X) )],[refute_0_4,refute_0_24]) ).

cnf(refute_0_26,plain,
    ( ~ greater(internal_friction(skolemFOFtoCNF_X,X_129),internal_friction(skolemFOFtoCNF_X,X_128))
    | ~ smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_129),stock_of_knowledge(skolemFOFtoCNF_X,X_129))
    | smaller(capability(skolemFOFtoCNF_X,X_129),capability(skolemFOFtoCNF_X,X_128)) ),
    inference(subst,[],[refute_0_25:[bind(X_124,$fot(X_129)),bind(X_125,$fot(X_128)),bind(X_15,$fot(X_129))]]) ).

cnf(refute_0_27,plain,
    ( ~ greater(internal_friction(skolemFOFtoCNF_X,X_129),internal_friction(skolemFOFtoCNF_X,X_128))
    | smaller(capability(skolemFOFtoCNF_X,X_129),capability(skolemFOFtoCNF_X,X_128)) ),
    inference(resolve,[$cnf( smaller_or_equal(stock_of_knowledge(skolemFOFtoCNF_X,X_129),stock_of_knowledge(skolemFOFtoCNF_X,X_129)) )],[refute_0_10,refute_0_26]) ).

cnf(refute_0_28,plain,
    ( ~ greater(internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T),internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T0))
    | smaller(capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T),capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)) ),
    inference(subst,[],[refute_0_27:[bind(X_128,$fot(skolemFOFtoCNF_T0)),bind(X_129,$fot(skolemFOFtoCNF_T))]]) ).

cnf(refute_0_29,plain,
    smaller(capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T),capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)),
    inference(resolve,[$cnf( greater(internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T),internal_friction(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)) )],[refute_0_5,refute_0_28]) ).

cnf(refute_0_30,plain,
    ~ smaller(capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T),capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)),
    inference(canonicalize,[],[normalize_0_17]) ).

cnf(refute_0_31,plain,
    $false,
    inference(resolve,[$cnf( smaller(capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T),capability(skolemFOFtoCNF_X,skolemFOFtoCNF_T0)) )],[refute_0_29,refute_0_30]) ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.03/0.12  % Problem  : MGT048+1 : TPTP v8.1.0. Released v2.4.0.
% 0.03/0.12  % Command  : metis --show proof --show saturation %s
% 0.12/0.32  % Computer : n025.cluster.edu
% 0.12/0.32  % Model    : x86_64 x86_64
% 0.12/0.32  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.32  % Memory   : 8042.1875MB
% 0.12/0.32  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.12/0.32  % CPULimit : 300
% 0.12/0.32  % WCLimit  : 600
% 0.12/0.32  % DateTime : Thu Jun  9 08:57:20 EDT 2022
% 0.12/0.32  % CPUTime  : 
% 0.12/0.33  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 0.18/0.47  % SZS status Theorem for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.18/0.47  
% 0.18/0.47  % SZS output start CNFRefutation for /export/starexec/sandbox2/benchmark/theBenchmark.p
% See solution above
% 0.18/0.48  
%------------------------------------------------------------------------------