TSTP Solution File: SWC370+1 by Princess---230619
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : Princess---230619
% Problem : SWC370+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 : 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 : Thu Aug 31 20:51:05 EDT 2023
% Result : Theorem 54.76s 7.97s
% Output : Proof 67.79s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12 % Problem : SWC370+1 : TPTP v8.1.2. Released v2.4.0.
% 0.12/0.13 % Command : princess -inputFormat=tptp +threads -portfolio=casc +printProof -timeoutSec=%d %s
% 0.14/0.33 % Computer : n011.cluster.edu
% 0.14/0.33 % Model : x86_64 x86_64
% 0.14/0.33 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.14/0.33 % Memory : 8042.1875MB
% 0.14/0.33 % OS : Linux 3.10.0-693.el7.x86_64
% 0.14/0.33 % CPULimit : 300
% 0.14/0.33 % WCLimit : 300
% 0.14/0.33 % DateTime : Mon Aug 28 19:02:41 EDT 2023
% 0.14/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/sandbox2/benchmark/theBenchmark.p ...
% 0.19/0.60 Running up to 7 provers in parallel.
% 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 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 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.12/1.47 Prover 1: Preprocessing ...
% 5.12/1.47 Prover 4: Preprocessing ...
% 5.12/1.49 Prover 3: Preprocessing ...
% 5.12/1.49 Prover 0: Preprocessing ...
% 5.12/1.49 Prover 6: Preprocessing ...
% 5.12/1.49 Prover 5: Preprocessing ...
% 5.12/1.49 Prover 2: Preprocessing ...
% 14.39/2.73 Prover 2: Proving ...
% 15.56/2.84 Prover 5: Constructing countermodel ...
% 15.56/2.91 Prover 1: Constructing countermodel ...
% 15.56/2.91 Prover 3: Constructing countermodel ...
% 16.25/2.94 Prover 6: Proving ...
% 23.79/3.96 Prover 4: Constructing countermodel ...
% 24.82/4.10 Prover 0: Proving ...
% 54.76/7.97 Prover 5: proved (7347ms)
% 54.76/7.97
% 54.76/7.97 % SZS status Theorem for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 54.76/7.97
% 54.76/7.97 Prover 3: stopped
% 54.76/7.97 Prover 6: stopped
% 54.76/7.99 Prover 2: stopped
% 54.76/8.00 Prover 8: Options: +triggersInConjecture +genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-200781089
% 54.76/8.00 Prover 7: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-236303470
% 54.76/8.00 Prover 0: stopped
% 54.76/8.01 Prover 10: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=919308125
% 54.76/8.01 Prover 11: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -realRatSaturationRounds=1 +ignoreQuantifiers -constructProofs=always -generateTriggers=all -randomSeed=-1509710984
% 54.76/8.01 Prover 13: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -realRatSaturationRounds=0 +ignoreQuantifiers -constructProofs=always -generateTriggers=complete -randomSeed=1138197443
% 57.03/8.30 Prover 11: Preprocessing ...
% 57.03/8.30 Prover 8: Preprocessing ...
% 57.03/8.31 Prover 7: Preprocessing ...
% 57.03/8.32 Prover 10: Preprocessing ...
% 57.03/8.33 Prover 13: Preprocessing ...
% 59.11/8.57 Prover 10: Constructing countermodel ...
% 59.67/8.63 Prover 7: Constructing countermodel ...
% 59.67/8.65 Prover 8: Warning: ignoring some quantifiers
% 59.67/8.66 Prover 8: Constructing countermodel ...
% 60.78/8.76 Prover 13: Constructing countermodel ...
% 66.82/9.61 Prover 11: Constructing countermodel ...
% 67.44/9.63 Prover 10: Found proof (size 24)
% 67.44/9.63 Prover 10: proved (1631ms)
% 67.44/9.63 Prover 13: stopped
% 67.44/9.63 Prover 8: stopped
% 67.44/9.63 Prover 1: stopped
% 67.44/9.63 Prover 7: stopped
% 67.44/9.63 Prover 11: stopped
% 67.44/9.63 Prover 4: stopped
% 67.44/9.63
% 67.44/9.63 % SZS status Theorem for /export/starexec/sandbox2/benchmark/theBenchmark.p
% 67.44/9.63
% 67.44/9.63 % SZS output start Proof for theBenchmark
% 67.44/9.64 Assumptions after simplification:
% 67.44/9.64 ---------------------------------
% 67.44/9.64
% 67.44/9.64 (ax17)
% 67.44/9.64 $i(nil) & ssList(nil)
% 67.44/9.64
% 67.44/9.64 (ax49)
% 67.44/9.64 ! [v0: $i] : ( ~ $i(v0) | ~ ssList(v0) | rearsegP(v0, v0))
% 67.44/9.64
% 67.44/9.64 (ax5)
% 67.44/9.67 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ( ~ (app(v1, v2) = v0) | ~ $i(v2) |
% 67.44/9.67 ~ $i(v1) | ~ $i(v0) | ~ ssList(v2) | ~ ssList(v1) | ~ ssList(v0) |
% 67.44/9.67 frontsegP(v0, v1)) & ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~
% 67.44/9.67 frontsegP(v0, v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v1,
% 67.44/9.67 v2) = v0 & $i(v2) & ssList(v2)))
% 67.44/9.67
% 67.44/9.67 (ax58)
% 67.44/9.67 $i(nil) & ! [v0: $i] : (v0 = nil | ~ $i(v0) | ~ segmentP(nil, v0) | ~
% 67.44/9.67 ssList(v0)) & ( ~ ssList(nil) | segmentP(nil, nil))
% 67.44/9.67
% 67.44/9.67 (ax6)
% 67.44/9.67 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ( ~ (app(v2, v1) = v0) | ~ $i(v2) |
% 67.44/9.67 ~ $i(v1) | ~ $i(v0) | ~ ssList(v2) | ~ ssList(v1) | ~ ssList(v0) |
% 67.44/9.67 rearsegP(v0, v1)) & ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~
% 67.44/9.67 rearsegP(v0, v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v2,
% 67.44/9.67 v1) = v0 & $i(v2) & ssList(v2)))
% 67.44/9.67
% 67.44/9.67 (ax7)
% 67.44/9.67 ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : ! [v4: $i] : ( ~
% 67.44/9.67 (app(v3, v4) = v0) | ~ (app(v2, v1) = v3) | ~ $i(v4) | ~ $i(v2) | ~
% 67.44/9.67 $i(v1) | ~ $i(v0) | ~ ssList(v4) | ~ ssList(v2) | ~ ssList(v1) | ~
% 67.44/9.67 ssList(v0) | segmentP(v0, v1)) & ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~
% 67.44/9.67 $i(v0) | ~ segmentP(v0, v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] :
% 67.44/9.67 ? [v3: $i] : ? [v4: $i] : (app(v3, v4) = v0 & app(v2, v1) = v3 & $i(v4) &
% 67.44/9.67 $i(v3) & $i(v2) & ssList(v4) & ssList(v2)))
% 67.44/9.67
% 67.44/9.67 (co1)
% 67.79/9.68 $i(nil) & ? [v0: $i] : ? [v1: $i] : ? [v2: $i] : (app(v0, v2) = v1 & $i(v2)
% 67.79/9.68 & $i(v1) & $i(v0) & equalelemsP(v0) & ssList(v2) & ssList(v1) & ssList(v0) &
% 67.79/9.68 ~ segmentP(v1, v0) & ! [v3: $i] : ! [v4: $i] : ! [v5: $i] : ! [v6: $i]
% 67.79/9.68 : ( ~ (cons(v3, nil) = v4) | ~ (app(v6, v4) = v0) | ~ (app(v4, v5) = v2) |
% 67.79/9.68 ~ $i(v6) | ~ $i(v5) | ~ $i(v3) | ~ ssList(v6) | ~ ssList(v5) | ~
% 67.79/9.68 ssItem(v3)) & ( ~ (v0 = nil) | v1 = nil))
% 67.79/9.68
% 67.79/9.68 Further assumptions not needed in the proof:
% 67.79/9.68 --------------------------------------------
% 67.79/9.68 ax1, ax10, ax11, ax12, ax13, ax14, ax15, ax16, ax18, ax19, ax2, ax20, ax21,
% 67.79/9.68 ax22, ax23, ax24, ax25, ax26, ax27, ax28, ax29, ax3, ax30, ax31, ax32, ax33,
% 67.79/9.68 ax34, ax35, ax36, ax37, ax38, ax39, ax4, ax40, ax41, ax42, ax43, ax44, ax45,
% 67.79/9.68 ax46, ax47, ax48, ax50, ax51, ax52, ax53, ax54, ax55, ax56, ax57, ax59, ax60,
% 67.79/9.68 ax61, ax62, ax63, ax64, ax65, ax66, ax67, ax68, ax69, ax70, ax71, ax72, ax73,
% 67.79/9.68 ax74, ax75, ax76, ax77, ax78, ax79, ax8, ax80, ax81, ax82, ax83, ax84, ax85,
% 67.79/9.68 ax86, ax87, ax88, ax89, ax9, ax90, ax91, ax92, ax93, ax94, ax95
% 67.79/9.68
% 67.79/9.68 Those formulas are unsatisfiable:
% 67.79/9.68 ---------------------------------
% 67.79/9.68
% 67.79/9.68 Begin of proof
% 67.79/9.68 |
% 67.79/9.68 | ALPHA: (ax5) implies:
% 67.79/9.68 | (1) ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~ frontsegP(v0,
% 67.79/9.68 | v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v1, v2) =
% 67.79/9.68 | v0 & $i(v2) & ssList(v2)))
% 67.79/9.68 | (2) ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ( ~ (app(v1, v2) = v0) | ~
% 67.79/9.68 | $i(v2) | ~ $i(v1) | ~ $i(v0) | ~ ssList(v2) | ~ ssList(v1) | ~
% 67.79/9.68 | ssList(v0) | frontsegP(v0, v1))
% 67.79/9.68 |
% 67.79/9.68 | ALPHA: (ax6) implies:
% 67.79/9.68 | (3) ! [v0: $i] : ! [v1: $i] : ( ~ $i(v1) | ~ $i(v0) | ~ rearsegP(v0,
% 67.79/9.68 | v1) | ~ ssList(v1) | ~ ssList(v0) | ? [v2: $i] : (app(v2, v1) =
% 67.79/9.68 | v0 & $i(v2) & ssList(v2)))
% 67.79/9.68 |
% 67.79/9.68 | ALPHA: (ax7) implies:
% 67.79/9.68 | (4) ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : ! [v4: $i] : (
% 67.79/9.68 | ~ (app(v3, v4) = v0) | ~ (app(v2, v1) = v3) | ~ $i(v4) | ~ $i(v2)
% 67.79/9.68 | | ~ $i(v1) | ~ $i(v0) | ~ ssList(v4) | ~ ssList(v2) | ~
% 67.79/9.68 | ssList(v1) | ~ ssList(v0) | segmentP(v0, v1))
% 67.79/9.68 |
% 67.79/9.68 | ALPHA: (ax17) implies:
% 67.79/9.68 | (5) ssList(nil)
% 67.79/9.68 |
% 67.79/9.68 | ALPHA: (ax58) implies:
% 67.79/9.68 | (6) ~ ssList(nil) | segmentP(nil, nil)
% 67.79/9.68 |
% 67.79/9.68 | ALPHA: (co1) implies:
% 67.79/9.69 | (7) ? [v0: $i] : ? [v1: $i] : ? [v2: $i] : (app(v0, v2) = v1 & $i(v2) &
% 67.79/9.69 | $i(v1) & $i(v0) & equalelemsP(v0) & ssList(v2) & ssList(v1) &
% 67.79/9.69 | ssList(v0) & ~ segmentP(v1, v0) & ! [v3: $i] : ! [v4: $i] : !
% 67.79/9.69 | [v5: $i] : ! [v6: $i] : ( ~ (cons(v3, nil) = v4) | ~ (app(v6, v4) =
% 67.79/9.69 | v0) | ~ (app(v4, v5) = v2) | ~ $i(v6) | ~ $i(v5) | ~ $i(v3) |
% 67.79/9.69 | ~ ssList(v6) | ~ ssList(v5) | ~ ssItem(v3)) & ( ~ (v0 = nil) |
% 67.79/9.69 | v1 = nil))
% 67.79/9.69 |
% 67.79/9.69 | DELTA: instantiating (7) with fresh symbols all_91_0, all_91_1, all_91_2
% 67.79/9.69 | gives:
% 67.79/9.69 | (8) app(all_91_2, all_91_0) = all_91_1 & $i(all_91_0) & $i(all_91_1) &
% 67.79/9.69 | $i(all_91_2) & equalelemsP(all_91_2) & ssList(all_91_0) &
% 67.79/9.69 | ssList(all_91_1) & ssList(all_91_2) & ~ segmentP(all_91_1, all_91_2) &
% 67.79/9.69 | ! [v0: $i] : ! [v1: $i] : ! [v2: $i] : ! [v3: $i] : ( ~ (cons(v0,
% 67.79/9.69 | nil) = v1) | ~ (app(v3, v1) = all_91_2) | ~ (app(v1, v2) =
% 67.79/9.69 | all_91_0) | ~ $i(v3) | ~ $i(v2) | ~ $i(v0) | ~ ssList(v3) | ~
% 67.79/9.69 | ssList(v2) | ~ ssItem(v0)) & ( ~ (all_91_2 = nil) | all_91_1 = nil)
% 67.79/9.69 |
% 67.79/9.69 | ALPHA: (8) implies:
% 67.79/9.69 | (9) ~ segmentP(all_91_1, all_91_2)
% 67.79/9.69 | (10) ssList(all_91_2)
% 67.79/9.69 | (11) ssList(all_91_1)
% 67.79/9.69 | (12) ssList(all_91_0)
% 67.79/9.69 | (13) $i(all_91_2)
% 67.79/9.69 | (14) $i(all_91_1)
% 67.79/9.69 | (15) $i(all_91_0)
% 67.79/9.69 | (16) app(all_91_2, all_91_0) = all_91_1
% 67.79/9.69 |
% 67.79/9.69 | BETA: splitting (6) gives:
% 67.79/9.69 |
% 67.79/9.69 | Case 1:
% 67.79/9.69 | |
% 67.79/9.69 | | (17) ~ ssList(nil)
% 67.79/9.69 | |
% 67.79/9.69 | | PRED_UNIFY: (5), (17) imply:
% 67.79/9.69 | | (18) $false
% 67.79/9.69 | |
% 67.79/9.69 | | CLOSE: (18) is inconsistent.
% 67.79/9.69 | |
% 67.79/9.69 | Case 2:
% 67.79/9.69 | |
% 67.79/9.69 | |
% 67.79/9.69 | | GROUND_INST: instantiating (ax49) with all_91_2, simplifying with (10), (13)
% 67.79/9.69 | | gives:
% 67.79/9.69 | | (19) rearsegP(all_91_2, all_91_2)
% 67.79/9.69 | |
% 67.79/9.69 | | GROUND_INST: instantiating (2) with all_91_1, all_91_2, all_91_0,
% 67.79/9.69 | | simplifying with (10), (11), (12), (13), (14), (15), (16)
% 67.79/9.69 | | gives:
% 67.79/9.69 | | (20) frontsegP(all_91_1, all_91_2)
% 67.79/9.69 | |
% 67.79/9.69 | | GROUND_INST: instantiating (1) with all_91_1, all_91_2, simplifying with
% 67.79/9.69 | | (10), (11), (13), (14), (20) gives:
% 67.79/9.69 | | (21) ? [v0: $i] : (app(all_91_2, v0) = all_91_1 & $i(v0) & ssList(v0))
% 67.79/9.69 | |
% 67.79/9.69 | | GROUND_INST: instantiating (3) with all_91_2, all_91_2, simplifying with
% 67.79/9.69 | | (10), (13), (19) gives:
% 67.79/9.69 | | (22) ? [v0: $i] : (app(v0, all_91_2) = all_91_2 & $i(v0) & ssList(v0))
% 67.79/9.69 | |
% 67.79/9.69 | | DELTA: instantiating (21) with fresh symbol all_134_0 gives:
% 67.79/9.69 | | (23) app(all_91_2, all_134_0) = all_91_1 & $i(all_134_0) &
% 67.79/9.69 | | ssList(all_134_0)
% 67.79/9.69 | |
% 67.79/9.69 | | ALPHA: (23) implies:
% 67.79/9.69 | | (24) ssList(all_134_0)
% 67.79/9.69 | | (25) $i(all_134_0)
% 67.79/9.69 | | (26) app(all_91_2, all_134_0) = all_91_1
% 67.79/9.69 | |
% 67.79/9.70 | | DELTA: instantiating (22) with fresh symbol all_148_0 gives:
% 67.79/9.70 | | (27) app(all_148_0, all_91_2) = all_91_2 & $i(all_148_0) &
% 67.79/9.70 | | ssList(all_148_0)
% 67.79/9.70 | |
% 67.79/9.70 | | ALPHA: (27) implies:
% 67.79/9.70 | | (28) ssList(all_148_0)
% 67.79/9.70 | | (29) $i(all_148_0)
% 67.79/9.70 | | (30) app(all_148_0, all_91_2) = all_91_2
% 67.79/9.70 | |
% 67.79/9.70 | | GROUND_INST: instantiating (4) with all_91_1, all_91_2, all_148_0, all_91_2,
% 67.79/9.70 | | all_134_0, simplifying with (9), (10), (11), (13), (14), (24),
% 67.79/9.70 | | (25), (26), (28), (29), (30) gives:
% 67.79/9.70 | | (31) $false
% 67.79/9.70 | |
% 67.79/9.70 | | CLOSE: (31) is inconsistent.
% 67.79/9.70 | |
% 67.79/9.70 | End of split
% 67.79/9.70 |
% 67.79/9.70 End of proof
% 67.79/9.70 % SZS output end Proof for theBenchmark
% 67.79/9.70
% 67.79/9.70 9107ms
%------------------------------------------------------------------------------