TPTP Problem File: SWW956+1.p

View Solutions - Solve Problem

%--------------------------------------------------------------------------
% File     : SWW956+1 : TPTP v9.0.0. Released v7.4.0.
% Domain   : Software Verification
% Problem  : Attack on Diffie-Hellman Key Exchange Protocol
% Version  : [LT19] axioms : Especial.
% English  : Attack demonstrates violation of secrecy property.

% Refs     : [BO97]  Bull & Otway (1997), The Authentication Protocol
%          : [RS98]  Ryan & Schneider (1998), An Attack on a Recursive Auth
%          : [LT19]  Li & Tiu (2019), Combining ProVerif and Automated Theo
%          : [Li20]  Li (2020), Email to Geoff Sutcliffe
% Source   : [Li20]
% Names    : DH.p [LT20]

% Status   : Theorem
% Rating   : 0.39 v9.0.0, 0.44 v8.1.0, 0.39 v7.5.0, 0.47 v7.4.0
% Syntax   : Number of formulae    :   94 (  70 unt;   0 def)
%            Number of atoms       :  127 (  57 equ)
%            Maximal formula atoms :    3 (   1 avg)
%            Number of connectives :   88 (  55   ~;   0   |;   9   &)
%                                         (   0 <=>;  24  =>;   0  <=;   0 <~>)
%            Maximal formula depth :    6 (   2 avg)
%            Maximal term depth    :    5 (   1 avg)
%            Number of predicates  :    4 (   3 usr;   0 prp; 1-2 aty)
%            Number of functors    :   25 (  25 usr;  13 con; 0-2 aty)
%            Number of variables   :   46 (  46   !;   0   ?)
% SPC      : FOF_THM_RFO_SEQ

% Comments : Generated by a modified version of ProVerif used in the
%            ProVerif-ATP project [LT19].
%--------------------------------------------------------------------------
fof(ax0,axiom,
    constr_CONST_0x30 != constr_CONST_1 ).

fof(ax1,axiom,
    constr_CONST_0x30 != constr_CONST_2 ).

fof(ax2,axiom,
    constr_CONST_0x30 != constr_CONST_3 ).

fof(ax3,axiom,
    constr_CONST_0x30 != constr_CONST_4 ).

fof(ax4,axiom,
    constr_CONST_0x30 != name_G_8 ).

fof(ax5,axiom,
    constr_CONST_0x30 != name_Na ).

fof(ax6,axiom,
    constr_CONST_0x30 != name_Nb ).

fof(ax7,axiom,
    constr_CONST_0x30 != name_P_7 ).

fof(ax8,axiom,
    constr_CONST_0x30 != name_c ).

fof(ax9,axiom,
    constr_CONST_0x30 != name_objective ).

fof(ax10,axiom,
    constr_CONST_1 != constr_CONST_2 ).

fof(ax11,axiom,
    constr_CONST_1 != constr_CONST_3 ).

fof(ax12,axiom,
    constr_CONST_1 != constr_CONST_4 ).

fof(ax13,axiom,
    constr_CONST_1 != name_G_8 ).

fof(ax14,axiom,
    constr_CONST_1 != name_Na ).

fof(ax15,axiom,
    constr_CONST_1 != name_Nb ).

fof(ax16,axiom,
    constr_CONST_1 != name_P_7 ).

fof(ax17,axiom,
    constr_CONST_1 != name_c ).

fof(ax18,axiom,
    constr_CONST_1 != name_objective ).

fof(ax19,axiom,
    constr_CONST_2 != constr_CONST_3 ).

fof(ax20,axiom,
    constr_CONST_2 != constr_CONST_4 ).

fof(ax21,axiom,
    constr_CONST_2 != name_G_8 ).

fof(ax22,axiom,
    constr_CONST_2 != name_Na ).

fof(ax23,axiom,
    constr_CONST_2 != name_Nb ).

fof(ax24,axiom,
    constr_CONST_2 != name_P_7 ).

fof(ax25,axiom,
    constr_CONST_2 != name_c ).

fof(ax26,axiom,
    constr_CONST_2 != name_objective ).

fof(ax27,axiom,
    constr_CONST_3 != constr_CONST_4 ).

fof(ax28,axiom,
    constr_CONST_3 != name_G_8 ).

fof(ax29,axiom,
    constr_CONST_3 != name_Na ).

fof(ax30,axiom,
    constr_CONST_3 != name_Nb ).

fof(ax31,axiom,
    constr_CONST_3 != name_P_7 ).

fof(ax32,axiom,
    constr_CONST_3 != name_c ).

fof(ax33,axiom,
    constr_CONST_3 != name_objective ).

fof(ax34,axiom,
    constr_CONST_4 != name_G_8 ).

fof(ax35,axiom,
    constr_CONST_4 != name_Na ).

fof(ax36,axiom,
    constr_CONST_4 != name_Nb ).

fof(ax37,axiom,
    constr_CONST_4 != name_P_7 ).

fof(ax38,axiom,
    constr_CONST_4 != name_c ).

fof(ax39,axiom,
    constr_CONST_4 != name_objective ).

fof(ax40,axiom,
    name_G_8 != name_Na ).

fof(ax41,axiom,
    name_G_8 != name_Nb ).

fof(ax42,axiom,
    name_G_8 != name_P_7 ).

fof(ax43,axiom,
    name_G_8 != name_c ).

fof(ax44,axiom,
    name_G_8 != name_objective ).

fof(ax45,axiom,
    name_Na != name_Nb ).

fof(ax46,axiom,
    name_Na != name_P_7 ).

fof(ax47,axiom,
    name_Na != name_c ).

fof(ax48,axiom,
    name_Na != name_objective ).

fof(ax49,axiom,
    name_Nb != name_P_7 ).

fof(ax50,axiom,
    name_Nb != name_c ).

fof(ax51,axiom,
    name_Nb != name_objective ).

fof(ax52,axiom,
    name_P_7 != name_c ).

fof(ax53,axiom,
    name_P_7 != name_objective ).

fof(ax54,axiom,
    name_c != name_objective ).

fof(ax55,axiom,
    ! [VAR_K_0X30,VAR_M_0X30] : constr_dec(constr_enc(VAR_M_0X30,VAR_K_0X30),VAR_K_0X30) = VAR_M_0X30 ).

fof(ax56,axiom,
    ! [VAR_G_0X30,VAR_P_0X30,VAR_X_0X30,VAR_Y_0X30] : constr_mod(constr_exp(constr_exp(VAR_G_0X30,VAR_X_0X30),VAR_Y_0X30),VAR_P_0X30) = constr_mod(constr_exp(constr_exp(VAR_G_0X30,VAR_Y_0X30),VAR_X_0X30),VAR_P_0X30) ).

fof(ax57,axiom,
    pred_attacker(tuple_true) ).

fof(ax58,axiom,
    ! [VAR_V_30X30,VAR_V_31] :
      ( ( pred_attacker(VAR_V_30X30)
        & pred_attacker(VAR_V_31) )
     => pred_attacker(constr_mod(VAR_V_30X30,VAR_V_31)) ) ).

fof(ax59,axiom,
    pred_attacker(tuple_false) ).

fof(ax60,axiom,
    ! [VAR_V_34,VAR_V_35] :
      ( ( pred_attacker(VAR_V_34)
        & pred_attacker(VAR_V_35) )
     => pred_attacker(constr_exp(VAR_V_34,VAR_V_35)) ) ).

fof(ax61,axiom,
    ! [VAR_V_38,VAR_V_39] :
      ( ( pred_attacker(VAR_V_38)
        & pred_attacker(VAR_V_39) )
     => pred_attacker(constr_enc(VAR_V_38,VAR_V_39)) ) ).

fof(ax62,axiom,
    ! [VAR_V_42,VAR_V_43] :
      ( ( pred_attacker(VAR_V_42)
        & pred_attacker(VAR_V_43) )
     => pred_attacker(constr_dec(VAR_V_42,VAR_V_43)) ) ).

fof(ax63,axiom,
    pred_attacker(constr_CONST_4) ).

fof(ax64,axiom,
    pred_attacker(constr_CONST_3) ).

fof(ax65,axiom,
    pred_attacker(constr_CONST_2) ).

fof(ax66,axiom,
    pred_attacker(constr_CONST_1) ).

fof(ax67,axiom,
    pred_attacker(constr_CONST_0x30) ).

fof(ax68,axiom,
    ! [VAR_V_45] :
      ( pred_attacker(VAR_V_45)
     => pred_attacker(tuple_B_out_3(VAR_V_45)) ) ).

fof(ax69,axiom,
    ! [VAR_V_48] :
      ( pred_attacker(tuple_B_out_3(VAR_V_48))
     => pred_attacker(VAR_V_48) ) ).

fof(ax70,axiom,
    ! [VAR_V_51] :
      ( pred_attacker(VAR_V_51)
     => pred_attacker(tuple_B_in_2(VAR_V_51)) ) ).

fof(ax71,axiom,
    ! [VAR_V_54] :
      ( pred_attacker(tuple_B_in_2(VAR_V_54))
     => pred_attacker(VAR_V_54) ) ).

fof(ax72,axiom,
    ! [VAR_V_58,VAR_V_59] :
      ( ( pred_attacker(VAR_V_58)
        & pred_attacker(VAR_V_59) )
     => pred_attacker(tuple_B_in_1(VAR_V_58,VAR_V_59)) ) ).

fof(ax73,axiom,
    ! [VAR_V_66,VAR_V_67] :
      ( pred_attacker(tuple_B_in_1(VAR_V_66,VAR_V_67))
     => pred_attacker(VAR_V_66) ) ).

fof(ax74,axiom,
    ! [VAR_V_69,VAR_V_70X30] :
      ( pred_attacker(tuple_B_in_1(VAR_V_69,VAR_V_70X30))
     => pred_attacker(VAR_V_70X30) ) ).

fof(ax75,axiom,
    ! [VAR_V_73] :
      ( pred_attacker(VAR_V_73)
     => pred_attacker(tuple_A_out_4(VAR_V_73)) ) ).

fof(ax76,axiom,
    ! [VAR_V_76] :
      ( pred_attacker(tuple_A_out_4(VAR_V_76))
     => pred_attacker(VAR_V_76) ) ).

fof(ax77,axiom,
    ! [VAR_V_79] :
      ( pred_attacker(VAR_V_79)
     => pred_attacker(tuple_A_out_2(VAR_V_79)) ) ).

fof(ax78,axiom,
    ! [VAR_V_82] :
      ( pred_attacker(tuple_A_out_2(VAR_V_82))
     => pred_attacker(VAR_V_82) ) ).

fof(ax79,axiom,
    ! [VAR_V_86,VAR_V_87] :
      ( ( pred_attacker(VAR_V_86)
        & pred_attacker(VAR_V_87) )
     => pred_attacker(tuple_A_out_1(VAR_V_86,VAR_V_87)) ) ).

fof(ax80,axiom,
    ! [VAR_V_94,VAR_V_95] :
      ( pred_attacker(tuple_A_out_1(VAR_V_94,VAR_V_95))
     => pred_attacker(VAR_V_94) ) ).

fof(ax81,axiom,
    ! [VAR_V_97,VAR_V_98] :
      ( pred_attacker(tuple_A_out_1(VAR_V_97,VAR_V_98))
     => pred_attacker(VAR_V_98) ) ).

fof(ax82,axiom,
    ! [VAR_V_10X301] :
      ( pred_attacker(VAR_V_10X301)
     => pred_attacker(tuple_A_in_3(VAR_V_10X301)) ) ).

fof(ax83,axiom,
    ! [VAR_V_10X304] :
      ( pred_attacker(tuple_A_in_3(VAR_V_10X304))
     => pred_attacker(VAR_V_10X304) ) ).

fof(ax84,axiom,
    ! [VAR_V_110X30,VAR_V_111] :
      ( ( pred_mess(VAR_V_111,VAR_V_110X30)
        & pred_attacker(VAR_V_111) )
     => pred_attacker(VAR_V_110X30) ) ).

fof(ax85,axiom,
    ! [VAR_V_112,VAR_V_113] :
      ( ( pred_attacker(VAR_V_113)
        & pred_attacker(VAR_V_112) )
     => pred_mess(VAR_V_113,VAR_V_112) ) ).

fof(ax86,axiom,
    pred_attacker(name_c) ).

fof(ax87,axiom,
    ! [VAR_V_115] : pred_equal(VAR_V_115,VAR_V_115) ).

fof(ax88,axiom,
    ! [VAR_V_116] : pred_attacker(name_new0x2Dname(VAR_V_116)) ).

fof(ax89,axiom,
    pred_attacker(tuple_A_out_1(name_P_7,name_G_8)) ).

fof(ax90,axiom,
    pred_attacker(tuple_A_out_2(constr_mod(constr_exp(name_G_8,name_Na),name_P_7))) ).

fof(ax91,axiom,
    ! [VAR_B_186] :
      ( pred_attacker(tuple_A_in_3(VAR_B_186))
     => pred_attacker(tuple_A_out_4(constr_enc(name_objective,constr_mod(constr_exp(VAR_B_186,name_Na),name_P_7)))) ) ).

fof(ax92,axiom,
    ! [VAR_A_219,VAR_G_221,VAR_P_220X30] :
      ( ( pred_attacker(tuple_B_in_2(VAR_A_219))
        & pred_attacker(tuple_B_in_1(VAR_P_220X30,VAR_G_221)) )
     => pred_attacker(tuple_B_out_3(constr_mod(constr_exp(VAR_G_221,name_Nb),VAR_P_220X30))) ) ).

fof(co0,conjecture,
    pred_attacker(name_objective) ).

%--------------------------------------------------------------------------