TSTP Solution File: SET774+4 by Zenon---0.7.1

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Zenon---0.7.1
% Problem  : SET774+4 : TPTP v8.1.0. Released v2.2.0.
% Transfm  : none
% Format   : tptp:raw
% Command  : run_zenon %s %d

% 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  : 600s
% DateTime : Tue Jul 19 06:38:29 EDT 2022

% Result   : Theorem 0.56s 0.76s
% Output   : Proof 0.56s
% Verified : 
% SZS Type : -

% Comments : 
%------------------------------------------------------------------------------
%----WARNING: Could not form TPTP format derivation
%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.07/0.12  % Problem  : SET774+4 : TPTP v8.1.0. Released v2.2.0.
% 0.07/0.13  % Command  : run_zenon %s %d
% 0.13/0.34  % Computer : n011.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  : 600
% 0.13/0.34  % DateTime : Sun Jul 10 10:37:41 EDT 2022
% 0.13/0.34  % CPUTime  : 
% 0.56/0.76  (* PROOF-FOUND *)
% 0.56/0.76  % SZS status Theorem
% 0.56/0.76  (* BEGIN-PROOF *)
% 0.56/0.76  % SZS output start Proof
% 0.56/0.76  Theorem thIII10 : (forall E : zenon_U, (forall X : zenon_U, (forall R : zenon_U, (((pre_order R E)/\(subset X E))->(pre_order R X))))).
% 0.56/0.76  Proof.
% 0.56/0.76  assert (zenon_L1_ : forall (zenon_TX_u : zenon_U) (zenon_TE_v : zenon_U) (zenon_TX_w : zenon_U), (forall X : zenon_U, ((member X zenon_TX_w)->(member X zenon_TE_v))) -> (member zenon_TX_u zenon_TX_w) -> (~(member zenon_TX_u zenon_TE_v)) -> False).
% 0.56/0.76  do 3 intro. intros zenon_H11 zenon_H12 zenon_H13.
% 0.56/0.76  generalize (zenon_H11 zenon_TX_u). zenon_intro zenon_H17.
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H17); [ zenon_intro zenon_H19 | zenon_intro zenon_H18 ].
% 0.56/0.76  exact (zenon_H19 zenon_H12).
% 0.56/0.76  exact (zenon_H13 zenon_H18).
% 0.56/0.76  (* end of lemma zenon_L1_ *)
% 0.56/0.76  assert (zenon_L2_ : forall (zenon_TR_bh : zenon_U) (zenon_TZ_bi : zenon_U) (zenon_TY_bj : zenon_U) (zenon_TE_v : zenon_U) (zenon_TX_u : zenon_U), (~(~(member zenon_TX_u zenon_TE_v))) -> (member zenon_TY_bj zenon_TE_v) -> (member zenon_TZ_bi zenon_TE_v) -> (apply zenon_TR_bh zenon_TX_u zenon_TY_bj) -> (apply zenon_TR_bh zenon_TY_bj zenon_TZ_bi) -> (~(apply zenon_TR_bh zenon_TX_u zenon_TZ_bi)) -> (forall Y : zenon_U, (forall Z : zenon_U, (((member zenon_TX_u zenon_TE_v)/\((member Y zenon_TE_v)/\(member Z zenon_TE_v)))->(((apply zenon_TR_bh zenon_TX_u Y)/\(apply zenon_TR_bh Y Z))->(apply zenon_TR_bh zenon_TX_u Z))))) -> False).
% 0.56/0.76  do 5 intro. intros zenon_H1a zenon_H1b zenon_H1c zenon_H1d zenon_H1e zenon_H1f zenon_H20.
% 0.56/0.76  apply zenon_H1a. zenon_intro zenon_H18.
% 0.56/0.76  generalize (zenon_H20 zenon_TY_bj). zenon_intro zenon_H24.
% 0.56/0.76  generalize (zenon_H24 zenon_TZ_bi). zenon_intro zenon_H25.
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H25); [ zenon_intro zenon_H27 | zenon_intro zenon_H26 ].
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H27); [ zenon_intro zenon_H13 | zenon_intro zenon_H28 ].
% 0.56/0.76  exact (zenon_H13 zenon_H18).
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H28); [ zenon_intro zenon_H2a | zenon_intro zenon_H29 ].
% 0.56/0.76  exact (zenon_H2a zenon_H1b).
% 0.56/0.76  exact (zenon_H29 zenon_H1c).
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H26); [ zenon_intro zenon_H2c | zenon_intro zenon_H2b ].
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H2c); [ zenon_intro zenon_H2e | zenon_intro zenon_H2d ].
% 0.56/0.76  exact (zenon_H2e zenon_H1d).
% 0.56/0.76  exact (zenon_H2d zenon_H1e).
% 0.56/0.76  exact (zenon_H1f zenon_H2b).
% 0.56/0.76  (* end of lemma zenon_L2_ *)
% 0.56/0.76  assert (zenon_L3_ : forall (zenon_TX_w : zenon_U) (zenon_TY_bj : zenon_U) (zenon_TR_bh : zenon_U) (zenon_TX_u : zenon_U) (zenon_TE_v : zenon_U) (zenon_TZ_bi : zenon_U), (~(~(member zenon_TZ_bi zenon_TE_v))) -> (forall Y : zenon_U, (forall Z : zenon_U, (((member zenon_TX_u zenon_TE_v)/\((member Y zenon_TE_v)/\(member Z zenon_TE_v)))->(((apply zenon_TR_bh zenon_TX_u Y)/\(apply zenon_TR_bh Y Z))->(apply zenon_TR_bh zenon_TX_u Z))))) -> (~(apply zenon_TR_bh zenon_TX_u zenon_TZ_bi)) -> (apply zenon_TR_bh zenon_TY_bj zenon_TZ_bi) -> (apply zenon_TR_bh zenon_TX_u zenon_TY_bj) -> (member zenon_TY_bj zenon_TE_v) -> (member zenon_TX_u zenon_TX_w) -> (forall X : zenon_U, ((member X zenon_TX_w)->(member X zenon_TE_v))) -> (forall A : zenon_U, (forall E : zenon_U, ((member zenon_TX_u (difference E A))<->((member zenon_TX_u E)/\(~(member zenon_TX_u A)))))) -> False).
% 0.56/0.76  do 6 intro. intros zenon_H2f zenon_H20 zenon_H1f zenon_H1e zenon_H1d zenon_H1b zenon_H12 zenon_H11 zenon_H30.
% 0.56/0.76  apply zenon_H2f. zenon_intro zenon_H1c.
% 0.56/0.76  generalize (zenon_H30 zenon_TE_v). zenon_intro zenon_H31.
% 0.56/0.76  generalize (zenon_H31 zenon_TE_v). zenon_intro zenon_H32.
% 0.56/0.76  apply (zenon_equiv_s _ _ zenon_H32); [ zenon_intro zenon_H36; zenon_intro zenon_H35 | zenon_intro zenon_H34; zenon_intro zenon_H33 ].
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H35); [ zenon_intro zenon_H13 | zenon_intro zenon_H1a ].
% 0.56/0.76  apply (zenon_L1_ zenon_TX_u zenon_TE_v zenon_TX_w); trivial.
% 0.56/0.76  apply (zenon_L2_ zenon_TR_bh zenon_TZ_bi zenon_TY_bj zenon_TE_v zenon_TX_u); trivial.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H33). zenon_intro zenon_H18. zenon_intro zenon_H13.
% 0.56/0.76  exact (zenon_H13 zenon_H18).
% 0.56/0.76  (* end of lemma zenon_L3_ *)
% 0.56/0.76  assert (zenon_L4_ : forall (zenon_TZ_bi : zenon_U) (zenon_TE_v : zenon_U) (zenon_TX_w : zenon_U), (forall X : zenon_U, ((member X zenon_TX_w)->(member X zenon_TE_v))) -> (member zenon_TZ_bi zenon_TX_w) -> (~(member zenon_TZ_bi zenon_TE_v)) -> False).
% 0.56/0.76  do 3 intro. intros zenon_H11 zenon_H37 zenon_H29.
% 0.56/0.76  generalize (zenon_H11 zenon_TZ_bi). zenon_intro zenon_H38.
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H38); [ zenon_intro zenon_H39 | zenon_intro zenon_H1c ].
% 0.56/0.76  exact (zenon_H39 zenon_H37).
% 0.56/0.76  exact (zenon_H29 zenon_H1c).
% 0.56/0.76  (* end of lemma zenon_L4_ *)
% 0.56/0.76  assert (zenon_L5_ : forall (zenon_TY_bj : zenon_U) (zenon_TR_bh : zenon_U) (zenon_TE_v : zenon_U) (zenon_TX_u : zenon_U) (zenon_TX_w : zenon_U) (zenon_TZ_bi : zenon_U), (forall A : zenon_U, (forall E : zenon_U, ((member zenon_TZ_bi (difference E A))<->((member zenon_TZ_bi E)/\(~(member zenon_TZ_bi A)))))) -> (member zenon_TZ_bi zenon_TX_w) -> (forall Y : zenon_U, (forall Z : zenon_U, (((member zenon_TX_u zenon_TE_v)/\((member Y zenon_TE_v)/\(member Z zenon_TE_v)))->(((apply zenon_TR_bh zenon_TX_u Y)/\(apply zenon_TR_bh Y Z))->(apply zenon_TR_bh zenon_TX_u Z))))) -> (~(apply zenon_TR_bh zenon_TX_u zenon_TZ_bi)) -> (apply zenon_TR_bh zenon_TY_bj zenon_TZ_bi) -> (apply zenon_TR_bh zenon_TX_u zenon_TY_bj) -> (member zenon_TY_bj zenon_TE_v) -> (member zenon_TX_u zenon_TX_w) -> (forall X : zenon_U, ((member X zenon_TX_w)->(member X zenon_TE_v))) -> (forall A : zenon_U, (forall E : zenon_U, ((member zenon_TX_u (difference E A))<->((member zenon_TX_u E)/\(~(member zenon_TX_u A)))))) -> False).
% 0.56/0.76  do 6 intro. intros zenon_H3a zenon_H37 zenon_H20 zenon_H1f zenon_H1e zenon_H1d zenon_H1b zenon_H12 zenon_H11 zenon_H30.
% 0.56/0.76  generalize (zenon_H3a zenon_TE_v). zenon_intro zenon_H3b.
% 0.56/0.76  generalize (zenon_H3b zenon_TX_w). zenon_intro zenon_H3c.
% 0.56/0.76  apply (zenon_equiv_s _ _ zenon_H3c); [ zenon_intro zenon_H40; zenon_intro zenon_H3f | zenon_intro zenon_H3e; zenon_intro zenon_H3d ].
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H3f); [ zenon_intro zenon_H39 | zenon_intro zenon_H2f ].
% 0.56/0.76  exact (zenon_H39 zenon_H37).
% 0.56/0.76  apply (zenon_L3_ zenon_TX_w zenon_TY_bj zenon_TR_bh zenon_TX_u zenon_TE_v zenon_TZ_bi); trivial.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H3d). zenon_intro zenon_H37. zenon_intro zenon_H29.
% 0.56/0.76  apply (zenon_L4_ zenon_TZ_bi zenon_TE_v zenon_TX_w); trivial.
% 0.56/0.76  (* end of lemma zenon_L5_ *)
% 0.56/0.76  assert (zenon_L6_ : forall (zenon_TZ_bi : zenon_U) (zenon_TR_bh : zenon_U) (zenon_TX_w : zenon_U) (zenon_TX_u : zenon_U) (zenon_TE_v : zenon_U) (zenon_TY_bj : zenon_U), (~(~(member zenon_TY_bj zenon_TE_v))) -> (forall A : zenon_U, (forall E : zenon_U, ((member zenon_TX_u (difference E A))<->((member zenon_TX_u E)/\(~(member zenon_TX_u A)))))) -> (forall X : zenon_U, ((member X zenon_TX_w)->(member X zenon_TE_v))) -> (member zenon_TX_u zenon_TX_w) -> (apply zenon_TR_bh zenon_TX_u zenon_TY_bj) -> (apply zenon_TR_bh zenon_TY_bj zenon_TZ_bi) -> (~(apply zenon_TR_bh zenon_TX_u zenon_TZ_bi)) -> (forall Y : zenon_U, (forall Z : zenon_U, (((member zenon_TX_u zenon_TE_v)/\((member Y zenon_TE_v)/\(member Z zenon_TE_v)))->(((apply zenon_TR_bh zenon_TX_u Y)/\(apply zenon_TR_bh Y Z))->(apply zenon_TR_bh zenon_TX_u Z))))) -> (member zenon_TZ_bi zenon_TX_w) -> (forall A : zenon_U, (forall E : zenon_U, ((member zenon_TZ_bi (difference E A))<->((member zenon_TZ_bi E)/\(~(member zenon_TZ_bi A)))))) -> False).
% 0.56/0.76  do 6 intro. intros zenon_H41 zenon_H30 zenon_H11 zenon_H12 zenon_H1d zenon_H1e zenon_H1f zenon_H20 zenon_H37 zenon_H3a.
% 0.56/0.76  apply zenon_H41. zenon_intro zenon_H1b.
% 0.56/0.76  apply (zenon_L5_ zenon_TY_bj zenon_TR_bh zenon_TE_v zenon_TX_u zenon_TX_w zenon_TZ_bi); trivial.
% 0.56/0.76  (* end of lemma zenon_L6_ *)
% 0.56/0.76  assert (zenon_L7_ : forall (zenon_TY_bj : zenon_U) (zenon_TE_v : zenon_U) (zenon_TX_w : zenon_U), (forall X : zenon_U, ((member X zenon_TX_w)->(member X zenon_TE_v))) -> (member zenon_TY_bj zenon_TX_w) -> (~(member zenon_TY_bj zenon_TE_v)) -> False).
% 0.56/0.76  do 3 intro. intros zenon_H11 zenon_H42 zenon_H2a.
% 0.56/0.76  generalize (zenon_H11 zenon_TY_bj). zenon_intro zenon_H43.
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H43); [ zenon_intro zenon_H44 | zenon_intro zenon_H1b ].
% 0.56/0.76  exact (zenon_H44 zenon_H42).
% 0.56/0.76  exact (zenon_H2a zenon_H1b).
% 0.56/0.76  (* end of lemma zenon_L7_ *)
% 0.56/0.76  apply NNPP. intro zenon_G.
% 0.56/0.76  apply (zenon_notallex_s (fun E : zenon_U => (forall X : zenon_U, (forall R : zenon_U, (((pre_order R E)/\(subset X E))->(pre_order R X))))) zenon_G); [ zenon_intro zenon_H45; idtac ].
% 0.56/0.76  elim zenon_H45. zenon_intro zenon_TE_v. zenon_intro zenon_H46.
% 0.56/0.76  apply (zenon_notallex_s (fun X : zenon_U => (forall R : zenon_U, (((pre_order R zenon_TE_v)/\(subset X zenon_TE_v))->(pre_order R X)))) zenon_H46); [ zenon_intro zenon_H47; idtac ].
% 0.56/0.76  elim zenon_H47. zenon_intro zenon_TX_w. zenon_intro zenon_H48.
% 0.56/0.76  apply (zenon_notallex_s (fun R : zenon_U => (((pre_order R zenon_TE_v)/\(subset zenon_TX_w zenon_TE_v))->(pre_order R zenon_TX_w))) zenon_H48); [ zenon_intro zenon_H49; idtac ].
% 0.56/0.76  elim zenon_H49. zenon_intro zenon_TR_bh. zenon_intro zenon_H4a.
% 0.56/0.76  apply (zenon_notimply_s _ _ zenon_H4a). zenon_intro zenon_H4c. zenon_intro zenon_H4b.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H4c). zenon_intro zenon_H4e. zenon_intro zenon_H4d.
% 0.56/0.76  generalize (pre_order zenon_TR_bh). zenon_intro zenon_H4f.
% 0.56/0.76  generalize (zenon_H4f zenon_TE_v). zenon_intro zenon_H50.
% 0.56/0.76  apply (zenon_equiv_s _ _ zenon_H50); [ zenon_intro zenon_H53; zenon_intro zenon_H52 | zenon_intro zenon_H4e; zenon_intro zenon_H51 ].
% 0.56/0.76  exact (zenon_H53 zenon_H4e).
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H51). zenon_intro zenon_H55. zenon_intro zenon_H54.
% 0.56/0.76  generalize (subset zenon_TX_w). zenon_intro zenon_H56.
% 0.56/0.76  generalize (zenon_H56 zenon_TE_v). zenon_intro zenon_H57.
% 0.56/0.76  apply (zenon_equiv_s _ _ zenon_H57); [ zenon_intro zenon_H59; zenon_intro zenon_H58 | zenon_intro zenon_H4d; zenon_intro zenon_H11 ].
% 0.56/0.76  exact (zenon_H59 zenon_H4d).
% 0.56/0.76  generalize (pre_order zenon_TR_bh). zenon_intro zenon_H4f.
% 0.56/0.76  generalize (zenon_H4f zenon_TX_w). zenon_intro zenon_H5a.
% 0.56/0.76  apply (zenon_equiv_s _ _ zenon_H5a); [ zenon_intro zenon_H4b; zenon_intro zenon_H5d | zenon_intro zenon_H5c; zenon_intro zenon_H5b ].
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H5d); [ zenon_intro zenon_H5f | zenon_intro zenon_H5e ].
% 0.56/0.76  apply (zenon_notallex_s (fun X : zenon_U => ((member X zenon_TX_w)->(apply zenon_TR_bh X X))) zenon_H5f); [ zenon_intro zenon_H60; idtac ].
% 0.56/0.76  elim zenon_H60. zenon_intro zenon_TX_dt. zenon_intro zenon_H62.
% 0.56/0.76  apply (zenon_notimply_s _ _ zenon_H62). zenon_intro zenon_H64. zenon_intro zenon_H63.
% 0.56/0.76  generalize (zenon_H55 zenon_TX_dt). zenon_intro zenon_H65.
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H65); [ zenon_intro zenon_H67 | zenon_intro zenon_H66 ].
% 0.56/0.76  generalize (zenon_H11 zenon_TX_dt). zenon_intro zenon_H68.
% 0.56/0.76  apply (zenon_imply_s _ _ zenon_H68); [ zenon_intro zenon_H6a | zenon_intro zenon_H69 ].
% 0.56/0.76  exact (zenon_H6a zenon_H64).
% 0.56/0.76  exact (zenon_H67 zenon_H69).
% 0.56/0.76  exact (zenon_H63 zenon_H66).
% 0.56/0.76  apply (zenon_notallex_s (fun X : zenon_U => (forall Y : zenon_U, (forall Z : zenon_U, (((member X zenon_TX_w)/\((member Y zenon_TX_w)/\(member Z zenon_TX_w)))->(((apply zenon_TR_bh X Y)/\(apply zenon_TR_bh Y Z))->(apply zenon_TR_bh X Z)))))) zenon_H5e); [ zenon_intro zenon_H6b; idtac ].
% 0.56/0.76  elim zenon_H6b. zenon_intro zenon_TX_u. zenon_intro zenon_H6c.
% 0.56/0.76  apply (zenon_notallex_s (fun Y : zenon_U => (forall Z : zenon_U, (((member zenon_TX_u zenon_TX_w)/\((member Y zenon_TX_w)/\(member Z zenon_TX_w)))->(((apply zenon_TR_bh zenon_TX_u Y)/\(apply zenon_TR_bh Y Z))->(apply zenon_TR_bh zenon_TX_u Z))))) zenon_H6c); [ zenon_intro zenon_H6d; idtac ].
% 0.56/0.76  elim zenon_H6d. zenon_intro zenon_TY_bj. zenon_intro zenon_H6e.
% 0.56/0.76  apply (zenon_notallex_s (fun Z : zenon_U => (((member zenon_TX_u zenon_TX_w)/\((member zenon_TY_bj zenon_TX_w)/\(member Z zenon_TX_w)))->(((apply zenon_TR_bh zenon_TX_u zenon_TY_bj)/\(apply zenon_TR_bh zenon_TY_bj Z))->(apply zenon_TR_bh zenon_TX_u Z)))) zenon_H6e); [ zenon_intro zenon_H6f; idtac ].
% 0.56/0.76  elim zenon_H6f. zenon_intro zenon_TZ_bi. zenon_intro zenon_H70.
% 0.56/0.76  apply (zenon_notimply_s _ _ zenon_H70). zenon_intro zenon_H72. zenon_intro zenon_H71.
% 0.56/0.76  apply (zenon_notimply_s _ _ zenon_H71). zenon_intro zenon_H73. zenon_intro zenon_H1f.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H73). zenon_intro zenon_H1d. zenon_intro zenon_H1e.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H72). zenon_intro zenon_H12. zenon_intro zenon_H74.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H74). zenon_intro zenon_H42. zenon_intro zenon_H37.
% 0.56/0.76  generalize (difference zenon_TX_u). zenon_intro zenon_H30.
% 0.56/0.76  generalize (difference zenon_TY_bj). zenon_intro zenon_H75.
% 0.56/0.76  generalize (difference zenon_TZ_bi). zenon_intro zenon_H3a.
% 0.56/0.76  generalize (zenon_H54 zenon_TX_u). zenon_intro zenon_H20.
% 0.56/0.76  generalize (zenon_H75 zenon_TE_v). zenon_intro zenon_H76.
% 0.56/0.76  generalize (zenon_H76 zenon_TX_w). zenon_intro zenon_H77.
% 0.56/0.76  apply (zenon_equiv_s _ _ zenon_H77); [ zenon_intro zenon_H7b; zenon_intro zenon_H7a | zenon_intro zenon_H79; zenon_intro zenon_H78 ].
% 0.56/0.76  apply (zenon_notand_s _ _ zenon_H7a); [ zenon_intro zenon_H44 | zenon_intro zenon_H41 ].
% 0.56/0.76  exact (zenon_H44 zenon_H42).
% 0.56/0.76  apply (zenon_L6_ zenon_TZ_bi zenon_TR_bh zenon_TX_w zenon_TX_u zenon_TE_v zenon_TY_bj); trivial.
% 0.56/0.76  apply (zenon_and_s _ _ zenon_H78). zenon_intro zenon_H42. zenon_intro zenon_H2a.
% 0.56/0.76  apply (zenon_L7_ zenon_TY_bj zenon_TE_v zenon_TX_w); trivial.
% 0.56/0.76  exact (zenon_H4b zenon_H5c).
% 0.56/0.76  Qed.
% 0.56/0.76  % SZS output end Proof
% 0.56/0.76  (* END-PROOF *)
% 0.56/0.76  nodes searched: 10451
% 0.56/0.76  max branch formulas: 1405
% 0.56/0.76  proof nodes created: 447
% 0.56/0.76  formulas created: 49393
% 0.56/0.76  
%------------------------------------------------------------------------------