TSTP Solution File: SWC331+1 by Princess---230619
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Princess---230619
% Problem : SWC331+1 : TPTP v8.1.2. Released v2.4.0.
% Transfm : none
% Format : tptp
% Command : princess -inputFormat=tptp +threads -portfolio=casc +printProof -timeoutSec=%d %s
% Computer : n031.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 : Thu Aug 31 20:50:52 EDT 2023
% Result : Theorem 59.39s 8.59s
% Output : Proof 74.02s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12 % Problem : SWC331+1 : TPTP v8.1.2. Released v2.4.0.
% 0.11/0.13 % Command : princess -inputFormat=tptp +threads -portfolio=casc +printProof -timeoutSec=%d %s
% 0.13/0.34 % Computer : n031.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 : Mon Aug 28 16:19:55 EDT 2023
% 0.13/0.34 % CPUTime :
% 0.19/0.59 ________ _____
% 0.19/0.59 ___ __ \_________(_)________________________________
% 0.19/0.59 __ /_/ /_ ___/_ /__ __ \ ___/ _ \_ ___/_ ___/
% 0.19/0.59 _ ____/_ / _ / _ / / / /__ / __/(__ )_(__ )
% 0.19/0.59 /_/ /_/ /_/ /_/ /_/\___/ \___//____/ /____/
% 0.19/0.59
% 0.19/0.59 A Theorem Prover for First-Order Logic modulo Linear Integer Arithmetic
% 0.19/0.59 (2023-06-19)
% 0.19/0.59
% 0.19/0.59 (c) Philipp Rümmer, 2009-2023
% 0.19/0.59 Contributors: Peter Backeman, Peter Baumgartner, Angelo Brillout, Zafer Esen,
% 0.19/0.59 Amanda Stjerna.
% 0.19/0.59 Free software under BSD-3-Clause.
% 0.19/0.59
% 0.19/0.59 For more information, visit http://www.philipp.ruemmer.org/princess.shtml
% 0.19/0.59
% 0.19/0.59 Loading /export/starexec/sandbox/benchmark/theBenchmark.p ...
% 0.19/0.60 Running up to 7 provers in parallel.
% 0.19/0.62 Prover 2: Options: +triggersInConjecture +genTotalityAxioms -tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allMinimalAndEmpty -realRatSaturationRounds=1 -ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=-1065072994
% 0.19/0.62 Prover 0: Options: +triggersInConjecture +genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=0 -ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=1042961893
% 0.19/0.62 Prover 1: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-1571432423
% 0.19/0.62 Prover 3: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=1922548996
% 0.19/0.62 Prover 4: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=1868514696
% 0.19/0.62 Prover 5: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=none +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allMaximal -realRatSaturationRounds=1 -ignoreQuantifiers -constructProofs=never -generateTriggers=complete -randomSeed=1259561288
% 0.19/0.62 Prover 6: Options: -triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=none +reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximalOutermost -realRatSaturationRounds=0 -ignoreQuantifiers -constructProofs=never -generateTriggers=all -randomSeed=-1399714365
% 5.09/1.47 Prover 4: Preprocessing ...
% 5.09/1.49 Prover 1: Preprocessing ...
% 5.34/1.53 Prover 0: Preprocessing ...
% 5.34/1.53 Prover 5: Preprocessing ...
% 5.34/1.53 Prover 6: Preprocessing ...
% 5.34/1.53 Prover 3: Preprocessing ...
% 5.34/1.53 Prover 2: Preprocessing ...
% 13.16/2.70 Prover 2: Proving ...
% 14.56/2.81 Prover 1: Constructing countermodel ...
% 15.16/2.84 Prover 5: Constructing countermodel ...
% 15.62/2.91 Prover 6: Proving ...
% 15.62/2.95 Prover 3: Constructing countermodel ...
% 22.92/3.87 Prover 4: Constructing countermodel ...
% 26.62/4.34 Prover 0: Proving ...
% 59.39/8.59 Prover 5: proved (7970ms)
% 59.39/8.59
% 59.39/8.59 % SZS status Theorem for /export/starexec/sandbox/benchmark/theBenchmark.p
% 59.39/8.59
% 59.39/8.59 Prover 3: stopped
% 59.39/8.59 Prover 0: stopped
% 59.39/8.59 Prover 2: stopped
% 59.39/8.59 Prover 8: Options: +triggersInConjecture +genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-200781089
% 59.39/8.59 Prover 7: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-236303470
% 59.39/8.59 Prover 10: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=919308125
% 59.39/8.59 Prover 11: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-1509710984
% 59.39/8.60 Prover 6: stopped
% 59.39/8.60 Prover 13: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=complete -randomSeed=1138197443
% 60.93/8.84 Prover 13: Preprocessing ...
% 61.36/8.84 Prover 10: Preprocessing ...
% 61.36/8.85 Prover 7: Preprocessing ...
% 61.47/8.85 Prover 11: Preprocessing ...
% 61.47/8.88 Prover 8: Preprocessing ...
% 63.25/9.12 Prover 10: Constructing countermodel ...
% 63.68/9.14 Prover 7: Constructing countermodel ...
% 64.26/9.22 Prover 13: Constructing countermodel ...
% 64.26/9.33 Prover 8: Warning: ignoring some quantifiers
% 64.26/9.35 Prover 8: Constructing countermodel ...
% 69.87/9.97 Prover 11: Constructing countermodel ...
% 74.02/10.50 Prover 10: Found proof (size 24)
% 74.02/10.50 Prover 10: proved (1906ms)
% 74.02/10.50 Prover 13: stopped
% 74.02/10.50 Prover 7: stopped
% 74.02/10.50 Prover 8: stopped
% 74.02/10.50 Prover 1: stopped
% 74.02/10.50 Prover 11: stopped
% 74.02/10.50 Prover 4: stopped
% 74.02/10.50
% 74.02/10.50 % SZS status Theorem for /export/starexec/sandbox/benchmark/theBenchmark.p
% 74.02/10.50
% 74.02/10.50 % SZS output start Proof for theBenchmark
% 74.02/10.51 Assumptions after simplification:
% 74.02/10.51 ---------------------------------
% 74.02/10.51
% 74.02/10.51 (ax17)
% 74.02/10.51 $i(nil) & ssList(nil)
% 74.02/10.51
% 74.02/10.51 (ax49)
% 74.02/10.52 ! [v0: $i] : ( ~ $i(v0) | ~ ssList(v0) | rearsegP(v0, v0))
% 74.02/10.52
% 74.02/10.52 (ax5)
% 74.02/10.54 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ( ~ (app(v1, v2) = v0) | ~ $i(v2) |
% 74.02/10.54 ~ $i(v1) | ~ $i(v0) | ~ ssList(v2) | ~ ssList(v1) | ~ ssList(v0) |
% 74.02/10.54 frontsegP(v0, v1)) & ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~
% 74.02/10.54 frontsegP(v0, v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v1,
% 74.02/10.54 v2) = v0 & $i(v2) & ssList(v2)))
% 74.02/10.54
% 74.02/10.54 (ax58)
% 74.02/10.54 $i(nil) & ! [v0: $i] : (v0 = nil | ~ $i(v0) | ~ segmentP(nil, v0) | ~
% 74.02/10.54 ssList(v0)) & ( ~ ssList(nil) | segmentP(nil, nil))
% 74.02/10.54
% 74.02/10.54 (ax6)
% 74.02/10.54 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ( ~ (app(v2, v1) = v0) | ~ $i(v2) |
% 74.02/10.54 ~ $i(v1) | ~ $i(v0) | ~ ssList(v2) | ~ ssList(v1) | ~ ssList(v0) |
% 74.02/10.54 rearsegP(v0, v1)) & ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~
% 74.02/10.54 rearsegP(v0, v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v2,
% 74.02/10.54 v1) = v0 & $i(v2) & ssList(v2)))
% 74.02/10.54
% 74.02/10.54 (ax7)
% 74.02/10.55 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : ! [v4: $i] : ( ~
% 74.02/10.55 (app(v3, v4) = v0) | ~ (app(v2, v1) = v3) | ~ $i(v4) | ~ $i(v2) | ~
% 74.02/10.55 $i(v1) | ~ $i(v0) | ~ ssList(v4) | ~ ssList(v2) | ~ ssList(v1) | ~
% 74.02/10.55 ssList(v0) | segmentP(v0, v1)) & ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~
% 74.02/10.55 $i(v0) | ~ segmentP(v0, v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] :
% 74.02/10.55 ? [v3: $i] : ? [v4: $i] : (app(v3, v4) = v0 & app(v2, v1) = v3 & $i(v4) &
% 74.02/10.55 $i(v3) & $i(v2) & ssList(v4) & ssList(v2)))
% 74.02/10.55
% 74.02/10.55 (co1)
% 74.02/10.55 $i(nil) & ? [v0: $i] : ? [v1: $i] : ? [v2: $i] : (app(v0, v2) = v1 & $i(v2)
% 74.02/10.55 & $i(v1) & $i(v0) & equalelemsP(v0) & ssList(v2) & ssList(v1) & ssList(v0) &
% 74.02/10.55 ~ segmentP(v1, v0) & ! [v3: $i] : ! [v4: $i] : ! [v5: $i] : ! [v6: $i]
% 74.02/10.55 : ( ~ (cons(v3, nil) = v4) | ~ (app(v6, v4) = v0) | ~ (app(v4, v5) = v2) |
% 74.02/10.55 ~ $i(v6) | ~ $i(v5) | ~ $i(v3) | ~ ssList(v6) | ~ ssList(v5) | ~
% 74.02/10.55 ssItem(v3)) & ( ~ (v0 = nil) | v1 = nil))
% 74.02/10.55
% 74.02/10.55 Further assumptions not needed in the proof:
% 74.02/10.55 --------------------------------------------
% 74.02/10.55 ax1, ax10, ax11, ax12, ax13, ax14, ax15, ax16, ax18, ax19, ax2, ax20, ax21,
% 74.02/10.55 ax22, ax23, ax24, ax25, ax26, ax27, ax28, ax29, ax3, ax30, ax31, ax32, ax33,
% 74.02/10.55 ax34, ax35, ax36, ax37, ax38, ax39, ax4, ax40, ax41, ax42, ax43, ax44, ax45,
% 74.02/10.55 ax46, ax47, ax48, ax50, ax51, ax52, ax53, ax54, ax55, ax56, ax57, ax59, ax60,
% 74.02/10.55 ax61, ax62, ax63, ax64, ax65, ax66, ax67, ax68, ax69, ax70, ax71, ax72, ax73,
% 74.02/10.55 ax74, ax75, ax76, ax77, ax78, ax79, ax8, ax80, ax81, ax82, ax83, ax84, ax85,
% 74.02/10.55 ax86, ax87, ax88, ax89, ax9, ax90, ax91, ax92, ax93, ax94, ax95
% 74.02/10.55
% 74.02/10.55 Those formulas are unsatisfiable:
% 74.02/10.55 ---------------------------------
% 74.02/10.55
% 74.02/10.55 Begin of proof
% 74.02/10.55 |
% 74.02/10.55 | ALPHA: (ax5) implies:
% 74.02/10.55 | (1) ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~ frontsegP(v0,
% 74.02/10.55 | v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v1, v2) =
% 74.02/10.55 | v0 & $i(v2) & ssList(v2)))
% 74.02/10.55 | (2) ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ( ~ (app(v1, v2) = v0) | ~
% 74.02/10.55 | $i(v2) | ~ $i(v1) | ~ $i(v0) | ~ ssList(v2) | ~ ssList(v1) | ~
% 74.02/10.55 | ssList(v0) | frontsegP(v0, v1))
% 74.02/10.55 |
% 74.02/10.55 | ALPHA: (ax6) implies:
% 74.02/10.55 | (3) ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~ rearsegP(v0,
% 74.02/10.55 | v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v2, v1) =
% 74.02/10.55 | v0 & $i(v2) & ssList(v2)))
% 74.02/10.55 |
% 74.02/10.55 | ALPHA: (ax7) implies:
% 74.02/10.55 | (4) ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : ! [v4: $i] : (
% 74.02/10.55 | ~ (app(v3, v4) = v0) | ~ (app(v2, v1) = v3) | ~ $i(v4) | ~ $i(v2)
% 74.02/10.55 | | ~ $i(v1) | ~ $i(v0) | ~ ssList(v4) | ~ ssList(v2) | ~
% 74.02/10.55 | ssList(v1) | ~ ssList(v0) | segmentP(v0, v1))
% 74.02/10.55 |
% 74.02/10.55 | ALPHA: (ax17) implies:
% 74.02/10.55 | (5) ssList(nil)
% 74.02/10.55 |
% 74.02/10.55 | ALPHA: (ax58) implies:
% 74.02/10.55 | (6) ~ ssList(nil) | segmentP(nil, nil)
% 74.02/10.55 |
% 74.02/10.55 | ALPHA: (co1) implies:
% 74.02/10.56 | (7) ? [v0: $i] : ? [v1: $i] : ? [v2: $i] : (app(v0, v2) = v1 & $i(v2) &
% 74.02/10.56 | $i(v1) & $i(v0) & equalelemsP(v0) & ssList(v2) & ssList(v1) &
% 74.02/10.56 | ssList(v0) & ~ segmentP(v1, v0) & ! [v3: $i] : ! [v4: $i] : !
% 74.02/10.56 | [v5: $i] : ! [v6: $i] : ( ~ (cons(v3, nil) = v4) | ~ (app(v6, v4) =
% 74.02/10.56 | v0) | ~ (app(v4, v5) = v2) | ~ $i(v6) | ~ $i(v5) | ~ $i(v3) |
% 74.02/10.56 | ~ ssList(v6) | ~ ssList(v5) | ~ ssItem(v3)) & ( ~ (v0 = nil) |
% 74.02/10.56 | v1 = nil))
% 74.02/10.56 |
% 74.02/10.56 | DELTA: instantiating (7) with fresh symbols all_91_0, all_91_1, all_91_2
% 74.02/10.56 | gives:
% 74.02/10.56 | (8) app(all_91_2, all_91_0) = all_91_1 & $i(all_91_0) & $i(all_91_1) &
% 74.02/10.56 | $i(all_91_2) & equalelemsP(all_91_2) & ssList(all_91_0) &
% 74.02/10.56 | ssList(all_91_1) & ssList(all_91_2) & ~ segmentP(all_91_1, all_91_2) &
% 74.02/10.56 | ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : ( ~ (cons(v0,
% 74.02/10.56 | nil) = v1) | ~ (app(v3, v1) = all_91_2) | ~ (app(v1, v2) =
% 74.02/10.56 | all_91_0) | ~ $i(v3) | ~ $i(v2) | ~ $i(v0) | ~ ssList(v3) | ~
% 74.02/10.56 | ssList(v2) | ~ ssItem(v0)) & ( ~ (all_91_2 = nil) | all_91_1 = nil)
% 74.02/10.56 |
% 74.02/10.56 | ALPHA: (8) implies:
% 74.02/10.56 | (9) ~ segmentP(all_91_1, all_91_2)
% 74.02/10.56 | (10) ssList(all_91_2)
% 74.02/10.56 | (11) ssList(all_91_1)
% 74.02/10.56 | (12) ssList(all_91_0)
% 74.02/10.56 | (13) $i(all_91_2)
% 74.02/10.56 | (14) $i(all_91_1)
% 74.02/10.56 | (15) $i(all_91_0)
% 74.02/10.56 | (16) app(all_91_2, all_91_0) = all_91_1
% 74.02/10.56 |
% 74.02/10.56 | BETA: splitting (6) gives:
% 74.02/10.56 |
% 74.02/10.56 | Case 1:
% 74.02/10.56 | |
% 74.02/10.56 | | (17) ~ ssList(nil)
% 74.02/10.56 | |
% 74.02/10.56 | | PRED_UNIFY: (5), (17) imply:
% 74.02/10.56 | | (18) $false
% 74.02/10.56 | |
% 74.02/10.56 | | CLOSE: (18) is inconsistent.
% 74.02/10.56 | |
% 74.02/10.56 | Case 2:
% 74.02/10.56 | |
% 74.02/10.56 | |
% 74.02/10.56 | | GROUND_INST: instantiating (ax49) with all_91_2, simplifying with (10), (13)
% 74.02/10.56 | | gives:
% 74.02/10.56 | | (19) rearsegP(all_91_2, all_91_2)
% 74.02/10.56 | |
% 74.02/10.56 | | GROUND_INST: instantiating (2) with all_91_1, all_91_2, all_91_0,
% 74.02/10.56 | | simplifying with (10), (11), (12), (13), (14), (15), (16)
% 74.02/10.56 | | gives:
% 74.02/10.56 | | (20) frontsegP(all_91_1, all_91_2)
% 74.02/10.56 | |
% 74.02/10.56 | | GROUND_INST: instantiating (1) with all_91_1, all_91_2, simplifying with
% 74.02/10.56 | | (10), (11), (13), (14), (20) gives:
% 74.02/10.56 | | (21) ? [v0: $i] : (app(all_91_2, v0) = all_91_1 & $i(v0) & ssList(v0))
% 74.02/10.56 | |
% 74.02/10.56 | | GROUND_INST: instantiating (3) with all_91_2, all_91_2, simplifying with
% 74.02/10.56 | | (10), (13), (19) gives:
% 74.02/10.56 | | (22) ? [v0: $i] : (app(v0, all_91_2) = all_91_2 & $i(v0) & ssList(v0))
% 74.02/10.56 | |
% 74.02/10.56 | | DELTA: instantiating (21) with fresh symbol all_134_0 gives:
% 74.02/10.56 | | (23) app(all_91_2, all_134_0) = all_91_1 & $i(all_134_0) &
% 74.02/10.56 | | ssList(all_134_0)
% 74.02/10.56 | |
% 74.02/10.56 | | ALPHA: (23) implies:
% 74.02/10.56 | | (24) ssList(all_134_0)
% 74.02/10.56 | | (25) $i(all_134_0)
% 74.02/10.56 | | (26) app(all_91_2, all_134_0) = all_91_1
% 74.02/10.56 | |
% 74.02/10.56 | | DELTA: instantiating (22) with fresh symbol all_148_0 gives:
% 74.02/10.56 | | (27) app(all_148_0, all_91_2) = all_91_2 & $i(all_148_0) &
% 74.02/10.57 | | ssList(all_148_0)
% 74.02/10.57 | |
% 74.02/10.57 | | ALPHA: (27) implies:
% 74.02/10.57 | | (28) ssList(all_148_0)
% 74.02/10.57 | | (29) $i(all_148_0)
% 74.02/10.57 | | (30) app(all_148_0, all_91_2) = all_91_2
% 74.02/10.57 | |
% 74.02/10.57 | | GROUND_INST: instantiating (4) with all_91_1, all_91_2, all_148_0, all_91_2,
% 74.02/10.57 | | all_134_0, simplifying with (9), (10), (11), (13), (14), (24),
% 74.02/10.57 | | (25), (26), (28), (29), (30) gives:
% 74.02/10.57 | | (31) $false
% 74.02/10.57 | |
% 74.02/10.57 | | CLOSE: (31) is inconsistent.
% 74.02/10.57 | |
% 74.02/10.57 | End of split
% 74.02/10.57 |
% 74.02/10.57 End of proof
% 74.02/10.57 % SZS output end Proof for theBenchmark
% 74.02/10.57
% 74.02/10.57 9976ms
%------------------------------------------------------------------------------