TSTP Solution File: NUN082+2 by Otter---3.3
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Otter---3.3
% Problem : NUN082+2 : TPTP v8.1.0. Released v7.3.0.
% Transfm : none
% Format : tptp:raw
% Command : otter-tptp-script %s
% Computer : n027.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 Jul 27 13:10:32 EDT 2022
% Result : Theorem 1.82s 2.06s
% Output : Refutation 1.82s
% Verified :
% SZS Type : Refutation
% Derivation depth : 9
% Number of leaves : 20
% Syntax : Number of clauses : 42 ( 34 unt; 0 nHn; 11 RR)
% Number of literals : 55 ( 22 equ; 15 neg)
% Maximal clause size : 5 ( 1 avg)
% Maximal term depth : 2 ( 1 avg)
% Number of predicates : 6 ( 4 usr; 1 prp; 0-3 aty)
% Number of functors : 13 ( 13 usr; 1 con; 0-2 aty)
% Number of variables : 61 ( 13 sgn)
% Comments :
%------------------------------------------------------------------------------
cnf(1,axiom,
( ~ r1(A)
| A = dollar_c1 ),
file('NUN082+2.p',unknown),
[] ).
cnf(2,axiom,
( A != dollar_c1
| r1(A) ),
file('NUN082+2.p',unknown),
[] ).
cnf(3,axiom,
( ~ r2(A,B)
| B = dollar_f1(A) ),
file('NUN082+2.p',unknown),
[] ).
cnf(4,axiom,
( A != dollar_f1(B)
| r2(B,A) ),
file('NUN082+2.p',unknown),
[] ).
cnf(5,axiom,
( ~ r3(A,B,C)
| C = dollar_f2(A,B) ),
file('NUN082+2.p',unknown),
[] ).
cnf(7,axiom,
( ~ r4(A,B,C)
| C = dollar_f3(A,B) ),
file('NUN082+2.p',unknown),
[] ).
cnf(11,axiom,
( ~ r4(A,B,C)
| ~ r1(D)
| ~ r2(D,B)
| ~ r1(E)
| C != E ),
file('NUN082+2.p',unknown),
[] ).
cnf(13,plain,
( ~ r4(A,B,C)
| ~ r1(D)
| ~ r2(D,B)
| C != D ),
inference(factor,[status(thm)],[11]),
[iquote('factor,11.2.4')] ).
cnf(14,axiom,
A = A,
file('NUN082+2.p',unknown),
[] ).
cnf(23,axiom,
r2(A,dollar_f8(B,A)),
file('NUN082+2.p',unknown),
[] ).
cnf(24,axiom,
r4(A,dollar_f8(A,B),dollar_f9(A,B)),
file('NUN082+2.p',unknown),
[] ).
cnf(26,axiom,
dollar_f9(A,B) = dollar_f11(A,B),
file('NUN082+2.p',unknown),
[] ).
cnf(27,axiom,
r3(dollar_f10(A,B),A,dollar_f11(A,B)),
file('NUN082+2.p',unknown),
[] ).
cnf(28,axiom,
r4(A,B,dollar_f10(A,B)),
file('NUN082+2.p',unknown),
[] ).
cnf(29,axiom,
r1(dollar_f12(A)),
file('NUN082+2.p',unknown),
[] ).
cnf(30,axiom,
r3(A,dollar_f12(A),dollar_f13(A)),
file('NUN082+2.p',unknown),
[] ).
cnf(32,axiom,
dollar_f13(A) = A,
file('NUN082+2.p',unknown),
[] ).
cnf(33,axiom,
r1(dollar_f14(A)),
file('NUN082+2.p',unknown),
[] ).
cnf(34,axiom,
r4(A,dollar_f14(A),dollar_f16(A)),
file('NUN082+2.p',unknown),
[] ).
cnf(35,axiom,
r1(dollar_f15(A)),
file('NUN082+2.p',unknown),
[] ).
cnf(37,axiom,
dollar_f16(A) = dollar_f15(A),
file('NUN082+2.p',unknown),
[] ).
cnf(45,plain,
r4(A,dollar_f8(A,B),dollar_f11(A,B)),
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[24]),26]),
[iquote('back_demod,24,demod,26')] ).
cnf(46,plain,
r3(A,dollar_f12(A),A),
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[30]),32]),
[iquote('back_demod,30,demod,32')] ).
cnf(47,plain,
r4(A,dollar_f14(A),dollar_f15(A)),
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[34]),37]),
[iquote('back_demod,34,demod,37')] ).
cnf(50,plain,
r2(A,dollar_f1(A)),
inference(hyper,[status(thm)],[14,4]),
[iquote('hyper,14,4')] ).
cnf(51,plain,
r1(dollar_c1),
inference(hyper,[status(thm)],[14,2]),
[iquote('hyper,14,2')] ).
cnf(57,plain,
dollar_f12(A) = dollar_c1,
inference(hyper,[status(thm)],[29,1]),
[iquote('hyper,29,1')] ).
cnf(58,plain,
r3(A,dollar_c1,A),
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[46]),57]),
[iquote('back_demod,46,demod,57')] ).
cnf(60,plain,
dollar_f14(A) = dollar_c1,
inference(hyper,[status(thm)],[33,1]),
[iquote('hyper,33,1')] ).
cnf(61,plain,
r4(A,dollar_c1,dollar_f15(A)),
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[47]),60]),
[iquote('back_demod,47,demod,60')] ).
cnf(63,plain,
dollar_f15(A) = dollar_c1,
inference(hyper,[status(thm)],[35,1]),
[iquote('hyper,35,1')] ).
cnf(64,plain,
r4(A,dollar_c1,dollar_c1),
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[61]),63]),
[iquote('back_demod,61,demod,63')] ).
cnf(84,plain,
dollar_f2(A,dollar_c1) = A,
inference(flip,[status(thm),theory(equality)],[inference(hyper,[status(thm)],[58,5])]),
[iquote('hyper,58,5,flip.1')] ).
cnf(95,plain,
dollar_f3(A,dollar_c1) = dollar_c1,
inference(flip,[status(thm),theory(equality)],[inference(hyper,[status(thm)],[64,7])]),
[iquote('hyper,64,7,flip.1')] ).
cnf(108,plain,
dollar_f8(A,B) = dollar_f1(B),
inference(hyper,[status(thm)],[23,3]),
[iquote('hyper,23,3')] ).
cnf(134,plain,
dollar_f3(A,B) = dollar_f10(A,B),
inference(flip,[status(thm),theory(equality)],[inference(hyper,[status(thm)],[28,7])]),
[iquote('hyper,28,7,flip.1')] ).
cnf(145,plain,
dollar_f10(A,dollar_c1) = dollar_c1,
inference(demod,[status(thm),theory(equality)],[inference(back_demod,[status(thm)],[95]),134]),
[iquote('back_demod,95,demod,134')] ).
cnf(173,plain,
r3(dollar_c1,A,dollar_f11(A,dollar_c1)),
inference(para_into,[status(thm),theory(equality)],[27,145]),
[iquote('para_into,27.1.1,145.1.1')] ).
cnf(246,plain,
dollar_f2(dollar_c1,A) = dollar_f11(A,dollar_c1),
inference(flip,[status(thm),theory(equality)],[inference(hyper,[status(thm)],[173,5])]),
[iquote('hyper,173,5,flip.1')] ).
cnf(412,plain,
r4(A,dollar_f1(B),dollar_f11(A,B)),
inference(para_into,[status(thm),theory(equality)],[45,108]),
[iquote('para_into,45.1.2,108.1.1')] ).
cnf(498,plain,
dollar_f11(dollar_c1,dollar_c1) = dollar_c1,
inference(flip,[status(thm),theory(equality)],[inference(para_into,[status(thm),theory(equality)],[246,84])]),
[iquote('para_into,246.1.1,84.1.1,flip.1')] ).
cnf(833,plain,
$false,
inference(hyper,[status(thm)],[412,13,51,50,498]),
[iquote('hyper,412,13,51,50,498')] ).
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.06/0.11 % Problem : NUN082+2 : TPTP v8.1.0. Released v7.3.0.
% 0.06/0.12 % Command : otter-tptp-script %s
% 0.13/0.33 % Computer : n027.cluster.edu
% 0.13/0.33 % Model : x86_64 x86_64
% 0.13/0.33 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.33 % Memory : 8042.1875MB
% 0.13/0.33 % OS : Linux 3.10.0-693.el7.x86_64
% 0.13/0.33 % CPULimit : 300
% 0.13/0.33 % WCLimit : 300
% 0.13/0.33 % DateTime : Wed Jul 27 02:51:51 EDT 2022
% 0.13/0.33 % CPUTime :
% 1.79/1.99 ----- Otter 3.3f, August 2004 -----
% 1.79/1.99 The process was started by sandbox on n027.cluster.edu,
% 1.79/1.99 Wed Jul 27 02:51:51 2022
% 1.79/1.99 The command was "./otter". The process ID is 27376.
% 1.79/1.99
% 1.79/1.99 set(prolog_style_variables).
% 1.79/1.99 set(auto).
% 1.79/1.99 dependent: set(auto1).
% 1.79/1.99 dependent: set(process_input).
% 1.79/1.99 dependent: clear(print_kept).
% 1.79/1.99 dependent: clear(print_new_demod).
% 1.79/1.99 dependent: clear(print_back_demod).
% 1.79/1.99 dependent: clear(print_back_sub).
% 1.79/1.99 dependent: set(control_memory).
% 1.79/1.99 dependent: assign(max_mem, 12000).
% 1.79/1.99 dependent: assign(pick_given_ratio, 4).
% 1.79/1.99 dependent: assign(stats_level, 1).
% 1.79/1.99 dependent: assign(max_seconds, 10800).
% 1.79/1.99 clear(print_given).
% 1.79/1.99
% 1.79/1.99 formula_list(usable).
% 1.79/1.99 all A (A=A).
% 1.79/1.99 exists Y24 all X19 (-r1(X19)&X19!=Y24|r1(X19)&X19=Y24).
% 1.79/1.99 all X11 exists Y21 all X12 (-r2(X11,X12)&X12!=Y21|r2(X11,X12)&X12=Y21).
% 1.79/1.99 all X13 X14 exists Y22 all X15 (-r3(X13,X14,X15)&X15!=Y22|r3(X13,X14,X15)&X15=Y22).
% 1.79/1.99 all X16 X17 exists Y23 all X18 (-r4(X16,X17,X18)&X18!=Y23|r4(X16,X17,X18)&X18=Y23).
% 1.79/1.99 all X1 X8 exists Y4 ((exists Y5 ((exists Y15 (r2(X8,Y15)&r3(X1,Y15,Y5)))&Y5=Y4))& (exists Y7 (r2(Y7,Y4)&r3(X1,X8,Y7)))).
% 1.79/1.99 all X2 X9 exists Y2 ((exists Y3 ((exists Y14 (r2(X9,Y14)&r4(X2,Y14,Y3)))&Y3=Y2))& (exists Y6 (r3(Y6,X2,Y2)&r4(X2,X9,Y6)))).
% 1.79/1.99 all X3 X10 ((all Y12 ((all Y13 (-r2(X3,Y13)|Y13!=Y12))| -r2(X10,Y12)))|X3=X10).
% 1.79/1.99 all X4 exists Y9 ((exists Y16 (r1(Y16)&r3(X4,Y16,Y9)))&Y9=X4).
% 1.79/1.99 all X5 exists Y8 ((exists Y17 (r1(Y17)&r4(X5,Y17,Y8)))& (exists Y18 (r1(Y18)&Y8=Y18))).
% 1.79/1.99 all X6 ((exists Y19 (r1(Y19)&X6=Y19))| (exists Y1 Y11 (r2(Y1,Y11)&X6=Y11))).
% 1.79/1.99 all X7 Y10 ((all Y20 (-r1(Y20)|Y20!=Y10))| -r2(X7,Y10)).
% 1.79/1.99 -(exists Y1 Y2 ((exists Y3 (r4(Y1,Y3,Y2)& (exists Y4 (r1(Y4)&r2(Y4,Y3)))))& (exists Y5 (r1(Y5)&Y2=Y5)))).
% 1.79/1.99 end_of_list.
% 1.79/1.99
% 1.79/1.99 -------> usable clausifies to:
% 1.79/1.99
% 1.79/1.99 list(usable).
% 1.79/1.99 0 [] A=A.
% 1.79/1.99 0 [] -r1(X19)|X19=$c1.
% 1.79/1.99 0 [] X19!=$c1|r1(X19).
% 1.79/1.99 0 [] -r2(X11,X12)|X12=$f1(X11).
% 1.79/1.99 0 [] X12!=$f1(X11)|r2(X11,X12).
% 1.79/1.99 0 [] -r3(X13,X14,X15)|X15=$f2(X13,X14).
% 1.79/1.99 0 [] X15!=$f2(X13,X14)|r3(X13,X14,X15).
% 1.79/1.99 0 [] -r4(X16,X17,X18)|X18=$f3(X16,X17).
% 1.79/1.99 0 [] X18!=$f3(X16,X17)|r4(X16,X17,X18).
% 1.79/1.99 0 [] r2(X8,$f4(X1,X8)).
% 1.79/1.99 0 [] r3(X1,$f4(X1,X8),$f5(X1,X8)).
% 1.79/1.99 0 [] $f5(X1,X8)=$f7(X1,X8).
% 1.79/1.99 0 [] r2($f6(X1,X8),$f7(X1,X8)).
% 1.79/1.99 0 [] r3(X1,X8,$f6(X1,X8)).
% 1.79/1.99 0 [] r2(X9,$f8(X2,X9)).
% 1.79/1.99 0 [] r4(X2,$f8(X2,X9),$f9(X2,X9)).
% 1.79/1.99 0 [] $f9(X2,X9)=$f11(X2,X9).
% 1.79/1.99 0 [] r3($f10(X2,X9),X2,$f11(X2,X9)).
% 1.79/1.99 0 [] r4(X2,X9,$f10(X2,X9)).
% 1.79/1.99 0 [] -r2(X3,Y13)|Y13!=Y12| -r2(X10,Y12)|X3=X10.
% 1.79/1.99 0 [] r1($f12(X4)).
% 1.79/1.99 0 [] r3(X4,$f12(X4),$f13(X4)).
% 1.79/1.99 0 [] $f13(X4)=X4.
% 1.79/1.99 0 [] r1($f14(X5)).
% 1.79/1.99 0 [] r4(X5,$f14(X5),$f16(X5)).
% 1.79/1.99 0 [] r1($f15(X5)).
% 1.79/1.99 0 [] $f16(X5)=$f15(X5).
% 1.79/1.99 0 [] r1($f17(X6))|r2($f19(X6),$f18(X6)).
% 1.79/1.99 0 [] r1($f17(X6))|X6=$f18(X6).
% 1.79/1.99 0 [] X6=$f17(X6)|r2($f19(X6),$f18(X6)).
% 1.79/1.99 0 [] X6=$f17(X6)|X6=$f18(X6).
% 1.79/1.99 0 [] -r1(Y20)|Y20!=Y10| -r2(X7,Y10).
% 1.79/1.99 0 [] -r4(Y1,Y3,Y2)| -r1(Y4)| -r2(Y4,Y3)| -r1(Y5)|Y2!=Y5.
% 1.79/1.99 end_of_list.
% 1.79/1.99
% 1.79/1.99 SCAN INPUT: prop=0, horn=0, equality=1, symmetry=0, max_lits=5.
% 1.79/1.99
% 1.79/1.99 This ia a non-Horn set with equality. The strategy will be
% 1.79/1.99 Knuth-Bendix, ordered hyper_res, factoring, and unit
% 1.79/1.99 deletion, with positive clauses in sos and nonpositive
% 1.79/1.99 clauses in usable.
% 1.79/1.99
% 1.79/1.99 dependent: set(knuth_bendix).
% 1.79/1.99 dependent: set(anl_eq).
% 1.79/1.99 dependent: set(para_from).
% 1.79/1.99 dependent: set(para_into).
% 1.79/1.99 dependent: clear(para_from_right).
% 1.79/1.99 dependent: clear(para_into_right).
% 1.79/1.99 dependent: set(para_from_vars).
% 1.79/1.99 dependent: set(eq_units_both_ways).
% 1.79/1.99 dependent: set(dynamic_demod_all).
% 1.79/1.99 dependent: set(dynamic_demod).
% 1.79/1.99 dependent: set(order_eq).
% 1.79/1.99 dependent: set(back_demod).
% 1.79/1.99 dependent: set(lrpo).
% 1.79/1.99 dependent: set(hyper_res).
% 1.79/1.99 dependent: set(unit_deletion).
% 1.79/1.99 dependent: set(factor).
% 1.79/1.99
% 1.79/1.99 ------------> process usable:
% 1.79/1.99 ** KEPT (pick-wt=5): 1 [] -r1(A)|A=$c1.
% 1.79/1.99 ** KEPT (pick-wt=5): 2 [] A!=$c1|r1(A).
% 1.79/1.99 ** KEPT (pick-wt=7): 3 [] -r2(A,B)|B=$f1(A).
% 1.79/1.99 ** KEPT (pick-wt=7): 4 [] A!=$f1(B)|r2(B,A).
% 1.79/1.99 ** KEPT (pick-wt=9): 5 [] -r3(A,B,C)|C=$f2(A,B).
% 1.79/1.99 ** KEPT (pick-wt=9): 6 [] A!=$f2(B,C)|r3(B,C,A).
% 1.79/1.99 ** KEPT (pick-wt=9): 7 [] -r4(A,B,C)|C=$f3(A,B).
% 1.79/1.99 ** KEPT (pick-wt=9): 8 [] A!=$f3(B,C)|r4(B,C,A).
% 1.79/1.99 ** KEPT (pick-wt=12): 9 [] -r2(A,B)|B!=C| -r2(D,C)|A=D.
% 1.79/1.99 ** KEPT (pick-wt=8): 10 [] -r1(A)|A!=B| -r2(C,B).
% 1.79/1.99 ** KEPT (pick-wt=14): 11 [] -r4(A,B,C)| -r1(D)| -r2(D,B)| -r1(E)|C!=E.
% 1.82/2.06
% 1.82/2.06 ------------> process sos:
% 1.82/2.06 ** KEPT (pick-wt=3): 14 [] A=A.
% 1.82/2.06 ** KEPT (pick-wt=5): 15 [] r2(A,$f4(B,A)).
% 1.82/2.06 ** KEPT (pick-wt=8): 16 [] r3(A,$f4(A,B),$f5(A,B)).
% 1.82/2.06 ** KEPT (pick-wt=7): 18 [copy,17,flip.1] $f7(A,B)=$f5(A,B).
% 1.82/2.06 ---> New Demodulator: 19 [new_demod,18] $f7(A,B)=$f5(A,B).
% 1.82/2.06 ** KEPT (pick-wt=7): 21 [copy,20,demod,19] r2($f6(A,B),$f5(A,B)).
% 1.82/2.06 ** KEPT (pick-wt=6): 22 [] r3(A,B,$f6(A,B)).
% 1.82/2.06 ** KEPT (pick-wt=5): 23 [] r2(A,$f8(B,A)).
% 1.82/2.06 ** KEPT (pick-wt=8): 24 [] r4(A,$f8(A,B),$f9(A,B)).
% 1.82/2.06 ** KEPT (pick-wt=7): 25 [] $f9(A,B)=$f11(A,B).
% 1.82/2.06 ---> New Demodulator: 26 [new_demod,25] $f9(A,B)=$f11(A,B).
% 1.82/2.06 ** KEPT (pick-wt=8): 27 [] r3($f10(A,B),A,$f11(A,B)).
% 1.82/2.06 ** KEPT (pick-wt=6): 28 [] r4(A,B,$f10(A,B)).
% 1.82/2.06 ** KEPT (pick-wt=3): 29 [] r1($f12(A)).
% 1.82/2.06 ** KEPT (pick-wt=6): 30 [] r3(A,$f12(A),$f13(A)).
% 1.82/2.06 ** KEPT (pick-wt=4): 31 [] $f13(A)=A.
% 1.82/2.06 ---> New Demodulator: 32 [new_demod,31] $f13(A)=A.
% 1.82/2.06 ** KEPT (pick-wt=3): 33 [] r1($f14(A)).
% 1.82/2.06 ** KEPT (pick-wt=6): 34 [] r4(A,$f14(A),$f16(A)).
% 1.82/2.06 ** KEPT (pick-wt=3): 35 [] r1($f15(A)).
% 1.82/2.06 ** KEPT (pick-wt=5): 36 [] $f16(A)=$f15(A).
% 1.82/2.06 ---> New Demodulator: 37 [new_demod,36] $f16(A)=$f15(A).
% 1.82/2.06 ** KEPT (pick-wt=8): 38 [] r1($f17(A))|r2($f19(A),$f18(A)).
% 1.82/2.06 ** KEPT (pick-wt=7): 40 [copy,39,flip.2] r1($f17(A))|$f18(A)=A.
% 1.82/2.06 ** KEPT (pick-wt=9): 42 [copy,41,flip.1] $f17(A)=A|r2($f19(A),$f18(A)).
% 1.82/2.06 ** KEPT (pick-wt=8): 44 [copy,43,flip.1,flip.2] $f17(A)=A|$f18(A)=A.
% 1.82/2.06 Following clause subsumed by 14 during input processing: 0 [copy,14,flip.1] A=A.
% 1.82/2.06 14 back subsumes 12.
% 1.82/2.06 >>>> Starting back demodulation with 19.
% 1.82/2.06 >>>> Starting back demodulation with 26.
% 1.82/2.06 >> back demodulating 24 with 26.
% 1.82/2.06 >>>> Starting back demodulation with 32.
% 1.82/2.06 >> back demodulating 30 with 32.
% 1.82/2.06 >>>> Starting back demodulation with 37.
% 1.82/2.06 >> back demodulating 34 with 37.
% 1.82/2.06
% 1.82/2.06 ======= end of input processing =======
% 1.82/2.06
% 1.82/2.06 =========== start of search ===========
% 1.82/2.06
% 1.82/2.06 -------- PROOF --------
% 1.82/2.06
% 1.82/2.06 -----> EMPTY CLAUSE at 0.08 sec ----> 833 [hyper,412,13,51,50,498] $F.
% 1.82/2.06
% 1.82/2.06 Length of proof is 21. Level of proof is 8.
% 1.82/2.06
% 1.82/2.06 ---------------- PROOF ----------------
% 1.82/2.06 % SZS status Theorem
% 1.82/2.06 % SZS output start Refutation
% See solution above
% 1.82/2.06 ------------ end of proof -------------
% 1.82/2.06
% 1.82/2.06
% 1.82/2.06 Search stopped by max_proofs option.
% 1.82/2.06
% 1.82/2.06
% 1.82/2.06 Search stopped by max_proofs option.
% 1.82/2.06
% 1.82/2.06 ============ end of search ============
% 1.82/2.06
% 1.82/2.06 -------------- statistics -------------
% 1.82/2.06 clauses given 80
% 1.82/2.06 clauses generated 1914
% 1.82/2.06 clauses kept 796
% 1.82/2.06 clauses forward subsumed 1215
% 1.82/2.06 clauses back subsumed 26
% 1.82/2.06 Kbytes malloced 2929
% 1.82/2.06
% 1.82/2.06 ----------- times (seconds) -----------
% 1.82/2.06 user CPU time 0.08 (0 hr, 0 min, 0 sec)
% 1.82/2.06 system CPU time 0.00 (0 hr, 0 min, 0 sec)
% 1.82/2.06 wall-clock time 2 (0 hr, 0 min, 2 sec)
% 1.82/2.06
% 1.82/2.06 That finishes the proof of the theorem.
% 1.82/2.06
% 1.82/2.06 Process 27376 finished Wed Jul 27 02:51:53 2022
% 1.82/2.07 Otter interrupted
% 1.82/2.07 PROOF FOUND
%------------------------------------------------------------------------------