TSTP Solution File: GEO222+1 by CSE_E---1.5

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : CSE_E---1.5
% Problem  : GEO222+1 : TPTP v8.1.2. Released v3.3.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : java -jar /export/starexec/sandbox2/solver/bin/mcs_scs.jar %d %s

% Computer : n022.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  : 300s
% DateTime : Wed Aug 30 22:47:14 EDT 2023

% Result   : Theorem 0.54s 0.78s
% Output   : CNFRefutation 0.54s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   24
%            Number of leaves      :   22
% Syntax   : Number of formulae    :   83 (  27 unt;  11 typ;   0 def)
%            Number of atoms       :  181 (   0 equ)
%            Maximal formula atoms :   16 (   2 avg)
%            Number of connectives :  158 (  49   ~;  97   |;   6   &)
%                                         (   0 <=>;   6  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   11 (   4 avg)
%            Maximal term depth    :    3 (   1 avg)
%            Number of types       :    2 (   0 usr)
%            Number of type conns  :   18 (   9   >;   9   *;   0   +;   0  <<)
%            Number of predicates  :    6 (   5 usr;   1 prp; 0-2 aty)
%            Number of functors    :    6 (   6 usr;   2 con; 0-2 aty)
%            Number of variables   :  162 (  18 sgn;  61   !;   0   ?;   0   :)

% Comments : 
%------------------------------------------------------------------------------
tff(decl_22,type,
    distinct_points: ( $i * $i ) > $o ).

tff(decl_23,type,
    distinct_lines: ( $i * $i ) > $o ).

tff(decl_24,type,
    convergent_lines: ( $i * $i ) > $o ).

tff(decl_25,type,
    line_connecting: ( $i * $i ) > $i ).

tff(decl_26,type,
    apart_point_and_line: ( $i * $i ) > $o ).

tff(decl_27,type,
    intersection_point: ( $i * $i ) > $i ).

tff(decl_28,type,
    parallel_through_point: ( $i * $i ) > $i ).

tff(decl_29,type,
    unorthogonal_lines: ( $i * $i ) > $o ).

tff(decl_30,type,
    orthogonal_through_point: ( $i * $i ) > $i ).

tff(decl_31,type,
    esk1_0: $i ).

tff(decl_32,type,
    esk2_0: $i ).

fof(ooc1,axiom,
    ! [X9,X6] : ~ unorthogonal_lines(orthogonal_through_point(X6,X9),X6),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+3.ax',ooc1) ).

fof(occu1,axiom,
    ! [X6,X7] :
      ( convergent_lines(X6,X7)
      | unorthogonal_lines(X6,X7) ),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+3.ax',occu1) ).

fof(apart3,axiom,
    ! [X1] : ~ convergent_lines(X1,X1),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+0.ax',apart3) ).

fof(ax6,axiom,
    ! [X1,X2,X3] :
      ( convergent_lines(X1,X2)
     => ( convergent_lines(X1,X3)
        | convergent_lines(X2,X3) ) ),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+0.ax',ax6) ).

fof(ceq3,axiom,
    ! [X1,X2,X3] :
      ( convergent_lines(X1,X2)
     => ( distinct_lines(X2,X3)
        | convergent_lines(X1,X3) ) ),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+0.ax',ceq3) ).

fof(ouo1,axiom,
    ! [X9,X6,X7,X8] :
      ( distinct_lines(X6,X7)
     => ( apart_point_and_line(X9,X6)
        | apart_point_and_line(X9,X7)
        | unorthogonal_lines(X6,X8)
        | unorthogonal_lines(X7,X8) ) ),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+3.ax',ouo1) ).

fof(ooc2,axiom,
    ! [X9,X6] : ~ apart_point_and_line(X9,orthogonal_through_point(X6,X9)),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+3.ax',ooc2) ).

fof(cp1,axiom,
    ! [X1,X2] : ~ convergent_lines(parallel_through_point(X2,X1),X2),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+2.ax',cp1) ).

fof(ci3,axiom,
    ! [X1,X2] :
      ( convergent_lines(X1,X2)
     => ~ apart_point_and_line(intersection_point(X1,X2),X1) ),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+0.ax',ci3) ).

fof(oac1,axiom,
    ! [X6,X7,X8] :
      ( ( convergent_lines(X6,X7)
        & unorthogonal_lines(X6,X7) )
     => ( ( convergent_lines(X6,X8)
          & unorthogonal_lines(X6,X8) )
        | ( convergent_lines(X7,X8)
          & unorthogonal_lines(X7,X8) ) ) ),
    file('/export/starexec/sandbox2/benchmark/Axioms/GEO006+3.ax',oac1) ).

fof(con,conjecture,
    ! [X9,X6] : ~ convergent_lines(X6,orthogonal_through_point(orthogonal_through_point(X6,X9),X9)),
    file('/export/starexec/sandbox2/benchmark/theBenchmark.p',con) ).

fof(c_0_11,plain,
    ! [X9,X6] : ~ unorthogonal_lines(orthogonal_through_point(X6,X9),X6),
    inference(fof_simplification,[status(thm)],[ooc1]) ).

fof(c_0_12,plain,
    ! [X55,X56] : ~ unorthogonal_lines(orthogonal_through_point(X56,X55),X56),
    inference(variable_rename,[status(thm)],[c_0_11]) ).

fof(c_0_13,plain,
    ! [X50,X51] :
      ( convergent_lines(X50,X51)
      | unorthogonal_lines(X50,X51) ),
    inference(variable_rename,[status(thm)],[occu1]) ).

fof(c_0_14,plain,
    ! [X1] : ~ convergent_lines(X1,X1),
    inference(fof_simplification,[status(thm)],[apart3]) ).

fof(c_0_15,plain,
    ! [X19,X20,X21] :
      ( ~ convergent_lines(X19,X20)
      | convergent_lines(X19,X21)
      | convergent_lines(X20,X21) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ax6])]) ).

cnf(c_0_16,plain,
    ~ unorthogonal_lines(orthogonal_through_point(X1,X2),X1),
    inference(split_conjunct,[status(thm)],[c_0_12]) ).

cnf(c_0_17,plain,
    ( convergent_lines(X1,X2)
    | unorthogonal_lines(X1,X2) ),
    inference(split_conjunct,[status(thm)],[c_0_13]) ).

fof(c_0_18,plain,
    ! [X12] : ~ convergent_lines(X12,X12),
    inference(variable_rename,[status(thm)],[c_0_14]) ).

cnf(c_0_19,plain,
    ( convergent_lines(X1,X3)
    | convergent_lines(X2,X3)
    | ~ convergent_lines(X1,X2) ),
    inference(split_conjunct,[status(thm)],[c_0_15]) ).

cnf(c_0_20,plain,
    convergent_lines(orthogonal_through_point(X1,X2),X1),
    inference(spm,[status(thm)],[c_0_16,c_0_17]) ).

fof(c_0_21,plain,
    ! [X40,X41,X42] :
      ( ~ convergent_lines(X40,X41)
      | distinct_lines(X41,X42)
      | convergent_lines(X40,X42) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ceq3])]) ).

cnf(c_0_22,plain,
    ~ convergent_lines(X1,X1),
    inference(split_conjunct,[status(thm)],[c_0_18]) ).

cnf(c_0_23,plain,
    ( convergent_lines(orthogonal_through_point(X1,X2),X3)
    | convergent_lines(X1,X3) ),
    inference(spm,[status(thm)],[c_0_19,c_0_20]) ).

fof(c_0_24,plain,
    ! [X59,X60,X61,X62] :
      ( ~ distinct_lines(X60,X61)
      | apart_point_and_line(X59,X60)
      | apart_point_and_line(X59,X61)
      | unorthogonal_lines(X60,X62)
      | unorthogonal_lines(X61,X62) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[ouo1])]) ).

cnf(c_0_25,plain,
    ( distinct_lines(X2,X3)
    | convergent_lines(X1,X3)
    | ~ convergent_lines(X1,X2) ),
    inference(split_conjunct,[status(thm)],[c_0_21]) ).

cnf(c_0_26,plain,
    convergent_lines(X1,orthogonal_through_point(X1,X2)),
    inference(spm,[status(thm)],[c_0_22,c_0_23]) ).

fof(c_0_27,plain,
    ! [X9,X6] : ~ apart_point_and_line(X9,orthogonal_through_point(X6,X9)),
    inference(fof_simplification,[status(thm)],[ooc2]) ).

cnf(c_0_28,plain,
    ( apart_point_and_line(X3,X1)
    | apart_point_and_line(X3,X2)
    | unorthogonal_lines(X1,X4)
    | unorthogonal_lines(X2,X4)
    | ~ distinct_lines(X1,X2) ),
    inference(split_conjunct,[status(thm)],[c_0_24]) ).

cnf(c_0_29,plain,
    ( convergent_lines(X1,X2)
    | distinct_lines(orthogonal_through_point(X1,X3),X2) ),
    inference(spm,[status(thm)],[c_0_25,c_0_26]) ).

fof(c_0_30,plain,
    ! [X1,X2] : ~ convergent_lines(parallel_through_point(X2,X1),X2),
    inference(fof_simplification,[status(thm)],[cp1]) ).

fof(c_0_31,plain,
    ! [X1,X2] :
      ( convergent_lines(X1,X2)
     => ~ apart_point_and_line(intersection_point(X1,X2),X1) ),
    inference(fof_simplification,[status(thm)],[ci3]) ).

fof(c_0_32,plain,
    ! [X57,X58] : ~ apart_point_and_line(X57,orthogonal_through_point(X58,X57)),
    inference(variable_rename,[status(thm)],[c_0_27]) ).

cnf(c_0_33,plain,
    ( unorthogonal_lines(orthogonal_through_point(X1,X2),X3)
    | unorthogonal_lines(X4,X3)
    | apart_point_and_line(X5,orthogonal_through_point(X1,X2))
    | apart_point_and_line(X5,X4)
    | convergent_lines(X1,X4) ),
    inference(spm,[status(thm)],[c_0_28,c_0_29]) ).

fof(c_0_34,plain,
    ! [X43,X44] : ~ convergent_lines(parallel_through_point(X44,X43),X44),
    inference(variable_rename,[status(thm)],[c_0_30]) ).

fof(c_0_35,plain,
    ! [X26,X27] :
      ( ~ convergent_lines(X26,X27)
      | ~ apart_point_and_line(intersection_point(X26,X27),X26) ),
    inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_31])]) ).

cnf(c_0_36,plain,
    ~ apart_point_and_line(X1,orthogonal_through_point(X2,X1)),
    inference(split_conjunct,[status(thm)],[c_0_32]) ).

cnf(c_0_37,plain,
    ( unorthogonal_lines(X1,X2)
    | apart_point_and_line(X3,orthogonal_through_point(X2,X4))
    | apart_point_and_line(X3,X1)
    | convergent_lines(X2,X1) ),
    inference(spm,[status(thm)],[c_0_16,c_0_33]) ).

cnf(c_0_38,plain,
    ~ convergent_lines(parallel_through_point(X1,X2),X1),
    inference(split_conjunct,[status(thm)],[c_0_34]) ).

cnf(c_0_39,plain,
    ( convergent_lines(orthogonal_through_point(X1,X2),X3)
    | convergent_lines(X1,X4)
    | convergent_lines(X4,X3) ),
    inference(spm,[status(thm)],[c_0_19,c_0_23]) ).

cnf(c_0_40,plain,
    ( ~ convergent_lines(X1,X2)
    | ~ apart_point_and_line(intersection_point(X1,X2),X1) ),
    inference(split_conjunct,[status(thm)],[c_0_35]) ).

cnf(c_0_41,plain,
    ( unorthogonal_lines(X1,X2)
    | apart_point_and_line(X3,X1)
    | convergent_lines(X2,X1) ),
    inference(spm,[status(thm)],[c_0_36,c_0_37]) ).

cnf(c_0_42,plain,
    ( convergent_lines(orthogonal_through_point(parallel_through_point(X1,X2),X3),X4)
    | convergent_lines(X1,X4) ),
    inference(spm,[status(thm)],[c_0_38,c_0_39]) ).

fof(c_0_43,plain,
    ! [X52,X53,X54] :
      ( ( convergent_lines(X53,X54)
        | convergent_lines(X52,X54)
        | ~ convergent_lines(X52,X53)
        | ~ unorthogonal_lines(X52,X53) )
      & ( unorthogonal_lines(X53,X54)
        | convergent_lines(X52,X54)
        | ~ convergent_lines(X52,X53)
        | ~ unorthogonal_lines(X52,X53) )
      & ( convergent_lines(X53,X54)
        | unorthogonal_lines(X52,X54)
        | ~ convergent_lines(X52,X53)
        | ~ unorthogonal_lines(X52,X53) )
      & ( unorthogonal_lines(X53,X54)
        | unorthogonal_lines(X52,X54)
        | ~ convergent_lines(X52,X53)
        | ~ unorthogonal_lines(X52,X53) ) ),
    inference(distribute,[status(thm)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[oac1])])]) ).

cnf(c_0_44,plain,
    ( unorthogonal_lines(X1,X2)
    | convergent_lines(X2,X1)
    | ~ convergent_lines(X1,X3) ),
    inference(spm,[status(thm)],[c_0_40,c_0_41]) ).

cnf(c_0_45,plain,
    convergent_lines(X1,orthogonal_through_point(parallel_through_point(X1,X2),X3)),
    inference(spm,[status(thm)],[c_0_22,c_0_42]) ).

fof(c_0_46,negated_conjecture,
    ~ ! [X9,X6] : ~ convergent_lines(X6,orthogonal_through_point(orthogonal_through_point(X6,X9),X9)),
    inference(fof_simplification,[status(thm)],[inference(assume_negation,[status(cth)],[con])]) ).

cnf(c_0_47,plain,
    ( unorthogonal_lines(X1,X2)
    | unorthogonal_lines(X3,X2)
    | ~ convergent_lines(X3,X1)
    | ~ unorthogonal_lines(X3,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_43]) ).

cnf(c_0_48,plain,
    ( unorthogonal_lines(X1,X2)
    | convergent_lines(X2,X1) ),
    inference(spm,[status(thm)],[c_0_44,c_0_45]) ).

fof(c_0_49,negated_conjecture,
    convergent_lines(esk2_0,orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0)),
    inference(skolemize,[status(esa)],[inference(variable_rename,[status(thm)],[inference(fof_nnf,[status(thm)],[c_0_46])])]) ).

cnf(c_0_50,plain,
    ( convergent_lines(X1,X2)
    | unorthogonal_lines(X3,X2)
    | ~ convergent_lines(X3,X1)
    | ~ unorthogonal_lines(X3,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_43]) ).

cnf(c_0_51,plain,
    ( unorthogonal_lines(X1,X2)
    | unorthogonal_lines(X3,X2)
    | convergent_lines(X1,X3)
    | ~ convergent_lines(X3,X1) ),
    inference(spm,[status(thm)],[c_0_47,c_0_48]) ).

cnf(c_0_52,negated_conjecture,
    convergent_lines(esk2_0,orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0)),
    inference(split_conjunct,[status(thm)],[c_0_49]) ).

cnf(c_0_53,plain,
    ( unorthogonal_lines(X1,X2)
    | convergent_lines(X3,X1)
    | convergent_lines(X3,X2)
    | ~ convergent_lines(X1,X3) ),
    inference(spm,[status(thm)],[c_0_50,c_0_48]) ).

cnf(c_0_54,plain,
    ( convergent_lines(orthogonal_through_point(X1,X2),X3)
    | distinct_lines(X1,X3) ),
    inference(spm,[status(thm)],[c_0_25,c_0_20]) ).

cnf(c_0_55,plain,
    ( unorthogonal_lines(X1,X2)
    | convergent_lines(X3,X2)
    | ~ convergent_lines(X3,X1)
    | ~ unorthogonal_lines(X3,X1) ),
    inference(split_conjunct,[status(thm)],[c_0_43]) ).

cnf(c_0_56,negated_conjecture,
    ( unorthogonal_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),X1)
    | unorthogonal_lines(esk2_0,X1)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),esk2_0) ),
    inference(spm,[status(thm)],[c_0_51,c_0_52]) ).

cnf(c_0_57,negated_conjecture,
    ( unorthogonal_lines(esk2_0,X1)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),esk2_0)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),X1) ),
    inference(spm,[status(thm)],[c_0_53,c_0_52]) ).

cnf(c_0_58,plain,
    distinct_lines(X1,orthogonal_through_point(X1,X2)),
    inference(spm,[status(thm)],[c_0_22,c_0_54]) ).

cnf(c_0_59,negated_conjecture,
    ( unorthogonal_lines(esk2_0,X1)
    | unorthogonal_lines(X1,X2)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),esk2_0)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),X2) ),
    inference(csr,[status(thm)],[inference(spm,[status(thm)],[c_0_55,c_0_56]),c_0_57]) ).

cnf(c_0_60,plain,
    ( unorthogonal_lines(orthogonal_through_point(X1,X2),X3)
    | unorthogonal_lines(X1,X3)
    | apart_point_and_line(X4,orthogonal_through_point(X1,X2))
    | apart_point_and_line(X4,X1) ),
    inference(spm,[status(thm)],[c_0_28,c_0_58]) ).

cnf(c_0_61,negated_conjecture,
    ( unorthogonal_lines(X1,esk2_0)
    | unorthogonal_lines(esk2_0,X1)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),esk2_0) ),
    inference(ef,[status(thm)],[c_0_59]) ).

cnf(c_0_62,plain,
    ( unorthogonal_lines(orthogonal_through_point(X1,X2),X3)
    | unorthogonal_lines(X1,X3)
    | apart_point_and_line(X2,X1) ),
    inference(spm,[status(thm)],[c_0_36,c_0_60]) ).

cnf(c_0_63,negated_conjecture,
    ( unorthogonal_lines(esk2_0,X1)
    | unorthogonal_lines(esk2_0,X2)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),esk2_0)
    | convergent_lines(X1,X2) ),
    inference(csr,[status(thm)],[inference(spm,[status(thm)],[c_0_55,c_0_61]),c_0_48]) ).

cnf(c_0_64,plain,
    ( unorthogonal_lines(X1,X2)
    | unorthogonal_lines(X2,X3)
    | apart_point_and_line(X4,X1)
    | convergent_lines(orthogonal_through_point(X1,X4),X3)
    | ~ convergent_lines(orthogonal_through_point(X1,X4),X2) ),
    inference(spm,[status(thm)],[c_0_55,c_0_62]) ).

cnf(c_0_65,negated_conjecture,
    ( unorthogonal_lines(esk2_0,X1)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),esk2_0) ),
    inference(sr,[status(thm)],[inference(ef,[status(thm)],[c_0_63]),c_0_22]) ).

cnf(c_0_66,negated_conjecture,
    ( unorthogonal_lines(esk2_0,X1)
    | convergent_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),X1) ),
    inference(condense,[status(thm)],[inference(sr,[status(thm)],[inference(sr,[status(thm)],[inference(spm,[status(thm)],[c_0_64,c_0_65]),c_0_16]),c_0_36])]) ).

cnf(c_0_67,negated_conjecture,
    unorthogonal_lines(esk2_0,orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0)),
    inference(spm,[status(thm)],[c_0_22,c_0_66]) ).

cnf(c_0_68,negated_conjecture,
    ( unorthogonal_lines(orthogonal_through_point(orthogonal_through_point(esk2_0,esk1_0),esk1_0),X1)
    | unorthogonal_lines(esk2_0,X1) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_47,c_0_67]),c_0_52])]) ).

cnf(c_0_69,negated_conjecture,
    unorthogonal_lines(esk2_0,orthogonal_through_point(esk2_0,esk1_0)),
    inference(spm,[status(thm)],[c_0_16,c_0_68]) ).

cnf(c_0_70,negated_conjecture,
    ( unorthogonal_lines(orthogonal_through_point(esk2_0,esk1_0),X1)
    | convergent_lines(esk2_0,X1) ),
    inference(cn,[status(thm)],[inference(rw,[status(thm)],[inference(spm,[status(thm)],[c_0_55,c_0_69]),c_0_26])]) ).

cnf(c_0_71,negated_conjecture,
    $false,
    inference(sr,[status(thm)],[inference(spm,[status(thm)],[c_0_16,c_0_70]),c_0_22]),
    [proof] ).

%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.03/0.12  % Problem    : GEO222+1 : TPTP v8.1.2. Released v3.3.0.
% 0.03/0.13  % Command    : java -jar /export/starexec/sandbox2/solver/bin/mcs_scs.jar %d %s
% 0.13/0.34  % Computer : n022.cluster.edu
% 0.13/0.34  % Model    : x86_64 x86_64
% 0.13/0.34  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.34  % Memory   : 8042.1875MB
% 0.13/0.34  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.13/0.34  % CPULimit   : 300
% 0.13/0.34  % WCLimit    : 300
% 0.13/0.34  % DateTime   : Tue Aug 29 19:58:23 EDT 2023
% 0.13/0.34  % CPUTime  : 
% 0.20/0.56  start to proof: theBenchmark
% 0.54/0.78  % Version  : CSE_E---1.5
% 0.54/0.78  % Problem  : theBenchmark.p
% 0.54/0.78  % Proof found
% 0.54/0.78  % SZS status Theorem for theBenchmark.p
% 0.54/0.78  % SZS output start Proof
% See solution above
% 0.54/0.79  % Total time : 0.217000 s
% 0.54/0.79  % SZS output end Proof
% 0.54/0.79  % Total time : 0.219000 s
%------------------------------------------------------------------------------