TSTP Solution File: SEU164+3 by ePrincess---1.0
View Problem
- Process Solution
%------------------------------------------------------------------------------
% File : ePrincess---1.0
% Problem : SEU164+3 : TPTP v8.1.0. Bugfixed v4.0.0.
% Transfm : none
% Format : tptp:raw
% Command : ePrincess-casc -timeout=%d %s
% Computer : n006.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 : 600s
% DateTime : Tue Jul 19 08:47:12 EDT 2022
% Result : Theorem 99.97s 61.60s
% Output : Proof 121.18s
% Verified :
% SZS Type : -
% Comments :
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12 % Problem : SEU164+3 : TPTP v8.1.0. Bugfixed v4.0.0.
% 0.12/0.13 % Command : ePrincess-casc -timeout=%d %s
% 0.12/0.34 % Computer : n006.cluster.edu
% 0.12/0.34 % Model : x86_64 x86_64
% 0.12/0.34 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.12/0.34 % Memory : 8042.1875MB
% 0.12/0.34 % OS : Linux 3.10.0-693.el7.x86_64
% 0.12/0.34 % CPULimit : 300
% 0.12/0.34 % WCLimit : 600
% 0.12/0.34 % DateTime : Sun Jun 19 03:16:40 EDT 2022
% 0.12/0.34 % CPUTime :
% 0.60/0.60 ____ _
% 0.60/0.60 ___ / __ \_____(_)___ ________ __________
% 0.60/0.60 / _ \/ /_/ / ___/ / __ \/ ___/ _ \/ ___/ ___/
% 0.60/0.60 / __/ ____/ / / / / / / /__/ __(__ |__ )
% 0.60/0.60 \___/_/ /_/ /_/_/ /_/\___/\___/____/____/
% 0.60/0.60
% 0.60/0.60 A Theorem Prover for First-Order Logic
% 0.60/0.60 (ePrincess v.1.0)
% 0.60/0.60
% 0.60/0.60 (c) Philipp Rümmer, 2009-2015
% 0.60/0.60 (c) Peter Backeman, 2014-2015
% 0.60/0.60 (contributions by Angelo Brillout, Peter Baumgartner)
% 0.60/0.60 Free software under GNU Lesser General Public License (LGPL).
% 0.60/0.60 Bug reports to peter@backeman.se
% 0.60/0.60
% 0.60/0.60 For more information, visit http://user.uu.se/~petba168/breu/
% 0.60/0.60
% 0.60/0.60 Loading /export/starexec/sandbox/benchmark/theBenchmark.p ...
% 0.76/0.65 Prover 0: Options: -triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=allMaximal -resolutionMethod=nonUnifying +ignoreQuantifiers -generateTriggers=all
% 1.52/0.91 Prover 0: Preprocessing ...
% 2.00/1.09 Prover 0: Warning: ignoring some quantifiers
% 2.00/1.10 Prover 0: Constructing countermodel ...
% 2.55/1.30 Prover 0: gave up
% 2.55/1.30 Prover 1: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -resolutionMethod=normal +ignoreQuantifiers -generateTriggers=all
% 2.55/1.32 Prover 1: Preprocessing ...
% 3.15/1.40 Prover 1: Warning: ignoring some quantifiers
% 3.15/1.41 Prover 1: Constructing countermodel ...
% 3.49/1.46 Prover 1: gave up
% 3.49/1.47 Prover 2: Options: +triggersInConjecture +genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -resolutionMethod=nonUnifying +ignoreQuantifiers -generateTriggers=all
% 3.53/1.48 Prover 2: Preprocessing ...
% 3.82/1.56 Prover 2: Warning: ignoring some quantifiers
% 3.82/1.57 Prover 2: Constructing countermodel ...
% 4.26/1.63 Prover 2: gave up
% 4.26/1.63 Prover 3: Options: -triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=simple +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximal -resolutionMethod=nonUnifying +ignoreQuantifiers -generateTriggers=all
% 4.26/1.64 Prover 3: Preprocessing ...
% 4.26/1.67 Prover 3: Warning: ignoring some quantifiers
% 4.26/1.67 Prover 3: Constructing countermodel ...
% 4.62/1.73 Prover 3: gave up
% 4.62/1.73 Prover 4: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -resolutionMethod=nonUnifying +ignoreQuantifiers -generateTriggers=complete
% 4.62/1.74 Prover 4: Preprocessing ...
% 5.15/1.82 Prover 4: Warning: ignoring some quantifiers
% 5.15/1.82 Prover 4: Constructing countermodel ...
% 9.86/2.96 Prover 5: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=none +reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allMinimal -resolutionMethod=nonUnifying +ignoreQuantifiers -generateTriggers=all
% 9.86/2.98 Prover 5: Preprocessing ...
% 10.18/3.04 Prover 5: Warning: ignoring some quantifiers
% 10.18/3.05 Prover 5: Constructing countermodel ...
% 10.63/3.10 Prover 5: gave up
% 10.63/3.10 Prover 6: Options: +triggersInConjecture +genTotalityAxioms +tightFunctionScopes -clausifier=simple -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=allUni -resolutionMethod=normal +ignoreQuantifiers -generateTriggers=all
% 10.63/3.11 Prover 6: Preprocessing ...
% 10.75/3.15 Prover 6: Warning: ignoring some quantifiers
% 10.75/3.15 Prover 6: Constructing countermodel ...
% 10.75/3.19 Prover 6: gave up
% 10.75/3.19 Prover 7: Options: +triggersInConjecture -genTotalityAxioms +tightFunctionScopes -clausifier=none +reverseFunctionalityPropagation +boolFunsAsPreds -triggerStrategy=maximalOutermost -resolutionMethod=normal -ignoreQuantifiers -generateTriggers=all
% 10.75/3.20 Prover 7: Preprocessing ...
% 11.20/3.22 Prover 7: Proving ...
% 36.86/13.42 Prover 8: Options: +triggersInConjecture -genTotalityAxioms -tightFunctionScopes -clausifier=none -reverseFunctionalityPropagation -boolFunsAsPreds -triggerStrategy=maximal -resolutionMethod=normal -ignoreQuantifiers -generateTriggers=all
% 36.86/13.44 Prover 8: Preprocessing ...
% 36.86/13.48 Prover 8: Proving ...
% 99.97/61.60 Prover 7: proved (20314ms)
% 99.97/61.60 Prover 4: stopped
% 99.97/61.60 Prover 8: stopped
% 99.97/61.60
% 99.97/61.60 % SZS status Theorem for theBenchmark
% 99.97/61.60
% 99.97/61.60 Generating proof ... found it (size 37)
% 120.76/76.83
% 120.76/76.83 % SZS output start Proof for theBenchmark
% 120.76/76.83 Assumed formulas after preprocessing and simplification:
% 120.76/76.83 | (0) ! [v0] : ! [v1] : ! [v2] : (v1 = v0 | ~ (union(v2) = v1) | ~ (union(v2) = v0)) & ! [v0] : ! [v1] : ! [v2] : (v1 = v0 | ~ (powerset(v2) = v1) | ~ (powerset(v2) = v0)) & ! [v0] : ! [v1] : ! [v2] : (v1 = v0 | ~ (singleton(v2) = v1) | ~ (singleton(v2) = v0)) & ! [v0] : ! [v1] : ! [v2] : ( ~ (singleton(v0) = v2) | ~ subset(v2, v1) | in(v0, v1)) & ! [v0] : ! [v1] : ! [v2] : ( ~ (singleton(v0) = v2) | ~ in(v0, v1) | subset(v2, v1)) & ! [v0] : ! [v1] : (v1 = v0 | ? [v2] : (( ~ in(v2, v1) | ~ in(v2, v0)) & (in(v2, v1) | in(v2, v0)))) & ! [v0] : ! [v1] : ( ~ (union(v0) = v1) | ! [v2] : (v2 = v1 | ? [v3] : (( ~ in(v3, v2) | ! [v4] : ( ~ in(v4, v0) | ~ in(v3, v4))) & (in(v3, v2) | ? [v4] : (in(v4, v0) & in(v3, v4)))))) & ! [v0] : ! [v1] : ( ~ (union(v0) = v1) | ( ! [v2] : ( ~ in(v2, v1) | ? [v3] : (in(v3, v0) & in(v2, v3))) & ! [v2] : (in(v2, v1) | ! [v3] : ( ~ in(v3, v0) | ~ in(v2, v3))))) & ! [v0] : ! [v1] : ( ~ (powerset(v0) = v1) | ! [v2] : (v2 = v1 | ? [v3] : (( ~ subset(v3, v0) | ~ in(v3, v2)) & (subset(v3, v0) | in(v3, v2))))) & ! [v0] : ! [v1] : ( ~ (powerset(v0) = v1) | ( ! [v2] : ( ~ subset(v2, v0) | in(v2, v1)) & ! [v2] : ( ~ in(v2, v1) | subset(v2, v0)))) & ! [v0] : ! [v1] : ( ~ (singleton(v0) = v1) | ! [v2] : (v2 = v1 | ? [v3] : (( ~ (v3 = v0) | ~ in(v0, v2)) & (v3 = v0 | in(v3, v2))))) & ! [v0] : ! [v1] : ( ~ (singleton(v0) = v1) | (in(v0, v1) & ! [v2] : (v2 = v0 | ~ in(v2, v1)))) & ! [v0] : ! [v1] : ( ~ subset(v0, v1) | ! [v2] : ( ~ in(v2, v0) | in(v2, v1))) & ! [v0] : ! [v1] : ( ~ in(v1, v0) | ~ in(v0, v1)) & ! [v0] : ! [v1] : (subset(v0, v1) | ? [v2] : (in(v2, v0) & ~ in(v2, v1))) & ! [v0] : subset(v0, v0) & ? [v0] : ? [v1] : ? [v2] : ( ~ (v2 = v0) & union(v1) = v2 & powerset(v0) = v1) & ? [v0] : ~ empty(v0) & ? [v0] : empty(v0)
% 120.76/76.85 | Applying alpha-rule on (0) yields:
% 120.76/76.85 | (1) ! [v0] : ! [v1] : ( ~ subset(v0, v1) | ! [v2] : ( ~ in(v2, v0) | in(v2, v1)))
% 120.76/76.85 | (2) ? [v0] : empty(v0)
% 120.76/76.85 | (3) ! [v0] : ! [v1] : ( ~ (union(v0) = v1) | ( ! [v2] : ( ~ in(v2, v1) | ? [v3] : (in(v3, v0) & in(v2, v3))) & ! [v2] : (in(v2, v1) | ! [v3] : ( ~ in(v3, v0) | ~ in(v2, v3)))))
% 120.76/76.85 | (4) ! [v0] : ! [v1] : ( ~ (powerset(v0) = v1) | ! [v2] : (v2 = v1 | ? [v3] : (( ~ subset(v3, v0) | ~ in(v3, v2)) & (subset(v3, v0) | in(v3, v2)))))
% 120.76/76.85 | (5) ! [v0] : ! [v1] : ! [v2] : (v1 = v0 | ~ (powerset(v2) = v1) | ~ (powerset(v2) = v0))
% 120.76/76.85 | (6) ? [v0] : ~ empty(v0)
% 120.76/76.85 | (7) ! [v0] : ! [v1] : (v1 = v0 | ? [v2] : (( ~ in(v2, v1) | ~ in(v2, v0)) & (in(v2, v1) | in(v2, v0))))
% 120.76/76.85 | (8) ! [v0] : ! [v1] : ( ~ (powerset(v0) = v1) | ( ! [v2] : ( ~ subset(v2, v0) | in(v2, v1)) & ! [v2] : ( ~ in(v2, v1) | subset(v2, v0))))
% 120.76/76.85 | (9) ? [v0] : ? [v1] : ? [v2] : ( ~ (v2 = v0) & union(v1) = v2 & powerset(v0) = v1)
% 120.76/76.86 | (10) ! [v0] : ! [v1] : ( ~ (singleton(v0) = v1) | ! [v2] : (v2 = v1 | ? [v3] : (( ~ (v3 = v0) | ~ in(v0, v2)) & (v3 = v0 | in(v3, v2)))))
% 120.76/76.86 | (11) ! [v0] : ! [v1] : (subset(v0, v1) | ? [v2] : (in(v2, v0) & ~ in(v2, v1)))
% 120.76/76.86 | (12) ! [v0] : ! [v1] : ( ~ (singleton(v0) = v1) | (in(v0, v1) & ! [v2] : (v2 = v0 | ~ in(v2, v1))))
% 120.76/76.86 | (13) ! [v0] : subset(v0, v0)
% 120.76/76.86 | (14) ! [v0] : ! [v1] : ! [v2] : (v1 = v0 | ~ (singleton(v2) = v1) | ~ (singleton(v2) = v0))
% 120.76/76.86 | (15) ! [v0] : ! [v1] : ( ~ in(v1, v0) | ~ in(v0, v1))
% 120.76/76.86 | (16) ! [v0] : ! [v1] : ! [v2] : (v1 = v0 | ~ (union(v2) = v1) | ~ (union(v2) = v0))
% 120.76/76.86 | (17) ! [v0] : ! [v1] : ( ~ (union(v0) = v1) | ! [v2] : (v2 = v1 | ? [v3] : (( ~ in(v3, v2) | ! [v4] : ( ~ in(v4, v0) | ~ in(v3, v4))) & (in(v3, v2) | ? [v4] : (in(v4, v0) & in(v3, v4))))))
% 120.76/76.86 | (18) ! [v0] : ! [v1] : ! [v2] : ( ~ (singleton(v0) = v2) | ~ in(v0, v1) | subset(v2, v1))
% 120.76/76.86 | (19) ! [v0] : ! [v1] : ! [v2] : ( ~ (singleton(v0) = v2) | ~ subset(v2, v1) | in(v0, v1))
% 120.76/76.86 |
% 120.76/76.86 | Instantiating (9) with all_1_0_0, all_1_1_1, all_1_2_2 yields:
% 120.76/76.86 | (20) ~ (all_1_0_0 = all_1_2_2) & union(all_1_1_1) = all_1_0_0 & powerset(all_1_2_2) = all_1_1_1
% 120.76/76.86 |
% 120.76/76.86 | Applying alpha-rule on (20) yields:
% 120.76/76.86 | (21) ~ (all_1_0_0 = all_1_2_2)
% 120.76/76.86 | (22) union(all_1_1_1) = all_1_0_0
% 120.76/76.86 | (23) powerset(all_1_2_2) = all_1_1_1
% 120.76/76.86 |
% 120.76/76.86 | Instantiating formula (17) with all_1_0_0, all_1_1_1 and discharging atoms union(all_1_1_1) = all_1_0_0, yields:
% 120.76/76.86 | (24) ! [v0] : (v0 = all_1_0_0 | ? [v1] : (( ~ in(v1, v0) | ! [v2] : ( ~ in(v2, all_1_1_1) | ~ in(v1, v2))) & (in(v1, v0) | ? [v2] : (in(v2, all_1_1_1) & in(v1, v2)))))
% 120.76/76.86 |
% 120.76/76.86 | Instantiating formula (8) with all_1_1_1, all_1_2_2 and discharging atoms powerset(all_1_2_2) = all_1_1_1, yields:
% 120.76/76.86 | (25) ! [v0] : ( ~ subset(v0, all_1_2_2) | in(v0, all_1_1_1)) & ! [v0] : ( ~ in(v0, all_1_1_1) | subset(v0, all_1_2_2))
% 120.76/76.86 |
% 120.76/76.86 | Applying alpha-rule on (25) yields:
% 120.76/76.86 | (26) ! [v0] : ( ~ subset(v0, all_1_2_2) | in(v0, all_1_1_1))
% 120.76/76.86 | (27) ! [v0] : ( ~ in(v0, all_1_1_1) | subset(v0, all_1_2_2))
% 120.76/76.86 |
% 120.76/76.86 | Introducing new symbol ex_36_0_8 defined by:
% 120.76/76.86 | (28) ex_36_0_8 = all_1_2_2
% 120.76/76.86 |
% 120.76/76.86 | Instantiating formula (13) with ex_36_0_8 yields:
% 120.76/76.86 | (29) subset(ex_36_0_8, ex_36_0_8)
% 120.76/76.86 |
% 120.76/76.86 | Instantiating formula (26) with all_1_2_2 yields:
% 120.76/76.86 | (30) ~ subset(all_1_2_2, all_1_2_2) | in(all_1_2_2, all_1_1_1)
% 120.76/76.86 |
% 120.76/76.86 +-Applying beta-rule and splitting (30), into two cases.
% 120.76/76.86 |-Branch one:
% 120.76/76.86 | (31) in(all_1_2_2, all_1_1_1)
% 120.76/76.86 |
% 120.76/76.86 | Introducing new symbol ex_103_0_33 defined by:
% 120.76/76.86 | (32) ex_103_0_33 = all_1_2_2
% 120.76/76.86 |
% 120.76/76.86 | Instantiating formula (24) with ex_103_0_33 yields:
% 120.76/76.86 | (33) ex_103_0_33 = all_1_0_0 | ? [v0] : (( ~ in(v0, ex_103_0_33) | ! [v1] : ( ~ in(v1, all_1_1_1) | ~ in(v0, v1))) & (in(v0, ex_103_0_33) | ? [v1] : (in(v1, all_1_1_1) & in(v0, v1))))
% 120.76/76.86 |
% 120.76/76.86 +-Applying beta-rule and splitting (33), into two cases.
% 120.76/76.86 |-Branch one:
% 120.76/76.86 | (34) ex_103_0_33 = all_1_0_0
% 120.76/76.86 |
% 120.76/76.86 | Combining equations (32,34) yields a new equation:
% 120.76/76.86 | (35) all_1_0_0 = all_1_2_2
% 120.76/76.86 |
% 120.76/76.86 | Equations (35) can reduce 21 to:
% 120.76/76.86 | (36) $false
% 120.76/76.86 |
% 120.76/76.86 |-The branch is then unsatisfiable
% 120.76/76.86 |-Branch two:
% 120.76/76.86 | (37) ? [v0] : (( ~ in(v0, ex_103_0_33) | ! [v1] : ( ~ in(v1, all_1_1_1) | ~ in(v0, v1))) & (in(v0, ex_103_0_33) | ? [v1] : (in(v1, all_1_1_1) & in(v0, v1))))
% 120.76/76.86 |
% 120.76/76.86 | Instantiating (37) with all_106_0_34 yields:
% 120.76/76.86 | (38) ( ~ in(all_106_0_34, ex_103_0_33) | ! [v0] : ( ~ in(v0, all_1_1_1) | ~ in(all_106_0_34, v0))) & (in(all_106_0_34, ex_103_0_33) | ? [v0] : (in(v0, all_1_1_1) & in(all_106_0_34, v0)))
% 120.76/76.86 |
% 120.76/76.86 | Applying alpha-rule on (38) yields:
% 120.76/76.86 | (39) ~ in(all_106_0_34, ex_103_0_33) | ! [v0] : ( ~ in(v0, all_1_1_1) | ~ in(all_106_0_34, v0))
% 120.76/76.86 | (40) in(all_106_0_34, ex_103_0_33) | ? [v0] : (in(v0, all_1_1_1) & in(all_106_0_34, v0))
% 120.76/76.86 |
% 120.76/76.86 +-Applying beta-rule and splitting (39), into two cases.
% 120.76/76.86 |-Branch one:
% 120.76/76.86 | (41) ~ in(all_106_0_34, ex_103_0_33)
% 120.76/76.86 |
% 120.76/76.86 +-Applying beta-rule and splitting (40), into two cases.
% 120.76/76.86 |-Branch one:
% 120.76/76.86 | (42) in(all_106_0_34, ex_103_0_33)
% 120.76/76.86 |
% 120.76/76.86 | Using (42) and (41) yields:
% 120.76/76.86 | (43) $false
% 120.76/76.86 |
% 120.76/76.86 |-The branch is then unsatisfiable
% 120.76/76.86 |-Branch two:
% 120.76/76.86 | (44) ? [v0] : (in(v0, all_1_1_1) & in(all_106_0_34, v0))
% 120.76/76.86 |
% 120.76/76.86 | Instantiating (44) with all_117_0_41 yields:
% 120.76/76.86 | (45) in(all_117_0_41, all_1_1_1) & in(all_106_0_34, all_117_0_41)
% 120.76/76.86 |
% 120.76/76.86 | Applying alpha-rule on (45) yields:
% 120.76/76.86 | (46) in(all_117_0_41, all_1_1_1)
% 120.76/76.87 | (47) in(all_106_0_34, all_117_0_41)
% 120.76/76.87 |
% 120.76/76.87 | Instantiating formula (27) with all_117_0_41 and discharging atoms in(all_117_0_41, all_1_1_1), yields:
% 120.76/76.87 | (48) subset(all_117_0_41, all_1_2_2)
% 120.76/76.87 |
% 120.76/76.87 | Instantiating formula (1) with all_1_2_2, all_117_0_41 and discharging atoms subset(all_117_0_41, all_1_2_2), yields:
% 120.76/76.87 | (49) ! [v0] : ( ~ in(v0, all_117_0_41) | in(v0, all_1_2_2))
% 120.76/76.87 |
% 120.76/76.87 | Instantiating formula (49) with all_106_0_34 and discharging atoms in(all_106_0_34, all_117_0_41), yields:
% 120.76/76.87 | (50) in(all_106_0_34, all_1_2_2)
% 120.76/76.87 |
% 120.76/76.87 | From (32) and (41) follows:
% 120.76/76.87 | (51) ~ in(all_106_0_34, all_1_2_2)
% 120.76/76.87 |
% 120.76/76.87 | Using (50) and (51) yields:
% 120.76/76.87 | (43) $false
% 120.76/76.87 |
% 120.76/76.87 |-The branch is then unsatisfiable
% 120.76/76.87 |-Branch two:
% 120.76/76.87 | (42) in(all_106_0_34, ex_103_0_33)
% 120.76/76.87 | (54) ! [v0] : ( ~ in(v0, all_1_1_1) | ~ in(all_106_0_34, v0))
% 120.76/76.87 |
% 120.76/76.87 | Instantiating formula (54) with all_1_2_2 and discharging atoms in(all_1_2_2, all_1_1_1), yields:
% 120.76/76.87 | (51) ~ in(all_106_0_34, all_1_2_2)
% 120.76/76.87 |
% 120.76/76.87 | From (32) and (42) follows:
% 120.76/76.87 | (50) in(all_106_0_34, all_1_2_2)
% 121.18/76.87 |
% 121.18/76.87 | Using (50) and (51) yields:
% 121.18/76.87 | (43) $false
% 121.18/76.87 |
% 121.18/76.87 |-The branch is then unsatisfiable
% 121.18/76.87 |-Branch two:
% 121.18/76.87 | (58) ~ subset(all_1_2_2, all_1_2_2)
% 121.18/76.87 |
% 121.18/76.87 | From (28)(28) and (29) follows:
% 121.18/76.87 | (59) subset(all_1_2_2, all_1_2_2)
% 121.18/76.87 |
% 121.18/76.87 | Using (59) and (58) yields:
% 121.18/76.87 | (43) $false
% 121.18/76.87 |
% 121.18/76.87 |-The branch is then unsatisfiable
% 121.18/76.87 % SZS output end Proof for theBenchmark
% 121.18/76.87
% 121.18/76.87 76260ms
%------------------------------------------------------------------------------