%------------------------------------------------------------------------------ % File : Prover9---1109a % Problem : MGT091+1 : TPTP v9.3.0. Released v9.3.0. % Transfm : none % Format : tptp:raw % Command : tptp2X_and_run_prover9 %d %s % Computer : n011.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 Apr 29 02:10:29 PM UTC 2026 % Result : Theorem 0.74s 1.08s % Output : Refutation 0.74s % Verified : % SZS Type : - % Comments : %------------------------------------------------------------------------------ %----WARNING: Could not form TPTP format derivation %------------------------------------------------------------------------------ %----ORIGINAL SYSTEM OUTPUT % 0.12/0.13 % Problem : MGT091+1 : TPTP v9.3.0. Released v9.3.0. % 0.12/0.14 % Command : tptp2X_and_run_prover9 %d %s % 0.15/0.34 % Computer : n011.cluster.edu % 0.15/0.34 % Model : x86_64 x86_64 % 0.15/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz % 0.15/0.34 % Memory : 8042.1875MB % 0.15/0.34 % OS : Linux 3.10.0-693.el7.x86_64 % 0.15/0.35 % CPULimit : 300 % 0.15/0.35 % WCLimit : 300 % 0.15/0.35 % DateTime : Tue Apr 28 18:58:02 EDT 2026 % 0.15/0.35 % CPUTime : % 0.74/1.04 ============================== Prover9 =============================== % 0.74/1.04 Prover9 (32) version 2009-11A, November 2009. % 0.74/1.04 Process 15121 was started by sandbox on n011.cluster.edu, % 0.74/1.04 Tue Apr 28 18:58:03 2026 % 0.74/1.04 The command was "/export/starexec/sandbox/solver/bin/prover9 -t 300 -f /tmp/Prover9_14789_n011.cluster.edu". % 0.74/1.04 ============================== end of head =========================== % 0.74/1.04 % 0.74/1.04 ============================== INPUT ================================= % 0.74/1.04 % 0.74/1.04 % Reading from file /tmp/Prover9_14789_n011.cluster.edu % 0.74/1.04 % 0.74/1.04 set(prolog_style_variables). % 0.74/1.04 set(auto2). % 0.74/1.04 % set(auto2) -> set(auto). % 0.74/1.04 % set(auto) -> set(auto_inference). % 0.74/1.04 % set(auto) -> set(auto_setup). % 0.74/1.04 % set(auto_setup) -> set(predicate_elim). % 0.74/1.04 % set(auto_setup) -> assign(eq_defs, unfold). % 0.74/1.04 % set(auto) -> set(auto_limits). % 0.74/1.04 % set(auto_limits) -> assign(max_weight, "100.000"). % 0.74/1.04 % set(auto_limits) -> assign(sos_limit, 20000). % 0.74/1.04 % set(auto) -> set(auto_denials). % 0.74/1.04 % set(auto) -> set(auto_process). % 0.74/1.04 % set(auto2) -> assign(new_constants, 1). % 0.74/1.04 % set(auto2) -> assign(fold_denial_max, 3). % 0.74/1.04 % set(auto2) -> assign(max_weight, "200.000"). % 0.74/1.04 % set(auto2) -> assign(max_hours, 1). % 0.74/1.04 % assign(max_hours, 1) -> assign(max_seconds, 3600). % 0.74/1.04 % set(auto2) -> assign(max_seconds, 0). % 0.74/1.04 % set(auto2) -> assign(max_minutes, 5). % 0.74/1.04 % assign(max_minutes, 5) -> assign(max_seconds, 300). % 0.74/1.04 % set(auto2) -> set(sort_initial_sos). % 0.74/1.04 % set(auto2) -> assign(sos_limit, -1). % 0.74/1.04 % set(auto2) -> assign(lrs_ticks, 3000). % 0.74/1.04 % set(auto2) -> assign(max_megs, 400). % 0.74/1.04 % set(auto2) -> assign(stats, some). % 0.74/1.04 % set(auto2) -> clear(echo_input). % 0.74/1.04 % set(auto2) -> set(quiet). % 0.74/1.04 % set(auto2) -> clear(print_initial_clauses). % 0.74/1.04 % set(auto2) -> clear(print_given). % 0.74/1.04 assign(lrs_ticks,-1). % 0.74/1.04 assign(sos_limit,10000). % 0.74/1.04 assign(order,kbo). % 0.74/1.04 set(lex_order_vars). % 0.74/1.04 clear(print_given). % 0.74/1.04 % 0.74/1.04 % formulas(sos). % not echoed (47 formulas) % 0.74/1.04 % 0.74/1.04 ============================== end of input ========================== % 0.74/1.04 % 0.74/1.04 % From the command line: assign(max_seconds, 300). % 0.74/1.04 % 0.74/1.04 ============================== PROCESS NON-CLAUSAL FORMULAS ========== % 0.74/1.04 % 0.74/1.04 % Formulas that are not ordinary clauses: % 0.74/1.04 1 (all X -less(X,X)) # label(irreflexive) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 2 (all X all Y all Z (less(X,Y) & less(Y,Z) -> less(X,Z))) # label(transitive) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 3 (all X all Y (less(X,Y) | X = Y | less(Y,X))) # label(trichotomy) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 4 (all X all Y (leq(X,Y) <-> less(X,Y) | X = Y)) # label(leq_def) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 5 (all X all Y (leq(X,Y) & leq(Y,X) -> X = Y)) # label(leq_antisym) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 6 (all X all Y (less(X,Y) -> leq(X,Y))) # label(less_implies_leq) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 7 (all X all Y all Z (leq(X,Y) & less(Y,Z) -> less(X,Z))) # label(leq_less_trans) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 8 (all X all Y all Z (less(X,Y) & leq(Y,Z) -> less(X,Z))) # label(less_leq_trans) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 9 (all X all Y all Z (leq(X,Y) & leq(Y,Z) -> leq(X,Z))) # label(leq_trans) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 10 (all X all A all B (in_closed(X,A,B) <-> leq(A,X) & leq(X,B))) # label(in_closed) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 11 (all X all A all B (in_lopen(X,A,B) <-> less(A,X) & leq(X,B))) # label(in_lopen) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 12 (all X all A all B (in_ropen(X,A,B) <-> leq(A,X) & less(X,B))) # label(in_ropen) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 13 (all X all A all B (in_open(X,A,B) <-> less(A,X) & less(X,B))) # label(in_open) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 14 (all I1lo all I1hi all I2lo all I2hi (axis_conflict(I1lo,I1hi,I2lo,I2hi) <-> -(exists X (in_closed(X,I1lo,I1hi) & in_closed(X,I2lo,I2hi))))) # label(axis_conflict_def) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 15 (all I1lo all I1hi all I2lo all I2hi (axis_compatible(I1lo,I1hi,I2lo,I2hi) <-> (exists X (in_closed(X,I1lo,I1hi) & in_closed(X,I2lo,I2hi))))) # label(axis_compatible_def) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 16 (all I1lo all I1hi all I2lo all I2hi (axis_subsumes(I1lo,I1hi,I2lo,I2hi) <-> (all X (in_closed(X,I1lo,I1hi) -> in_closed(X,I2lo,I2hi))))) # label(axis_subsumes_def) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 17 (all V (is_verdict(V) -> V = conflict | V = compatible | V = unknown)) # label(verdict_enum) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 18 (all V1 all V2 (is_verdict(V1) & is_verdict(V2) & (V1 = conflict | V2 = conflict) -> box_verdict(V1,V2) = conflict)) # label(box_conflict) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 19 (all V1 all V2 (is_verdict(V1) & is_verdict(V2) & V1 = compatible & V2 = compatible -> box_verdict(V1,V2) = compatible)) # label(box_compatible) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 20 (all V1 all V2 (is_verdict(V1) & is_verdict(V2) & (V1 = unknown | V2 = unknown) & V1 != conflict & V2 != conflict -> box_verdict(V1,V2) = unknown)) # label(box_unknown) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 21 (all V1 all V2 (is_verdict(V1) & is_verdict(V2) -> box_verdict(V1,V2) = conflict | box_verdict(V1,V2) = compatible | box_verdict(V1,V2) = unknown)) # label(box_verdict_total) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 22 (all X1 all X2 all A1 all B1 all A2 all B2 (in_box2(X1,X2,A1,B1,A2,B2) <-> in_closed(X1,A1,B1) & in_closed(X2,A2,B2))) # label(in_box2) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 23 (all X1 all X2 all X3 all A1 all B1 all A2 all B2 all A3 all B3 (in_box3(X1,X2,X3,A1,B1,A2,B2,A3,B3) <-> in_closed(X1,A1,B1) & in_closed(X2,A2,B2) & in_closed(X3,A3,B3))) # label(in_box3) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 24 (all A1 all B1 all A2 all B2 all C1 all D1 all C2 all D2 (box2_compatible(A1,B1,A2,B2,C1,D1,C2,D2) <-> axis_compatible(A1,B1,C1,D1) & axis_compatible(A2,B2,C2,D2))) # label(box2_overlap) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 25 (all A1 all B1 all A2 all B2 all C1 all D1 all C2 all D2 (box2_conflict(A1,B1,A2,B2,C1,D1,C2,D2) <-> axis_conflict(A1,B1,C1,D1) | axis_conflict(A2,B2,C2,D2))) # label(box2_conflict) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 26 (all X all V (in_closed(X,V,V) <-> X = V)) # label(shape_point) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 27 (all X all A all B (in_closed(X,A,B) <-> leq(A,X) & leq(X,B))) # label(shape_closed) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 28 (all X all A all B (in_ropen(X,A,B) <-> leq(A,X) & less(X,B))) # label(shape_ropen) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 29 (all X all A all B (in_lopen(X,A,B) <-> less(A,X) & leq(X,B))) # label(shape_lopen) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 30 (all X all A all B (in_open(X,A,B) <-> less(A,X) & less(X,B))) # label(shape_open) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.04 % 0.74/1.04 ============================== end of process non-clausal formulas === % 0.74/1.04 % 0.74/1.04 ============================== PROCESS INITIAL CLAUSES =============== % 0.74/1.04 % 0.74/1.04 ============================== PREDICATE ELIMINATION ================= % 0.74/1.04 31 -axis_subsumes(A,B,C,D) | -in_closed(E,A,B) | in_closed(E,C,D) # label(axis_subsumes_def) # label(axiom). [clausify(16)]. % 0.74/1.04 32 axis_subsumes(A,B,C,D) | in_closed(f3(A,B,C,D),A,B) # label(axis_subsumes_def) # label(axiom). [clausify(16)]. % 0.74/1.04 Derived: -in_closed(A,B,C) | in_closed(A,D,E) | in_closed(f3(B,C,D,E),B,C). [resolve(31,a,32,a)]. % 0.74/1.04 33 axis_subsumes(A,B,C,D) | -in_closed(f3(A,B,C,D),C,D) # label(axis_subsumes_def) # label(axiom). [clausify(16)]. % 0.74/1.04 Derived: -in_closed(f3(A,B,C,D),C,D) | -in_closed(E,A,B) | in_closed(E,C,D). [resolve(33,a,31,a)]. % 0.74/1.04 34 in_lopen(A,B,C) | -less(B,A) | -leq(A,C) # label(in_lopen) # label(axiom). [clausify(11)]. % 0.74/1.04 35 -in_lopen(A,B,C) | less(B,A) # label(in_lopen) # label(axiom). [clausify(11)]. % 0.74/1.04 36 -in_lopen(A,B,C) | leq(A,C) # label(in_lopen) # label(axiom). [clausify(11)]. % 0.74/1.04 37 -in_lopen(A,B,C) | less(B,A) # label(shape_lopen) # label(axiom). [clausify(29)]. % 0.74/1.04 38 -in_lopen(A,B,C) | leq(A,C) # label(shape_lopen) # label(axiom). [clausify(29)]. % 0.74/1.08 39 in_lopen(A,B,C) | -less(B,A) | -leq(A,C) # label(shape_lopen) # label(axiom). [clausify(29)]. % 0.74/1.08 40 in_ropen(A,B,C) | -leq(B,A) | -less(A,C) # label(in_ropen) # label(axiom). [clausify(12)]. % 0.74/1.08 41 -in_ropen(A,B,C) | leq(B,A) # label(in_ropen) # label(axiom). [clausify(12)]. % 0.74/1.08 42 -in_ropen(A,B,C) | less(A,C) # label(in_ropen) # label(axiom). [clausify(12)]. % 0.74/1.08 43 -in_ropen(A,B,C) | leq(B,A) # label(shape_ropen) # label(axiom). [clausify(28)]. % 0.74/1.08 44 -in_ropen(A,B,C) | less(A,C) # label(shape_ropen) # label(axiom). [clausify(28)]. % 0.74/1.08 45 in_ropen(A,B,C) | -leq(B,A) | -less(A,C) # label(shape_ropen) # label(axiom). [clausify(28)]. % 0.74/1.08 46 in_open(A,B,C) | -less(B,A) | -less(A,C) # label(in_open) # label(axiom). [clausify(13)]. % 0.74/1.08 47 -in_open(A,B,C) | less(B,A) # label(in_open) # label(axiom). [clausify(13)]. % 0.74/1.08 48 -in_open(A,B,C) | less(A,C) # label(in_open) # label(axiom). [clausify(13)]. % 0.74/1.08 49 -in_open(A,B,C) | less(B,A) # label(shape_open) # label(axiom). [clausify(30)]. % 0.74/1.08 50 -in_open(A,B,C) | less(A,C) # label(shape_open) # label(axiom). [clausify(30)]. % 0.74/1.08 51 in_open(A,B,C) | -less(B,A) | -less(A,C) # label(shape_open) # label(axiom). [clausify(30)]. % 0.74/1.08 52 in_box2(A,B,C,D,E,F) | -in_closed(A,C,D) | -in_closed(B,E,F) # label(in_box2) # label(axiom). [clausify(22)]. % 0.74/1.08 53 -in_box2(A,B,C,D,E,F) | in_closed(A,C,D) # label(in_box2) # label(axiom). [clausify(22)]. % 0.74/1.08 54 -in_box2(A,B,C,D,E,F) | in_closed(B,E,F) # label(in_box2) # label(axiom). [clausify(22)]. % 0.74/1.08 55 in_box3(A,B,C,D,E,F,V6,V7,V8) | -in_closed(A,D,E) | -in_closed(B,F,V6) | -in_closed(C,V7,V8) # label(in_box3) # label(axiom). [clausify(23)]. % 0.74/1.08 56 -in_box3(A,B,C,D,E,F,V6,V7,V8) | in_closed(A,D,E) # label(in_box3) # label(axiom). [clausify(23)]. % 0.74/1.08 57 -in_box3(A,B,C,D,E,F,V6,V7,V8) | in_closed(B,F,V6) # label(in_box3) # label(axiom). [clausify(23)]. % 0.74/1.08 58 -in_box3(A,B,C,D,E,F,V6,V7,V8) | in_closed(C,V7,V8) # label(in_box3) # label(axiom). [clausify(23)]. % 0.74/1.08 59 -box2_conflict(A,B,C,D,E,F,V6,V7) | axis_conflict(A,B,E,F) | axis_conflict(C,D,V6,V7) # label(box2_conflict) # label(axiom). [clausify(25)]. % 0.74/1.08 60 box2_conflict(A,B,C,D,E,F,V6,V7) | -axis_conflict(A,B,E,F) # label(box2_conflict) # label(axiom). [clausify(25)]. % 0.74/1.08 61 box2_conflict(A,B,C,D,E,F,V6,V7) | -axis_conflict(C,D,V6,V7) # label(box2_conflict) # label(axiom). [clausify(25)]. % 0.74/1.08 62 -axis_conflict(A,B,C,D) | -in_closed(E,A,B) | -in_closed(E,C,D) # label(axis_conflict_def) # label(axiom). [clausify(14)]. % 0.74/1.08 63 axis_conflict(A,B,C,D) | in_closed(f1(A,B,C,D),A,B) # label(axis_conflict_def) # label(axiom). [clausify(14)]. % 0.74/1.08 64 axis_conflict(A,B,C,D) | in_closed(f1(A,B,C,D),C,D) # label(axis_conflict_def) # label(axiom). [clausify(14)]. % 0.74/1.08 Derived: -in_closed(A,B,C) | -in_closed(A,D,E) | in_closed(f1(B,C,D,E),B,C). [resolve(62,a,63,a)]. % 0.74/1.08 Derived: -in_closed(A,B,C) | -in_closed(A,D,E) | in_closed(f1(B,C,D,E),D,E). [resolve(62,a,64,a)]. % 0.74/1.08 % 0.74/1.08 ============================== end predicate elimination ============= % 0.74/1.08 % 0.74/1.08 Auto_denials: (non-Horn, no changes). % 0.74/1.08 % 0.74/1.08 Term ordering decisions: % 0.74/1.08 Function symbol KB weights: conflict=1. unknown=1. compatible=1. v400=1. v600=1. v0=1. v800=1. box_verdict=1. f1=1. f2=1. f3=1. % 0.74/1.08 % 0.74/1.08 ============================== end of process initial clauses ======== % 0.74/1.08 % 0.74/1.08 ============================== CLAUSES FOR SEARCH ==================== % 0.74/1.08 % 0.74/1.08 ============================== end of clauses for search ============= % 0.74/1.08 % 0.74/1.08 ============================== SEARCH ================================ % 0.74/1.08 % 0.74/1.08 % Starting search at 0.02 seconds. % 0.74/1.08 % 0.74/1.08 ============================== PROOF ================================= % 0.74/1.08 % SZS status Theorem % 0.74/1.08 % SZS output start Refutation % 0.74/1.08 % 0.74/1.08 % Proof 1 at 0.06 (+ 0.00) seconds. % 0.74/1.08 % Length of proof is 23. % 0.74/1.08 % Level of proof is 6. % 0.74/1.08 % Maximum clause weight is 19.000. % 0.74/1.08 % Given clauses 188. % 0.74/1.08 % 0.74/1.08 4 (all X all Y (leq(X,Y) <-> less(X,Y) | X = Y)) # label(leq_def) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.08 10 (all X all A all B (in_closed(X,A,B) <-> leq(A,X) & leq(X,B))) # label(in_closed) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.08 15 (all I1lo all I1hi all I2lo all I2hi (axis_compatible(I1lo,I1hi,I2lo,I2hi) <-> (exists X (in_closed(X,I1lo,I1hi) & in_closed(X,I2lo,I2hi))))) # label(axis_compatible_def) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.08 24 (all A1 all B1 all A2 all B2 all C1 all D1 all C2 all D2 (box2_compatible(A1,B1,A2,B2,C1,D1,C2,D2) <-> axis_compatible(A1,B1,C1,D1) & axis_compatible(A2,B2,C2,D2))) # label(box2_overlap) # label(axiom) # label(non_clause). [assumption]. % 0.74/1.08 69 less(v0,v600) # label(ord_v0_v600) # label(axiom). [assumption]. % 0.74/1.08 70 less(v400,v600) # label(ord_v400_v600) # label(axiom). [assumption]. % 0.74/1.08 72 less(v600,v800) # label(ord_v600_v800) # label(axiom). [assumption]. % 0.74/1.08 80 -box2_compatible(v0,v600,v0,v600,v400,v800,v400,v800) # label(odrl624) # label(negated_conjecture). [assumption]. % 0.74/1.08 81 leq(A,B) | -less(A,B) # label(leq_def) # label(axiom). [clausify(4)]. % 0.74/1.08 82 leq(A,B) | B != A # label(leq_def) # label(axiom). [clausify(4)]. % 0.74/1.08 93 in_closed(A,B,C) | -leq(B,A) | -leq(A,C) # label(in_closed) # label(axiom). [clausify(10)]. % 0.74/1.08 102 axis_compatible(A,B,C,D) | -in_closed(E,A,B) | -in_closed(E,C,D) # label(axis_compatible_def) # label(axiom). [clausify(15)]. % 0.74/1.08 112 box2_compatible(A,B,C,D,E,F,V6,V7) | -axis_compatible(A,B,E,F) | -axis_compatible(C,D,V6,V7) # label(box2_overlap) # label(axiom). [clausify(24)]. % 0.74/1.08 123 box2_compatible(A,B,A,B,C,D,C,D) | -axis_compatible(A,B,C,D). [factor(112,b,c)]. % 0.74/1.08 127 leq(v600,v800). [resolve(81,b,72,a)]. % 0.74/1.08 129 leq(v400,v600). [resolve(81,b,70,a)]. % 0.74/1.08 130 leq(v0,v600). [resolve(81,b,69,a)]. % 0.74/1.08 132 leq(A,A). [xx_res(82,b)]. % 0.74/1.08 199 -axis_compatible(v0,v600,v400,v800). [ur(123,a,80,a)]. % 0.74/1.08 207 in_closed(v600,A,v800) | -leq(A,v600). [resolve(127,a,93,c)]. % 0.74/1.08 372 in_closed(v600,v400,v800). [resolve(207,b,129,a)]. % 0.74/1.08 418 -in_closed(v600,v0,v600). [ur(102,a,199,a,c,372,a)]. % 0.74/1.08 427 $F. [ur(93,a,418,a,c,132,a),unit_del(a,130)]. % 0.74/1.08 % 0.74/1.08 % SZS output end Refutation % 0.74/1.08 ============================== end of proof ========================== % 0.74/1.08 % 0.74/1.08 ============================== STATISTICS ============================ % 0.74/1.08 % 0.74/1.08 Given=188. Generated=994. Kept=354. proofs=1. % 0.74/1.08 Usable=187. Sos=159. Demods=7. Limbo=4, Disabled=91. Hints=0. % 0.74/1.08 Megabytes=0.35. % 0.74/1.08 User_CPU=0.06, System_CPU=0.00, Wall_clock=0. % 0.74/1.08 % 0.74/1.08 ============================== end of statistics ===================== % 0.74/1.08 % 0.74/1.08 ============================== end of search ========================= % 0.74/1.08 % 0.74/1.08 THEOREM PROVED % 0.74/1.08 % SZS status Theorem % 0.74/1.08 % 0.74/1.08 Exiting with 1 proof. % 0.74/1.08 % 0.74/1.08 Process 15121 exit (max_proofs) Tue Apr 28 18:58:03 2026 % 0.74/1.08 Prover9 interrupted %------------------------------------------------------------------------------