(* [sigd] Signature definition. *)

Inductive term : Set :=
    alice : term
  | bob : term
  | cons : term -> term -> term
  | crypt : term -> term -> term
  | f1 : term -> term -> term -> term
  | f2 : term -> term -> term
  | f3 : term -> term -> term
  | f4 : term -> term -> term
  | f5 : term -> term -> term
  | h : term -> term
  | i : term
  | key : term -> term -> term
  | nai : term -> term
  | nil : term
  | nonces_current : term -> term -> term -> term
  | nonces_old : term -> term -> term -> term
  | prv : term
  | pub : term
  | request_id : term
  | respond_id : term
  | s : term -> term
  | server : term
  | session_current : term -> term -> term -> term
  | session_old : term -> term -> term -> term
  | success : term
  | sym : term
.

(* [modd] Model definition. *)

Inductive auto___type_21 : term -> Prop :=
    trans___type_21_1 : forall X:term, auto___type_21 X
with auto___type_20 : term -> Prop :=
    trans___type_20_1 : forall X:term, auto___type_20 X
with auto___type_19 : term -> Prop :=
    trans___type_19_1 : forall X:term, auto___type_19 X
with auto___type_2 : term -> Prop :=
    trans___type_2_s_1 : forall X1:term, auto_knows_old X1 -> auto___type_2 (s X1)
  | trans___type_2_nil_1 : auto___type_2 nil
  | trans___type_2_h_1 : forall X1:term, auto___def_44 X1 -> auto___type_2 (h X1)
  | trans___type_2_h_2 : forall X1:term, auto___def_26 X1 -> auto___type_2 (h X1)
  | trans___type_2_h_3 : forall X1:term, auto_knows_old X1 -> auto___type_2 (h X1)
  | trans___type_2_respond_id_1 : auto___type_2 respond_id
  | trans___type_2_f2_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_2 (f2 X1 X2)
  | trans___type_2_success_1 : auto___type_2 success
  | trans___type_2_request_id_1 : auto___type_2 request_id
  | trans___type_2_crypt_1 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_2 (crypt X1 X2)
  | trans___type_2_crypt_2 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_2 (crypt X1 X2)
  | trans___type_2_nai_1 : forall X1:term, auto_agent X1 -> auto___type_2 (nai X1)
  | trans___type_2_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_2 (nonces_old X1 X2 X3)
  | trans___type_2_cons_1 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_2 (cons X1 X2)
  | trans___type_2_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_2 (f1 X1 X2 X3)
with auto___def_32 : term -> Prop :=
    trans___def_32_cons_1 : forall X1 X2:term, auto___def_33 X1 -> auto___def_24 X2 -> auto___def_32 (cons X1 X2)
with auto___def_66 : term -> Prop :=
    trans___def_66_sym_1 : auto___def_66 sym
with auto___def_96 : term -> Prop :=
    trans___def_96_f4_1 : forall X1 X2:term, auto___def_87 X1 -> auto___def_79 X2 -> auto___def_96 (f4 X1 X2)
with auto___def_94 : term -> Prop :=
    trans___def_94_cons_1 : forall X1 X2:term, auto___type_12 X1 -> auto___def_95 X2 -> auto___def_94 (cons X1 X2)
with auto___def_134 : term -> Prop :=
    trans___def_134_nil_1 : auto___def_134 nil
with auto___def_31 : term -> Prop :=
    trans___def_31_f4_1 : forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_31 (f4 X1 X2)
with auto___def_9 : term -> Prop :=
    trans___def_9_s_1 : forall X1:term, auto_knows_old X1 -> auto___def_9 (s X1)
  | trans___def_9_nil_1 : auto___def_9 nil
  | trans___def_9_h_1 : forall X1:term, auto___def_44 X1 -> auto___def_9 (h X1)
  | trans___def_9_h_2 : forall X1:term, auto___def_26 X1 -> auto___def_9 (h X1)
  | trans___def_9_h_3 : forall X1:term, auto_knows_old X1 -> auto___def_9 (h X1)
  | trans___def_9_respond_id_1 : auto___def_9 respond_id
  | trans___def_9_f2_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_9 (f2 X1 X2)
  | trans___def_9_success_1 : auto___def_9 success
  | trans___def_9_request_id_1 : auto___def_9 request_id
  | trans___def_9_crypt_1 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_9 (crypt X1 X2)
  | trans___def_9_crypt_2 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___def_9 (crypt X1 X2)
  | trans___def_9_nai_1 : forall X1:term, auto_agent X1 -> auto___def_9 (nai X1)
  | trans___def_9_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 (nonces_old X1 X2 X3)
  | trans___def_9_cons_1 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___def_9 (cons X1 X2)
  | trans___def_9_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_9 (f1 X1 X2 X3)
with auto___def_30 : term -> Prop :=
    trans___def_30_cons_1 : forall X1 X2:term, auto___def_31 X1 -> auto___def_32 X2 -> auto___def_30 (cons X1 X2)
with auto___def_38 : term -> Prop :=
    trans___def_38_key_1 : forall X1 X2:term, auto___def_39 X1 -> auto___def_40 X2 -> auto___def_38 (key X1 X2)
with auto___def_111 : term -> Prop :=
    trans___def_111_cons_1 : forall X1 X2:term, auto___def_101 X1 -> auto___def_107 X2 -> auto___def_111 (cons X1 X2)
with auto___def_45 : term -> Prop :=
    trans___def_45_h_1 : forall X1:term, auto___def_47 X1 -> auto___def_45 (h X1)
with auto___def_63 : term -> Prop :=
    trans___def_63_f4_1 : forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto___def_63 (f4 X1 X2)
with auto___def_110 : term -> Prop :=
    trans___def_110_h_1 : forall X1:term, auto___def_112 X1 -> auto___def_110 (h X1)
with auto___def_26 : term -> Prop :=
    trans___def_26_cons_1 : forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto___def_26 (cons X1 X2)
with auto___def_60 : term -> Prop :=
    trans___def_60_cons_1 : forall X1 X2:term, auto___type_8 X1 -> auto___def_61 X2 -> auto___def_60 (cons X1 X2)
with auto___def_65 : term -> Prop :=
    trans___def_65_key_1 : forall X1 X2:term, auto___def_66 X1 -> auto___def_67 X2 -> auto___def_65 (key X1 X2)
with auto___type_11 : term -> Prop :=
    trans___type_11_i_1 : auto___type_11 i
  | trans___type_11_bob_1 : auto___type_11 bob
  | trans___type_11_server_1 : auto___type_11 server
  | trans___type_11_alice_1 : auto___type_11 alice
with auto___def_46 : term -> Prop :=
    trans___def_46_cons_1 : forall X1 X2:term, auto___def_36 X1 -> auto___def_42 X2 -> auto___def_46 (cons X1 X2)
with auto___def_7 : term -> Prop :=
    trans___def_7_respond_id_1 : auto___def_7 respond_id
with auto___def_62 : term -> term -> term -> Prop :=
    trans___def_62_1 : forall X1 X2 X3:term, auto___type_1 X1 -> auto_agent X2 -> auto___def_10 X3 -> auto___def_62 X1 X2 X3
with auto___def_40 : term -> Prop :=
    trans___def_40_cons_1 : forall X1 X2:term, auto___type_4 X1 -> auto___def_41 X2 -> auto___def_40 (cons X1 X2)
with auto_peer_keys_current : term -> term -> term -> Prop :=
    trans_peer_keys_current_1 : forall X1 X2 X3:term, auto_peer_keys_current X1 X2 X3
with auto___def_90 : term -> Prop :=
    trans___def_90_h_1 : forall X1:term, auto___def_91 X1 -> auto___def_90 (h X1)
with auto___def_37 : term -> Prop :=
    trans___def_37_cons_1 : forall X1 X2:term, auto___def_43 X1 -> auto___def_42 X2 -> auto___def_37 (cons X1 X2)
with auto___type_9 : term -> Prop :=
    trans___type_9_i_1 : auto___type_9 i
  | trans___type_9_bob_1 : auto___type_9 bob
  | trans___type_9_server_1 : auto___type_9 server
  | trans___type_9_alice_1 : auto___type_9 alice
with auto___def_61 : term -> Prop :=
    trans___def_61_nil_1 : auto___def_61 nil
with auto___def_133 : term -> Prop :=
    trans___def_133_cons_1 : forall X1 X2:term, auto___def_133 (cons X1 X2)
with auto___type_8 : term -> Prop :=
    trans___type_8_i_1 : auto___type_8 i
  | trans___type_8_bob_1 : auto___type_8 bob
  | trans___type_8_server_1 : auto___type_8 server
  | trans___type_8_alice_1 : auto___type_8 alice
with auto___def_49 : term -> Prop :=
    trans___def_49_f4_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_49 (f4 X1 X2)
with auto___type_13 : term -> Prop :=
    trans___type_13_nonces_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_13 (nonces_current X1 X2 X3)
  | trans___type_13_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_13 (nonces_old X1 X2 X3)
with auto___type_3 : term -> Prop :=
    trans___type_3_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_3 (nonces_old X1 X2 X3)
with auto___def_35 : term -> term -> term -> term -> Prop :=
    trans___def_35_1 : forall X1 X2 X3 X4:term, auto___type_1 X1 -> auto_agent X2 -> auto___type_2 X3 -> auto___def_10 X4 -> auto___def_35 X1 X2 X3 X4
with auto___def_56 : term -> Prop :=
    trans___def_56_key_1 : forall X1 X2:term, auto___def_58 X1 -> auto___def_59 X2 -> auto___def_56 (key X1 X2)
with auto___def_83 : term -> Prop :=
    trans___def_83_crypt_1 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_83 (crypt X1 X2)
with auto___def_118 : term -> term -> term -> Prop :=
    trans___def_118_1 : forall X1 X2 X3:term, auto___type_14 X1 -> auto_agent X1 -> auto___type_15 X2 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_118 X1 X2 X3
with auto___def_92 : term -> Prop :=
    trans___def_92_h_1 : forall X1:term, auto___def_94 X1 -> auto___def_92 (h X1)
with auto___def_119 : term -> Prop :=
    trans___def_119_f4_1 : forall X1 X2:term, auto___def_121 X1 -> auto___def_122 X2 -> auto___def_119 (f4 X1 X2)
with auto___def_67 : term -> Prop :=
    trans___def_67_cons_1 : forall X1 X2:term, auto___type_11 X1 -> auto___def_68 X2 -> auto___def_67 (cons X1 X2)
with auto___def_124 : term -> Prop :=
    trans___def_124_cons_1 : forall X1 X2:term, auto___type_17 X1 -> auto___def_125 X2 -> auto___def_124 (cons X1 X2)
with auto___def_117 : term -> term -> term -> Prop :=
    trans___def_117_1 : forall X1 X2 X3:term, auto___type_14 X1 -> auto_agent X1 -> auto___type_15 X2 -> auto_agent X2 -> auto___def_78 X3 -> auto___def_117 X1 X2 X3
with auto___type_14 : term -> Prop :=
    trans___type_14_i_1 : auto___type_14 i
  | trans___type_14_bob_1 : auto___type_14 bob
  | trans___type_14_server_1 : auto___type_14 server
  | trans___type_14_alice_1 : auto___type_14 alice
with auto___def_50 : term -> Prop :=
    trans___def_50_cons_1 : forall X1 X2:term, auto___def_51 X1 -> auto___def_42 X2 -> auto___def_50 (cons X1 X2)
with auto___def_84 : term -> Prop :=
    trans___def_84_cons_1 : forall X1 X2:term, auto___def_88 X1 -> auto___def_89 X2 -> auto___def_84 (cons X1 X2)
with auto___def_29 : term -> Prop :=
    trans___def_29_cons_1 : forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto___def_29 (cons X1 X2)
with auto___def_58 : term -> Prop :=
    trans___def_58_sym_1 : auto___def_58 sym
with auto___type_4 : term -> Prop :=
    trans___type_4_i_1 : auto___type_4 i
  | trans___type_4_bob_1 : auto___type_4 bob
  | trans___type_4_server_1 : auto___type_4 server
  | trans___type_4_alice_1 : auto___type_4 alice
with auto___def_91 : term -> Prop :=
    trans___def_91_cons_1 : forall X1 X2:term, auto___def_92 X1 -> auto___def_93 X2 -> auto___def_91 (cons X1 X2)
with auto___def_127 : term -> term -> term -> Prop :=
    trans___def_127_1 : forall X1 X2 X3:term, auto___def_127 X1 X2 X3
with auto___def_69 : term -> Prop :=
    trans___def_69_nil_1 : auto___def_69 nil
with auto___def_121 : term -> Prop :=
    trans___def_121_key_1 : forall X1 X2:term, auto___def_123 X1 -> auto___def_124 X2 -> auto___def_121 (key X1 X2)
with auto___def_21 : term -> Prop :=
    trans___def_21_cons_1 : forall X1 X2:term, auto_agent X1 -> auto___def_22 X2 -> auto___def_21 (cons X1 X2)
with auto___type_15 : term -> Prop :=
    trans___type_15_i_1 : auto___type_15 i
  | trans___type_15_bob_1 : auto___type_15 bob
  | trans___type_15_server_1 : auto___type_15 server
  | trans___type_15_alice_1 : auto___type_15 alice
with auto___type_10 : term -> Prop :=
    trans___type_10_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_10 (nonces_old X1 X2 X3)
with auto___def_43 : term -> Prop :=
    trans___def_43_h_1 : forall X1:term, auto___def_44 X1 -> auto___def_43 (h X1)
with auto___def_120 : term -> Prop :=
    trans___def_120_f3_1 : forall X1 X2:term, auto___def_121 X1 -> auto___def_122 X2 -> auto___def_120 (f3 X1 X2)
with auto___def_126 : term -> Prop :=
    trans___def_126_nil_1 : auto___def_126 nil
with auto___def_108 : term -> Prop :=
    trans___def_108_h_1 : forall X1:term, auto___def_109 X1 -> auto___def_108 (h X1)
with auto___def_76 : term -> Prop :=
    trans___def_76_respond_id_1 : auto___def_76 respond_id
with auto___def_54 : term -> Prop :=
    trans___def_54_f4_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_54 (f4 X1 X2)
with auto___def_130 : term -> Prop :=
    trans___def_130_key_1 : forall X1 X2:term, auto___def_130 (key X1 X2)
with auto___def_16 : term -> Prop :=
    trans___def_16_session_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_16 (session_old X1 X2 X3)
with auto___def_14 : term -> Prop :=
    trans___def_14_crypt_1 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_14 (crypt X1 X2)
with auto___def_17 : term -> Prop :=
    trans___def_17_f5_1 : forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_17 (f5 X1 X2)
with auto___def_52 : term -> term -> term -> Prop :=
    trans___def_52_1 : forall X1 X2 X3:term, auto___type_4 X1 -> auto_agent X1 -> auto_agent X2 -> auto___type_5 X2 -> auto___def_9 X3 -> auto___type_6 X3 -> auto___def_52 X1 X2 X3
with auto___def_80 : term -> Prop :=
    trans___def_80_cons_1 : forall X1 X2:term, auto___def_81 X1 -> auto___def_82 X2 -> auto___def_80 (cons X1 X2)
with auto___def_77 : term -> Prop :=
    trans___def_77_nai_1 : forall X1:term, auto_agent X1 -> auto___def_77 (nai X1)
with auto___def_106 : term -> Prop :=
    trans___def_106_cons_1 : forall X1 X2:term, auto___type_15 X1 -> auto___def_107 X2 -> auto___def_106 (cons X1 X2)
with auto___def_131 : term -> Prop :=
    trans___def_131_sym_1 : auto___def_131 sym
with auto___def_82 : term -> Prop :=
    trans___def_82_cons_1 : forall X1 X2:term, auto___def_90 X1 -> auto___def_89 X2 -> auto___def_82 (cons X1 X2)
with auto___def_34 : term -> Prop :=
    trans___def_34_cons_1 : forall X1 X2:term, auto___def_12 X1 -> auto___def_24 X2 -> auto___def_34 (cons X1 X2)
with auto___def_36 : term -> Prop :=
    trans___def_36_f2_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_36 (f2 X1 X2)
with auto___def_98 : term -> Prop :=
    trans___def_98_f3_1 : forall X1 X2:term, auto___def_87 X1 -> auto___def_79 X2 -> auto___def_98 (f3 X1 X2)
with auto___def_99 : term -> Prop :=
    trans___def_99_cons_1 : forall X1 X2:term, auto___def_81 X1 -> auto___def_89 X2 -> auto___def_99 (cons X1 X2)
with auto___def_64 : term -> Prop :=
    trans___def_64_f3_1 : forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto___def_64 (f3 X1 X2)
with auto___def_13 : term -> Prop :=
    trans___def_13_cons_1 : forall X1 X2:term, auto___def_25 X1 -> auto___def_24 X2 -> auto___def_13 (cons X1 X2)
with auto___def_53 : term -> term -> term -> Prop :=
    trans___def_53_1 : forall X1 X2 X3:term, auto___type_4 X1 -> auto_agent X1 -> auto_agent X2 -> auto___type_5 X2 -> auto___type_6 X3 -> auto_knows_old X3 -> auto___def_53 X1 X2 X3
with auto_agent : term -> Prop :=
    trans_agent_i_1 : auto_agent i
  | trans_agent_bob_1 : auto_agent bob
  | trans_agent_server_1 : auto_agent server
  | trans_agent_alice_1 : auto_agent alice
with auto___def_59 : term -> Prop :=
    trans___def_59_cons_1 : forall X1 X2:term, auto___type_7 X1 -> auto___def_60 X2 -> auto___def_59 (cons X1 X2)
with auto___def_12 : term -> Prop :=
    trans___def_12_cons_1 : forall X1 X2:term, auto___def_14 X1 -> auto___def_15 X2 -> auto___def_12 (cons X1 X2)
with auto___def_105 : term -> Prop :=
    trans___def_105_cons_1 : forall X1 X2:term, auto___type_14 X1 -> auto___def_106 X2 -> auto___def_105 (cons X1 X2)
with auto___def_104 : term -> Prop :=
    trans___def_104_sym_1 : auto___def_104 sym
with auto___def_101 : term -> Prop :=
    trans___def_101_f2_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_101 (f2 X1 X2)
with auto___def_57 : term -> Prop :=
    trans___def_57_nonces_old_1 : forall X1 X2 X3:term, auto___type_6 X1 -> auto_knows_old X1 -> auto___type_4 X2 -> auto_agent X2 -> auto_agent X3 -> auto___type_5 X3 -> auto___def_57 (nonces_old X1 X2 X3)
with auto___def_123 : term -> Prop :=
    trans___def_123_sym_1 : auto___def_123 sym
with auto___type_18 : term -> Prop :=
    trans___type_18_i_1 : auto___type_18 i
  | trans___type_18_bob_1 : auto___type_18 bob
  | trans___type_18_server_1 : auto___type_18 server
  | trans___type_18_alice_1 : auto___type_18 alice
with auto___def_122 : term -> Prop :=
    trans___def_122_nonces_current_1 : forall X1 X2 X3:term, auto_knows_current X1 -> auto___type_14 X2 -> auto_agent X2 -> auto___type_15 X3 -> auto_agent X3 -> auto___def_122 (nonces_current X1 X2 X3)
with auto___def_48 : term -> Prop :=
    trans___def_48_cons_1 : forall X1 X2:term, auto___def_49 X1 -> auto___def_50 X2 -> auto___def_48 (cons X1 X2)
with auto___def_11 : term -> Prop :=
    trans___def_11_cons_1 : forall X1 X2:term, auto___def_12 X1 -> auto___def_13 X2 -> auto___def_11 (cons X1 X2)
with auto___def_109 : term -> Prop :=
    trans___def_109_cons_1 : forall X1 X2:term, auto___def_110 X1 -> auto___def_111 X2 -> auto___def_109 (cons X1 X2)
with auto___type_1 : term -> Prop :=
    trans___type_1_i_1 : auto___type_1 i
  | trans___type_1_bob_1 : auto___type_1 bob
  | trans___type_1_server_1 : auto___type_1 server
  | trans___type_1_alice_1 : auto___type_1 alice
with auto___def_87 : term -> Prop :=
    trans___def_87_key_1 : forall X1 X2:term, auto___def_19 X1 -> auto___def_20 X2 -> auto___def_87 (key X1 X2)
with auto___def_44 : term -> Prop :=
    trans___def_44_cons_1 : forall X1 X2:term, auto___def_45 X1 -> auto___def_46 X2 -> auto___def_44 (cons X1 X2)
with auto___type_12 : term -> Prop :=
    trans___type_12_s_1 : forall X1:term, auto_knows_current X1 -> auto___type_12 (s X1)
  | trans___type_12_nil_1 : auto___type_12 nil
  | trans___type_12_f3_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_12 (f3 X1 X2)
  | trans___type_12_h_1 : forall X1:term, auto___def_109 X1 -> auto___type_12 (h X1)
  | trans___type_12_h_2 : forall X1:term, auto___def_91 X1 -> auto___type_12 (h X1)
  | trans___type_12_h_3 : forall X1:term, auto_knows_current X1 -> auto___type_12 (h X1)
  | trans___type_12_nonces_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_12 (nonces_current X1 X2 X3)
  | trans___type_12_respond_id_1 : auto___type_12 respond_id
  | trans___type_12_f2_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_12 (f2 X1 X2)
  | trans___type_12_success_1 : auto___type_12 success
  | trans___type_12_request_id_1 : auto___type_12 request_id
  | trans___type_12_crypt_1 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___type_12 (crypt X1 X2)
  | trans___type_12_crypt_2 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_12 (crypt X1 X2)
  | trans___type_12_crypt_3 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_12 (crypt X1 X2)
  | trans___type_12_nai_1 : forall X1:term, auto_agent X1 -> auto___type_12 (nai X1)
  | trans___type_12_f4_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_12 (f4 X1 X2)
  | trans___type_12_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_12 (nonces_old X1 X2 X3)
  | trans___type_12_cons_1 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_12 (cons X1 X2)
  | trans___type_12_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_12 (f1 X1 X2 X3)
  | trans___type_12_f1_2 : forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___type_12 (f1 X1 X2 X3)
with auto___def_85 : term -> Prop :=
    trans___def_85_session_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_85 (session_current X1 X2 X3)
with auto___def_19 : term -> Prop :=
    trans___def_19_sym_1 : auto___def_19 sym
with auto___def_132 : term -> Prop :=
    trans___def_132_cons_1 : forall X1 X2:term, auto___def_132 (cons X1 X2)
with auto___def_51 : term -> Prop :=
    trans___def_51_f3_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_51 (f3 X1 X2)
with auto___def_81 : term -> Prop :=
    trans___def_81_cons_1 : forall X1 X2:term, auto___def_83 X1 -> auto___def_84 X2 -> auto___def_81 (cons X1 X2)
with auto___type_6 : term -> Prop :=
    trans___type_6_s_1 : forall X1:term, auto_knows_old X1 -> auto___type_6 (s X1)
  | trans___type_6_nil_1 : auto___type_6 nil
  | trans___type_6_h_1 : forall X1:term, auto___def_44 X1 -> auto___type_6 (h X1)
  | trans___type_6_h_2 : forall X1:term, auto___def_26 X1 -> auto___type_6 (h X1)
  | trans___type_6_h_3 : forall X1:term, auto_knows_old X1 -> auto___type_6 (h X1)
  | trans___type_6_respond_id_1 : auto___type_6 respond_id
  | trans___type_6_f2_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_6 (f2 X1 X2)
  | trans___type_6_success_1 : auto___type_6 success
  | trans___type_6_request_id_1 : auto___type_6 request_id
  | trans___type_6_crypt_1 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_6 (crypt X1 X2)
  | trans___type_6_crypt_2 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (crypt X1 X2)
  | trans___type_6_nai_1 : forall X1:term, auto_agent X1 -> auto___type_6 (nai X1)
  | trans___type_6_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_6 (nonces_old X1 X2 X3)
  | trans___type_6_cons_1 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (cons X1 X2)
  | trans___type_6_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_6 (f1 X1 X2 X3)
with auto___def_89 : term -> Prop :=
    trans___def_89_nil_1 : auto___def_89 nil
with auto___def_78 : term -> Prop :=
    trans___def_78_s_1 : forall X1:term, auto_knows_current X1 -> auto___def_78 (s X1)
  | trans___def_78_nil_1 : auto___def_78 nil
  | trans___def_78_f3_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_78 (f3 X1 X2)
  | trans___def_78_h_1 : forall X1:term, auto___def_109 X1 -> auto___def_78 (h X1)
  | trans___def_78_h_2 : forall X1:term, auto___def_91 X1 -> auto___def_78 (h X1)
  | trans___def_78_h_3 : forall X1:term, auto_knows_current X1 -> auto___def_78 (h X1)
  | trans___def_78_nonces_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 (nonces_current X1 X2 X3)
  | trans___def_78_respond_id_1 : auto___def_78 respond_id
  | trans___def_78_f2_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_78 (f2 X1 X2)
  | trans___def_78_success_1 : auto___def_78 success
  | trans___def_78_request_id_1 : auto___def_78 request_id
  | trans___def_78_crypt_1 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_78 (crypt X1 X2)
  | trans___def_78_crypt_2 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___def_78 (crypt X1 X2)
  | trans___def_78_crypt_3 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_78 (crypt X1 X2)
  | trans___def_78_nai_1 : forall X1:term, auto_agent X1 -> auto___def_78 (nai X1)
  | trans___def_78_f4_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_78 (f4 X1 X2)
  | trans___def_78_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 (nonces_old X1 X2 X3)
  | trans___def_78_cons_1 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___def_78 (cons X1 X2)
  | trans___def_78_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_78 (f1 X1 X2 X3)
  | trans___def_78_f1_2 : forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_78 (f1 X1 X2 X3)
with auto___def_113 : term -> Prop :=
    trans___def_113_cons_1 : forall X1 X2:term, auto___def_114 X1 -> auto___def_115 X2 -> auto___def_113 (cons X1 X2)
with auto___def_33 : term -> Prop :=
    trans___def_33_f3_1 : forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_33 (f3 X1 X2)
with auto___def_15 : term -> Prop :=
    trans___def_15_cons_1 : forall X1 X2:term, auto___def_23 X1 -> auto___def_24 X2 -> auto___def_15 (cons X1 X2)
with auto___def_129 : term -> Prop :=
    trans___def_129_f3_1 : forall X1 X2:term, auto___def_129 (f3 X1 X2)
with auto_server_keys_current : term -> term -> term -> Prop :=
    trans_server_keys_current_1 : forall X1 X2 X3:term, auto___type_17 X1 -> auto___def_119 X2 -> auto___def_120 X3 -> auto_server_keys_current X1 X2 X3
with auto___def_68 : term -> Prop :=
    trans___def_68_cons_1 : forall X1 X2:term, auto___type_9 X1 -> auto___def_69 X2 -> auto___def_68 (cons X1 X2)
with auto___def_20 : term -> Prop :=
    trans___def_20_cons_1 : forall X1 X2:term, auto___type_1 X1 -> auto___def_21 X2 -> auto___def_20 (cons X1 X2)
with auto___def_125 : term -> Prop :=
    trans___def_125_cons_1 : forall X1 X2:term, auto___type_18 X1 -> auto___def_126 X2 -> auto___def_125 (cons X1 X2)
with auto___def_100 : term -> term -> term -> term -> Prop :=
    trans___def_100_1 : forall X1 X2 X3 X4:term, auto___type_1 X1 -> auto_agent X2 -> auto___type_12 X3 -> auto___def_79 X4 -> auto___def_100 X1 X2 X3 X4
  | trans___def_100_2 : forall X1 X2 X3 X4:term, auto___type_11 X1 -> auto___type_1 X1 -> auto___type_9 X2 -> auto_agent X2 -> auto_knows_current X3 -> auto___type_10 X4 -> auto___def_10 X4 -> auto_knows_current X4 -> auto___def_100 X1 X2 X3 X4
with auto___def_114 : term -> Prop :=
    trans___def_114_f4_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_114 (f4 X1 X2)
with auto___def_79 : term -> Prop :=
    trans___def_79_nonces_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_79 (nonces_current X1 X2 X3)
with auto___def_115 : term -> Prop :=
    trans___def_115_cons_1 : forall X1 X2:term, auto___def_116 X1 -> auto___def_107 X2 -> auto___def_115 (cons X1 X2)
with auto___def_128 : term -> Prop :=
    trans___def_128_f4_1 : forall X1 X2:term, auto___def_128 (f4 X1 X2)
with auto___def_27 : term -> Prop :=
    trans___def_27_h_1 : forall X1:term, auto___def_29 X1 -> auto___def_27 (h X1)
with auto___def_47 : term -> Prop :=
    trans___def_47_cons_1 : forall X1 X2:term, auto___type_6 X1 -> auto___def_48 X2 -> auto___def_47 (cons X1 X2)
with auto___def_88 : term -> Prop :=
    trans___def_88_f1_1 : forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_88 (f1 X1 X2 X3)
with auto___def_86 : term -> Prop :=
    trans___def_86_f5_1 : forall X1 X2:term, auto___def_87 X1 -> auto___def_79 X2 -> auto___def_86 (f5 X1 X2)
with auto___type_17 : term -> Prop :=
    trans___type_17_i_1 : auto___type_17 i
  | trans___type_17_bob_1 : auto___type_17 bob
  | trans___type_17_server_1 : auto___type_17 server
  | trans___type_17_alice_1 : auto___type_17 alice
with auto___type_7 : term -> Prop :=
    trans___type_7_i_1 : auto___type_7 i
  | trans___type_7_bob_1 : auto___type_7 bob
  | trans___type_7_server_1 : auto___type_7 server
  | trans___type_7_alice_1 : auto___type_7 alice
with auto___def_8 : term -> Prop :=
    trans___def_8_nai_1 : forall X1:term, auto_agent X1 -> auto___def_8 (nai X1)
with auto___def_97 : term -> Prop :=
    trans___def_97_cons_1 : forall X1 X2:term, auto___def_98 X1 -> auto___def_89 X2 -> auto___def_97 (cons X1 X2)
with auto_peer_keys_old : term -> term -> term -> Prop :=
    trans_peer_keys_old_1 : forall X1 X2 X3:term, auto___type_9 X1 -> auto___def_63 X2 -> auto___def_64 X3 -> auto_peer_keys_old X1 X2 X3
with auto___def_25 : term -> Prop :=
    trans___def_25_h_1 : forall X1:term, auto___def_26 X1 -> auto___def_25 (h X1)
with auto___def_112 : term -> Prop :=
    trans___def_112_cons_1 : forall X1 X2:term, auto___type_16 X1 -> auto___def_113 X2 -> auto___def_112 (cons X1 X2)
with auto___def_103 : term -> Prop :=
    trans___def_103_key_1 : forall X1 X2:term, auto___def_104 X1 -> auto___def_105 X2 -> auto___def_103 (key X1 X2)
with auto___def_23 : term -> Prop :=
    trans___def_23_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_23 (f1 X1 X2 X3)
with auto___type_5 : term -> Prop :=
    trans___type_5_i_1 : auto___type_5 i
  | trans___type_5_bob_1 : auto___type_5 bob
  | trans___type_5_server_1 : auto___type_5 server
  | trans___type_5_alice_1 : auto___type_5 alice
with auto___def_22 : term -> Prop :=
    trans___def_22_nil_1 : auto___def_22 nil
with auto___def_93 : term -> Prop :=
    trans___def_93_cons_1 : forall X1 X2:term, auto___def_79 X1 -> auto___def_99 X2 -> auto___def_93 (cons X1 X2)
with auto___def_24 : term -> Prop :=
    trans___def_24_nil_1 : auto___def_24 nil
with auto___def_10 : term -> Prop :=
    trans___def_10_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_10 (nonces_old X1 X2 X3)
with auto___def_102 : term -> Prop :=
    trans___def_102_cons_1 : forall X1 X2:term, auto___def_108 X1 -> auto___def_107 X2 -> auto___def_102 (cons X1 X2)
with auto___def_116 : term -> Prop :=
    trans___def_116_f3_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_116 (f3 X1 X2)
with auto___def_41 : term -> Prop :=
    trans___def_41_cons_1 : forall X1 X2:term, auto___type_5 X1 -> auto___def_42 X2 -> auto___def_41 (cons X1 X2)
with auto___def_28 : term -> Prop :=
    trans___def_28_cons_1 : forall X1 X2:term, auto___def_10 X1 -> auto___def_34 X2 -> auto___def_28 (cons X1 X2)
with auto_server_keys_old : term -> term -> term -> Prop :=
    trans_server_keys_old_1 : forall X1 X2 X3:term, auto___type_7 X1 -> auto___def_54 X2 -> auto___def_55 X3 -> auto_server_keys_old X1 X2 X3
with auto___def_42 : term -> Prop :=
    trans___def_42_nil_1 : auto___def_42 nil
with auto_knows_current : term -> Prop :=
    trans_knows_current_s_1 : forall X1:term, auto_knows_current X1 -> auto_knows_current (s X1)
  | trans_knows_current_nil_1 : auto_knows_current nil
  | trans_knows_current_f3_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto_knows_current (f3 X1 X2)
  | trans_knows_current_h_1 : forall X1:term, auto___def_109 X1 -> auto_knows_current (h X1)
  | trans_knows_current_h_2 : forall X1:term, auto___def_91 X1 -> auto_knows_current (h X1)
  | trans_knows_current_h_3 : forall X1:term, auto_knows_current X1 -> auto_knows_current (h X1)
  | trans_knows_current_nonces_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (nonces_current X1 X2 X3)
  | trans_knows_current_respond_id_1 : auto_knows_current respond_id
  | trans_knows_current_f2_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto_knows_current (f2 X1 X2)
  | trans_knows_current_success_1 : auto_knows_current success
  | trans_knows_current_request_id_1 : auto_knows_current request_id
  | trans_knows_current_crypt_1 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto_knows_current (crypt X1 X2)
  | trans_knows_current_crypt_2 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current (crypt X1 X2)
  | trans_knows_current_crypt_3 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_current (crypt X1 X2)
  | trans_knows_current_nai_1 : forall X1:term, auto_agent X1 -> auto_knows_current (nai X1)
  | trans_knows_current_f4_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto_knows_current (f4 X1 X2)
  | trans_knows_current_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (nonces_old X1 X2 X3)
  | trans_knows_current_cons_1 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current (cons X1 X2)
  | trans_knows_current_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_current (f1 X1 X2 X3)
  | trans_knows_current_f1_2 : forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto_knows_current (f1 X1 X2 X3)
with auto___def_95 : term -> Prop :=
    trans___def_95_cons_1 : forall X1 X2:term, auto___def_96 X1 -> auto___def_97 X2 -> auto___def_95 (cons X1 X2)
with auto___def_107 : term -> Prop :=
    trans___def_107_nil_1 : auto___def_107 nil
with auto___def_18 : term -> Prop :=
    trans___def_18_key_1 : forall X1 X2:term, auto___def_19 X1 -> auto___def_20 X2 -> auto___def_18 (key X1 X2)
with auto___type_16 : term -> Prop :=
    trans___type_16_s_1 : forall X1:term, auto_knows_current X1 -> auto___type_16 (s X1)
  | trans___type_16_nil_1 : auto___type_16 nil
  | trans___type_16_f3_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_16 (f3 X1 X2)
  | trans___type_16_h_1 : forall X1:term, auto___def_109 X1 -> auto___type_16 (h X1)
  | trans___type_16_h_2 : forall X1:term, auto___def_91 X1 -> auto___type_16 (h X1)
  | trans___type_16_h_3 : forall X1:term, auto_knows_current X1 -> auto___type_16 (h X1)
  | trans___type_16_nonces_current_1 : forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_current X1 X2 X3)
  | trans___type_16_respond_id_1 : auto___type_16 respond_id
  | trans___type_16_f2_1 : forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_16 (f2 X1 X2)
  | trans___type_16_success_1 : auto___type_16 success
  | trans___type_16_request_id_1 : auto___type_16 request_id
  | trans___type_16_crypt_1 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___type_16 (crypt X1 X2)
  | trans___type_16_crypt_2 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_16 (crypt X1 X2)
  | trans___type_16_crypt_3 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_16 (crypt X1 X2)
  | trans___type_16_nai_1 : forall X1:term, auto_agent X1 -> auto___type_16 (nai X1)
  | trans___type_16_f4_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_16 (f4 X1 X2)
  | trans___type_16_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_old X1 X2 X3)
  | trans___type_16_cons_1 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_16 (cons X1 X2)
  | trans___type_16_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_16 (f1 X1 X2 X3)
  | trans___type_16_f1_2 : forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___type_16 (f1 X1 X2 X3)
with auto___def_39 : term -> Prop :=
    trans___def_39_sym_1 : auto___def_39 sym
with auto___def_55 : term -> Prop :=
    trans___def_55_f3_1 : forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_55 (f3 X1 X2)
with auto_knows_old : term -> Prop :=
    trans_knows_old_s_1 : forall X1:term, auto_knows_old X1 -> auto_knows_old (s X1)
  | trans_knows_old_nil_1 : auto_knows_old nil
  | trans_knows_old_h_1 : forall X1:term, auto___def_44 X1 -> auto_knows_old (h X1)
  | trans_knows_old_h_2 : forall X1:term, auto___def_26 X1 -> auto_knows_old (h X1)
  | trans_knows_old_h_3 : forall X1:term, auto_knows_old X1 -> auto_knows_old (h X1)
  | trans_knows_old_respond_id_1 : auto_knows_old respond_id
  | trans_knows_old_f2_1 : forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto_knows_old (f2 X1 X2)
  | trans_knows_old_success_1 : auto_knows_old success
  | trans_knows_old_request_id_1 : auto_knows_old request_id
  | trans_knows_old_crypt_1 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_old (crypt X1 X2)
  | trans_knows_old_crypt_2 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old (crypt X1 X2)
  | trans_knows_old_nai_1 : forall X1:term, auto_agent X1 -> auto_knows_old (nai X1)
  | trans_knows_old_nonces_old_1 : forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_old (nonces_old X1 X2 X3)
  | trans_knows_old_cons_1 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old (cons X1 X2)
  | trans_knows_old_f1_1 : forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_old (f1 X1 X2 X3)
with auto___query__intruder_knows_server_IK : Prop :=
with auto___query__intruder_knows_server_CK : Prop :=
.

(* [defp] Proofs that all definitions hold. *)


(* [appp] Proofs that all approximation clauses hold. *)


Inductive model_1 : Set := und_1:model_1 | val_1_1:model_1 | val_1_2:model_1 | val_1_3:model_1 | val_1_4:model_1 | val_1_5:model_1 | val_1_6:model_1 | val_1_7:model_1 | val_1_8:model_1 | val_1_9:model_1.

Definition seval_1_model_s (v1 : model_1) : model_1 :=
  match v1 with
      val_1_5 => val_1_5
    | _ => und_1
    end.

Remark seval_1_rewrite_s:forall X1 X2:model_1, X1=X2 -> (seval_1_model_s X1)=(seval_1_model_s X2).
Proof.
  intros X1 X2 H1. rewrite H1. reflexivity.
Qed.
Definition seval_1_model_key (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_1,val_1_2 => val_1_3
    | _,_ => und_1
    end.

Remark seval_1_rewrite_key:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_key X1 X2)=(seval_1_model_key X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_nil : model_1 := val_1_5.

Remark seval_1_rewrite_nil:seval_1_model_nil=seval_1_model_nil.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_i : model_1 := val_1_6.

Remark seval_1_rewrite_i:seval_1_model_i=seval_1_model_i.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_sym : model_1 := val_1_1.

Remark seval_1_rewrite_sym:seval_1_model_sym=seval_1_model_sym.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_f5 (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_3,val_1_5 => val_1_8
    | _,_ => und_1
    end.

Remark seval_1_rewrite_f5:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_f5 X1 X2)=(seval_1_model_f5 X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_session_old (v1 v2 v3 : model_1) : model_1 :=
  match v1,v2,v3 with
      val_1_5,val_1_6,val_1_6 => val_1_4
    | _,_,_ => und_1
    end.

Remark seval_1_rewrite_session_old:forall X1 X2 X3 X4 X5 X6:model_1, X1=X4 -> X2=X5 -> X3=X6 -> (seval_1_model_session_old X1 X2 X3)=(seval_1_model_session_old X4 X5 X6).
Proof.
  intros X1 X2 X3 X4 X5 X6 H1 H2 H3. rewrite H1. rewrite H2. rewrite H3. reflexivity.
Qed.
Definition seval_1_model_f3 (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_3,val_1_5 => val_1_5
    | _,_ => und_1
    end.

Remark seval_1_rewrite_f3:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_f3 X1 X2)=(seval_1_model_f3 X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_h (v1 : model_1) : model_1 :=
  match v1 with
      val_1_5 => val_1_5
    | _ => und_1
    end.

Remark seval_1_rewrite_h:forall X1 X2:model_1, X1=X2 -> (seval_1_model_h X1)=(seval_1_model_h X2).
Proof.
  intros X1 X2 H1. rewrite H1. reflexivity.
Qed.
Definition seval_1_model_nonces_current (v1 v2 v3 : model_1) : model_1 :=
  match v1,v2,v3 with
      val_1_5,val_1_6,val_1_6 => val_1_5
    | _,_,_ => und_1
    end.

Remark seval_1_rewrite_nonces_current:forall X1 X2 X3 X4 X5 X6:model_1, X1=X4 -> X2=X5 -> X3=X6 -> (seval_1_model_nonces_current X1 X2 X3)=(seval_1_model_nonces_current X4 X5 X6).
Proof.
  intros X1 X2 X3 X4 X5 X6 H1 H2 H3. rewrite H1. rewrite H2. rewrite H3. reflexivity.
Qed.
Definition seval_1_model_session_current (v1 v2 v3 : model_1) : model_1 :=
  match v1,v2,v3 with
      val_1_5,val_1_6,val_1_6 => val_1_7
    | _,_,_ => und_1
    end.

Remark seval_1_rewrite_session_current:forall X1 X2 X3 X4 X5 X6:model_1, X1=X4 -> X2=X5 -> X3=X6 -> (seval_1_model_session_current X1 X2 X3)=(seval_1_model_session_current X4 X5 X6).
Proof.
  intros X1 X2 X3 X4 X5 X6 H1 H2 H3. rewrite H1. rewrite H2. rewrite H3. reflexivity.
Qed.
Definition seval_1_model_respond_id : model_1 := val_1_5.

Remark seval_1_rewrite_respond_id:seval_1_model_respond_id=seval_1_model_respond_id.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_f2 (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_3,val_1_5 => val_1_5
    | _,_ => und_1
    end.

Remark seval_1_rewrite_f2:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_f2 X1 X2)=(seval_1_model_f2 X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_success : model_1 := val_1_5.

Remark seval_1_rewrite_success:seval_1_model_success=seval_1_model_success.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_request_id : model_1 := val_1_5.

Remark seval_1_rewrite_request_id:seval_1_model_request_id=seval_1_model_request_id.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_crypt (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_7,val_1_8 => val_1_5
    | val_1_4,val_1_8 => val_1_5
    | val_1_5,val_1_5 => val_1_5
    | _,_ => und_1
    end.

Remark seval_1_rewrite_crypt:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_crypt X1 X2)=(seval_1_model_crypt X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_nai (v1 : model_1) : model_1 :=
  match v1 with
      val_1_6 => val_1_5
    | _ => und_1
    end.

Remark seval_1_rewrite_nai:forall X1 X2:model_1, X1=X2 -> (seval_1_model_nai X1)=(seval_1_model_nai X2).
Proof.
  intros X1 X2 H1. rewrite H1. reflexivity.
Qed.
Definition seval_1_model_f4 (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_3,val_1_5 => val_1_5
    | _,_ => und_1
    end.

Remark seval_1_rewrite_f4:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_f4 X1 X2)=(seval_1_model_f4 X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_bob : model_1 := val_1_6.

Remark seval_1_rewrite_bob:seval_1_model_bob=seval_1_model_bob.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_server : model_1 := val_1_6.

Remark seval_1_rewrite_server:seval_1_model_server=seval_1_model_server.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_nonces_old (v1 v2 v3 : model_1) : model_1 :=
  match v1,v2,v3 with
      val_1_5,val_1_6,val_1_6 => val_1_5
    | _,_,_ => und_1
    end.

Remark seval_1_rewrite_nonces_old:forall X1 X2 X3 X4 X5 X6:model_1, X1=X4 -> X2=X5 -> X3=X6 -> (seval_1_model_nonces_old X1 X2 X3)=(seval_1_model_nonces_old X4 X5 X6).
Proof.
  intros X1 X2 X3 X4 X5 X6 H1 H2 H3. rewrite H1. rewrite H2. rewrite H3. reflexivity.
Qed.
Definition seval_1_model_cons (v1 v2 : model_1) : model_1 :=
  match v1,v2 with
      val_1_5,val_1_5 => val_1_5
    | val_1_6,val_1_9 => val_1_2
    | val_1_6,val_1_5 => val_1_9
    | _,_ => und_1
    end.

Remark seval_1_rewrite_cons:forall X1 X2 X3 X4:model_1, X1=X3 -> X2=X4 -> (seval_1_model_cons X1 X2)=(seval_1_model_cons X3 X4).
Proof.
  intros X1 X2 X3 X4 H1 H2. rewrite H1. rewrite H2. reflexivity.
Qed.
Definition seval_1_model_alice : model_1 := val_1_6.

Remark seval_1_rewrite_alice:seval_1_model_alice=seval_1_model_alice.
Proof.
  reflexivity.
Qed.

Definition seval_1_model_f1 (v1 v2 v3 : model_1) : model_1 :=
  match v1,v2,v3 with
      val_1_3,val_1_7,val_1_5 => val_1_5
    | val_1_3,val_1_4,val_1_5 => val_1_5
    | _,_,_ => und_1
    end.

Remark seval_1_rewrite_f1:forall X1 X2 X3 X4 X5 X6:model_1, X1=X4 -> X2=X5 -> X3=X6 -> (seval_1_model_f1 X1 X2 X3)=(seval_1_model_f1 X4 X5 X6).
Proof.
  intros X1 X2 X3 X4 X5 X6 H1 H2 H3. rewrite H1. rewrite H2. rewrite H3. reflexivity.
Qed.
Fixpoint seval_1 (t : term) {struct t} : model_1 :=
  match t  with
    | (s X1) => (seval_1_model_s (seval_1 X1))
  | (key X1 X2) => (seval_1_model_key (seval_1 X1) (seval_1 X2))
  | nil => (seval_1_model_nil)
  | i => (seval_1_model_i)
  | sym => (seval_1_model_sym)
  | (f5 X1 X2) => (seval_1_model_f5 (seval_1 X1) (seval_1 X2))
  | (session_old X1 X2 X3) => (seval_1_model_session_old (seval_1 X1) (seval_1 X2) (seval_1 X3))
  | (f3 X1 X2) => (seval_1_model_f3 (seval_1 X1) (seval_1 X2))
  | (h X1) => (seval_1_model_h (seval_1 X1))
  | (nonces_current X1 X2 X3) => (seval_1_model_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3))
  | (session_current X1 X2 X3) => (seval_1_model_session_current (seval_1 X1) (seval_1 X2) (seval_1 X3))
  | respond_id => (seval_1_model_respond_id)
  | (f2 X1 X2) => (seval_1_model_f2 (seval_1 X1) (seval_1 X2))
  | success => (seval_1_model_success)
  | request_id => (seval_1_model_request_id)
  | (crypt X1 X2) => (seval_1_model_crypt (seval_1 X1) (seval_1 X2))
  | (nai X1) => (seval_1_model_nai (seval_1 X1))
  | (f4 X1 X2) => (seval_1_model_f4 (seval_1 X1) (seval_1 X2))
  | bob => (seval_1_model_bob)
  | server => (seval_1_model_server)
  | (nonces_old X1 X2 X3) => (seval_1_model_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3))
  | (cons X1 X2) => (seval_1_model_cons (seval_1 X1) (seval_1 X2))
  | alice => (seval_1_model_alice)
  | (f1 X1 X2 X3) => (seval_1_model_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3))
  | _  => und_1
  end.

Definition seval_1_model_auto___type_11 (X:term) (pi:(auto___type_11 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_11 X) return (seval_1 X)=val_1_6 with
    (trans___type_11_i_1) => (seval_1_rewrite_i)
  | (trans___type_11_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_11_server_1) => (seval_1_rewrite_server)
  | (trans___type_11_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_123 (X:term) (pi:(auto___def_123 X)):((seval_1 X)=val_1_1) :=
  match pi as pi in (auto___def_123 X) return (seval_1 X)=val_1_1 with
    (trans___def_123_sym_1) => (seval_1_rewrite_sym)
  end
.
Definition seval_1_model_auto___def_107 (X:term) (pi:(auto___def_107 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_107 X) return (seval_1 X)=val_1_5 with
    (trans___def_107_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___type_15 (X:term) (pi:(auto___type_15 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_15 X) return (seval_1 X)=val_1_6 with
    (trans___type_15_i_1) => (seval_1_rewrite_i)
  | (trans___type_15_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_15_server_1) => (seval_1_rewrite_server)
  | (trans___type_15_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_106 (X:term) (pi:(auto___def_106 X)):((seval_1 X)=val_1_9) :=
  match pi as pi in (auto___def_106 X) return (seval_1 X)=val_1_9 with
    (trans___def_106_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_5 (seval_1_model_auto___type_15 X1 H1) (seval_1_model_auto___def_107 X2 H2))
  end
.
Definition seval_1_model_auto___type_14 (X:term) (pi:(auto___type_14 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_14 X) return (seval_1 X)=val_1_6 with
    (trans___type_14_i_1) => (seval_1_rewrite_i)
  | (trans___type_14_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_14_server_1) => (seval_1_rewrite_server)
  | (trans___type_14_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_105 (X:term) (pi:(auto___def_105 X)):((seval_1 X)=val_1_2) :=
  match pi as pi in (auto___def_105 X) return (seval_1 X)=val_1_2 with
    (trans___def_105_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_9 (seval_1_model_auto___type_14 X1 H1) (seval_1_model_auto___def_106 X2 H2))
  end
.
Definition seval_1_model_auto_agent (X:term) (pi:(auto_agent X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto_agent X) return (seval_1 X)=val_1_6 with
    (trans_agent_i_1) => (seval_1_rewrite_i)
  | (trans_agent_bob_1) => (seval_1_rewrite_bob)
  | (trans_agent_server_1) => (seval_1_rewrite_server)
  | (trans_agent_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___type_4 (X:term) (pi:(auto___type_4 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_4 X) return (seval_1 X)=val_1_6 with
    (trans___type_4_i_1) => (seval_1_rewrite_i)
  | (trans___type_4_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_4_server_1) => (seval_1_rewrite_server)
  | (trans___type_4_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_42 (X:term) (pi:(auto___def_42 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_42 X) return (seval_1 X)=val_1_5 with
    (trans___def_42_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___def_24 (X:term) (pi:(auto___def_24 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_24 X) return (seval_1 X)=val_1_5 with
    (trans___def_24_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___def_19 (X:term) (pi:(auto___def_19 X)):((seval_1 X)=val_1_1) :=
  match pi as pi in (auto___def_19 X) return (seval_1 X)=val_1_1 with
    (trans___def_19_sym_1) => (seval_1_rewrite_sym)
  end
.
Definition seval_1_model_auto___def_22 (X:term) (pi:(auto___def_22 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_22 X) return (seval_1 X)=val_1_5 with
    (trans___def_22_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___def_21 (X:term) (pi:(auto___def_21 X)):((seval_1 X)=val_1_9) :=
  match pi as pi in (auto___def_21 X) return (seval_1 X)=val_1_9 with
    (trans___def_21_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_5 (seval_1_model_auto_agent X1 H1) (seval_1_model_auto___def_22 X2 H2))
  end
.
Definition seval_1_model_auto___type_1 (X:term) (pi:(auto___type_1 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_1 X) return (seval_1 X)=val_1_6 with
    (trans___type_1_i_1) => (seval_1_rewrite_i)
  | (trans___type_1_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_1_server_1) => (seval_1_rewrite_server)
  | (trans___type_1_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_20 (X:term) (pi:(auto___def_20 X)):((seval_1 X)=val_1_2) :=
  match pi as pi in (auto___def_20 X) return (seval_1 X)=val_1_2 with
    (trans___def_20_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_9 (seval_1_model_auto___type_1 X1 H1) (seval_1_model_auto___def_21 X2 H2))
  end
.
Definition seval_1_model_auto___def_18 (X:term) (pi:(auto___def_18 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_18 X) return (seval_1 X)=val_1_3 with
    (trans___def_18_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_19 X1 H1) (seval_1_model_auto___def_20 X2 H2))
  end
.
Definition seval_1_model_auto___type_5 (X:term) (pi:(auto___type_5 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_5 X) return (seval_1 X)=val_1_6 with
    (trans___type_5_i_1) => (seval_1_rewrite_i)
  | (trans___type_5_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_5_server_1) => (seval_1_rewrite_server)
  | (trans___type_5_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_41 (X:term) (pi:(auto___def_41 X)):((seval_1 X)=val_1_9) :=
  match pi as pi in (auto___def_41 X) return (seval_1 X)=val_1_9 with
    (trans___def_41_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_5 (seval_1_model_auto___type_5 X1 H1) (seval_1_model_auto___def_42 X2 H2))
  end
.
Definition seval_1_model_auto___def_40 (X:term) (pi:(auto___def_40 X)):((seval_1 X)=val_1_2) :=
  match pi as pi in (auto___def_40 X) return (seval_1 X)=val_1_2 with
    (trans___def_40_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_9 (seval_1_model_auto___type_4 X1 H1) (seval_1_model_auto___def_41 X2 H2))
  end
.
Definition seval_1_model_auto___def_39 (X:term) (pi:(auto___def_39 X)):((seval_1 X)=val_1_1) :=
  match pi as pi in (auto___def_39 X) return (seval_1 X)=val_1_1 with
    (trans___def_39_sym_1) => (seval_1_rewrite_sym)
  end
.
Definition seval_1_model_auto___def_38 (X:term) (pi:(auto___def_38 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_38 X) return (seval_1 X)=val_1_3 with
    (trans___def_38_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_39 X1 H1) (seval_1_model_auto___def_40 X2 H2))
  end
.
Fixpoint seval_1_model_auto___def_10 (X:term) (pi:(auto___def_10 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_10 X) return (seval_1 X)=val_1_5 with
    (trans___def_10_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end

with seval_1_model_auto___def_12 (X:term) (pi:(auto___def_12 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_12 X) return (seval_1 X)=val_1_5 with
    (trans___def_12_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_14 X1 H1) (seval_1_model_auto___def_15 X2 H2))
  end

with seval_1_model_auto___def_14 (X:term) (pi:(auto___def_14 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_14 X) return (seval_1 X)=val_1_5 with
    (trans___def_14_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  end

with seval_1_model_auto___def_15 (X:term) (pi:(auto___def_15 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_15 X) return (seval_1 X)=val_1_5 with
    (trans___def_15_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_23 X1 H1) (seval_1_model_auto___def_24 X2 H2))
  end

with seval_1_model_auto___def_16 (X:term) (pi:(auto___def_16 X)) {struct pi}:((seval_1 X)=val_1_4) :=
  match pi as pi in (auto___def_16 X) return (seval_1 X)=val_1_4 with
    (trans___def_16_session_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_session_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end

with seval_1_model_auto___def_17 (X:term) (pi:(auto___def_17 X)) {struct pi}:((seval_1 X)=val_1_8) :=
  match pi as pi in (auto___def_17 X) return (seval_1 X)=val_1_8 with
    (trans___def_17_f5_1 X1 X2 H1 H2) => (seval_1_rewrite_f5 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_10 X2 H2))
  end

with seval_1_model_auto___def_23 (X:term) (pi:(auto___def_23 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_23 X) return (seval_1 X)=val_1_5 with
    (trans___def_23_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  end

with seval_1_model_auto___def_26 (X:term) (pi:(auto___def_26 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_26 X) return (seval_1 X)=val_1_5 with
    (trans___def_26_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_27 X1 H1) (seval_1_model_auto___def_28 X2 H2))
  end

with seval_1_model_auto___def_27 (X:term) (pi:(auto___def_27 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_27 X) return (seval_1 X)=val_1_5 with
    (trans___def_27_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_29 X1 H1))
  end

with seval_1_model_auto___def_28 (X:term) (pi:(auto___def_28 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_28 X) return (seval_1 X)=val_1_5 with
    (trans___def_28_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_10 X1 H1) (seval_1_model_auto___def_34 X2 H2))
  end

with seval_1_model_auto___def_29 (X:term) (pi:(auto___def_29 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_29 X) return (seval_1 X)=val_1_5 with
    (trans___def_29_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___type_2 X1 H1) (seval_1_model_auto___def_30 X2 H2))
  end

with seval_1_model_auto___def_30 (X:term) (pi:(auto___def_30 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_30 X) return (seval_1 X)=val_1_5 with
    (trans___def_30_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_31 X1 H1) (seval_1_model_auto___def_32 X2 H2))
  end

with seval_1_model_auto___def_31 (X:term) (pi:(auto___def_31 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_31 X) return (seval_1 X)=val_1_5 with
    (trans___def_31_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_10 X2 H2))
  end

with seval_1_model_auto___def_32 (X:term) (pi:(auto___def_32 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_32 X) return (seval_1 X)=val_1_5 with
    (trans___def_32_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_33 X1 H1) (seval_1_model_auto___def_24 X2 H2))
  end

with seval_1_model_auto___def_33 (X:term) (pi:(auto___def_33 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_33 X) return (seval_1 X)=val_1_5 with
    (trans___def_33_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_10 X2 H2))
  end

with seval_1_model_auto___def_34 (X:term) (pi:(auto___def_34 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_34 X) return (seval_1 X)=val_1_5 with
    (trans___def_34_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_12 X1 H1) (seval_1_model_auto___def_24 X2 H2))
  end

with seval_1_model_auto___def_36 (X:term) (pi:(auto___def_36 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_36 X) return (seval_1 X)=val_1_5 with
    (trans___def_36_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  end

with seval_1_model_auto___def_44 (X:term) (pi:(auto___def_44 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_44 X) return (seval_1 X)=val_1_5 with
    (trans___def_44_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_45 X1 H1) (seval_1_model_auto___def_46 X2 H2))
  end

with seval_1_model_auto___def_45 (X:term) (pi:(auto___def_45 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_45 X) return (seval_1 X)=val_1_5 with
    (trans___def_45_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_47 X1 H1))
  end

with seval_1_model_auto___def_46 (X:term) (pi:(auto___def_46 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_46 X) return (seval_1 X)=val_1_5 with
    (trans___def_46_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_36 X1 H1) (seval_1_model_auto___def_42 X2 H2))
  end

with seval_1_model_auto___def_47 (X:term) (pi:(auto___def_47 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_47 X) return (seval_1 X)=val_1_5 with
    (trans___def_47_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___type_6 X1 H1) (seval_1_model_auto___def_48 X2 H2))
  end

with seval_1_model_auto___def_48 (X:term) (pi:(auto___def_48 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_48 X) return (seval_1 X)=val_1_5 with
    (trans___def_48_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_49 X1 H1) (seval_1_model_auto___def_50 X2 H2))
  end

with seval_1_model_auto___def_49 (X:term) (pi:(auto___def_49 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_49 X) return (seval_1 X)=val_1_5 with
    (trans___def_49_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  end

with seval_1_model_auto___def_50 (X:term) (pi:(auto___def_50 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_50 X) return (seval_1 X)=val_1_5 with
    (trans___def_50_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_51 X1 H1) (seval_1_model_auto___def_42 X2 H2))
  end

with seval_1_model_auto___def_51 (X:term) (pi:(auto___def_51 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_51 X) return (seval_1 X)=val_1_5 with
    (trans___def_51_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  end

with seval_1_model_auto___def_9 (X:term) (pi:(auto___def_9 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_9 X) return (seval_1 X)=val_1_5 with
    (trans___def_9_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans___def_9_nil_1) => (seval_1_rewrite_nil)
  | (trans___def_9_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_44 X1 H1))
  | (trans___def_9_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_26 X1 H1))
  | (trans___def_9_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans___def_9_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans___def_9_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  | (trans___def_9_success_1) => (seval_1_rewrite_success)
  | (trans___def_9_request_id_1) => (seval_1_rewrite_request_id)
  | (trans___def_9_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans___def_9_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans___def_9_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans___def_9_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___def_9_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans___def_9_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  end

with seval_1_model_auto___type_2 (X:term) (pi:(auto___type_2 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_2 X) return (seval_1 X)=val_1_5 with
    (trans___type_2_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans___type_2_nil_1) => (seval_1_rewrite_nil)
  | (trans___type_2_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_44 X1 H1))
  | (trans___type_2_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_26 X1 H1))
  | (trans___type_2_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans___type_2_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans___type_2_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  | (trans___type_2_success_1) => (seval_1_rewrite_success)
  | (trans___type_2_request_id_1) => (seval_1_rewrite_request_id)
  | (trans___type_2_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans___type_2_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans___type_2_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans___type_2_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_2_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans___type_2_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  end

with seval_1_model_auto___type_3 (X:term) (pi:(auto___type_3 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_3 X) return (seval_1 X)=val_1_5 with
    (trans___type_3_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end

with seval_1_model_auto___type_6 (X:term) (pi:(auto___type_6 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_6 X) return (seval_1 X)=val_1_5 with
    (trans___type_6_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans___type_6_nil_1) => (seval_1_rewrite_nil)
  | (trans___type_6_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_44 X1 H1))
  | (trans___type_6_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_26 X1 H1))
  | (trans___type_6_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans___type_6_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans___type_6_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  | (trans___type_6_success_1) => (seval_1_rewrite_success)
  | (trans___type_6_request_id_1) => (seval_1_rewrite_request_id)
  | (trans___type_6_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans___type_6_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans___type_6_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans___type_6_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_6_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans___type_6_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  end

with seval_1_model_auto_knows_old (X:term) (pi:(auto_knows_old X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto_knows_old X) return (seval_1 X)=val_1_5 with
    (trans_knows_old_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans_knows_old_nil_1) => (seval_1_rewrite_nil)
  | (trans_knows_old_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_44 X1 H1))
  | (trans_knows_old_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_26 X1 H1))
  | (trans_knows_old_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_old X1 H1))
  | (trans_knows_old_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans_knows_old_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_38 X1 H1) (seval_1_model_auto___type_3 X2 H2))
  | (trans_knows_old_success_1) => (seval_1_rewrite_success)
  | (trans_knows_old_request_id_1) => (seval_1_rewrite_request_id)
  | (trans_knows_old_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans_knows_old_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans_knows_old_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans_knows_old_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans_knows_old_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_old X1 H1) (seval_1_model_auto_knows_old X2 H2))
  | (trans_knows_old_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  end
.
Definition seval_1_model_auto___def_57 (X:term) (pi:(auto___def_57 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_57 X) return (seval_1 X)=val_1_5 with
    (trans___def_57_nonces_old_1 X1 X2 X3 H1 _ H2 _ H3 _) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___type_6 X1 H1) (seval_1_model_auto___type_4 X2 H2) (seval_1_model_auto_agent X3 H3))
  end
.
Definition seval_1_model_auto___def_104 (X:term) (pi:(auto___def_104 X)):((seval_1 X)=val_1_1) :=
  match pi as pi in (auto___def_104 X) return (seval_1 X)=val_1_1 with
    (trans___def_104_sym_1) => (seval_1_rewrite_sym)
  end
.
Definition seval_1_model_auto___def_103 (X:term) (pi:(auto___def_103 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_103 X) return (seval_1 X)=val_1_3 with
    (trans___def_103_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_104 X1 H1) (seval_1_model_auto___def_105 X2 H2))
  end
.
Definition seval_1_model_auto___def_89 (X:term) (pi:(auto___def_89 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_89 X) return (seval_1 X)=val_1_5 with
    (trans___def_89_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___type_7 (X:term) (pi:(auto___type_7 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_7 X) return (seval_1 X)=val_1_6 with
    (trans___type_7_i_1) => (seval_1_rewrite_i)
  | (trans___type_7_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_7_server_1) => (seval_1_rewrite_server)
  | (trans___type_7_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_61 (X:term) (pi:(auto___def_61 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_61 X) return (seval_1 X)=val_1_5 with
    (trans___def_61_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___type_8 (X:term) (pi:(auto___type_8 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_8 X) return (seval_1 X)=val_1_6 with
    (trans___type_8_i_1) => (seval_1_rewrite_i)
  | (trans___type_8_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_8_server_1) => (seval_1_rewrite_server)
  | (trans___type_8_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_60 (X:term) (pi:(auto___def_60 X)):((seval_1 X)=val_1_9) :=
  match pi as pi in (auto___def_60 X) return (seval_1 X)=val_1_9 with
    (trans___def_60_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_5 (seval_1_model_auto___type_8 X1 H1) (seval_1_model_auto___def_61 X2 H2))
  end
.
Definition seval_1_model_auto___def_59 (X:term) (pi:(auto___def_59 X)):((seval_1 X)=val_1_2) :=
  match pi as pi in (auto___def_59 X) return (seval_1 X)=val_1_2 with
    (trans___def_59_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_9 (seval_1_model_auto___type_7 X1 H1) (seval_1_model_auto___def_60 X2 H2))
  end
.
Definition seval_1_model_auto___def_58 (X:term) (pi:(auto___def_58 X)):((seval_1 X)=val_1_1) :=
  match pi as pi in (auto___def_58 X) return (seval_1 X)=val_1_1 with
    (trans___def_58_sym_1) => (seval_1_rewrite_sym)
  end
.
Definition seval_1_model_auto___def_56 (X:term) (pi:(auto___def_56 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_56 X) return (seval_1 X)=val_1_3 with
    (trans___def_56_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_58 X1 H1) (seval_1_model_auto___def_59 X2 H2))
  end
.
Definition seval_1_model_auto___def_87 (X:term) (pi:(auto___def_87 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_87 X) return (seval_1 X)=val_1_3 with
    (trans___def_87_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_19 X1 H1) (seval_1_model_auto___def_20 X2 H2))
  end
.
Fixpoint seval_1_model_auto___def_101 (X:term) (pi:(auto___def_101 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_101 X) return (seval_1 X)=val_1_5 with
    (trans___def_101_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  end

with seval_1_model_auto___def_109 (X:term) (pi:(auto___def_109 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_109 X) return (seval_1 X)=val_1_5 with
    (trans___def_109_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_110 X1 H1) (seval_1_model_auto___def_111 X2 H2))
  end

with seval_1_model_auto___def_110 (X:term) (pi:(auto___def_110 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_110 X) return (seval_1 X)=val_1_5 with
    (trans___def_110_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_112 X1 H1))
  end

with seval_1_model_auto___def_111 (X:term) (pi:(auto___def_111 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_111 X) return (seval_1 X)=val_1_5 with
    (trans___def_111_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_101 X1 H1) (seval_1_model_auto___def_107 X2 H2))
  end

with seval_1_model_auto___def_112 (X:term) (pi:(auto___def_112 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_112 X) return (seval_1 X)=val_1_5 with
    (trans___def_112_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___type_16 X1 H1) (seval_1_model_auto___def_113 X2 H2))
  end

with seval_1_model_auto___def_113 (X:term) (pi:(auto___def_113 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_113 X) return (seval_1 X)=val_1_5 with
    (trans___def_113_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_114 X1 H1) (seval_1_model_auto___def_115 X2 H2))
  end

with seval_1_model_auto___def_114 (X:term) (pi:(auto___def_114 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_114 X) return (seval_1 X)=val_1_5 with
    (trans___def_114_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  end

with seval_1_model_auto___def_115 (X:term) (pi:(auto___def_115 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_115 X) return (seval_1 X)=val_1_5 with
    (trans___def_115_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_116 X1 H1) (seval_1_model_auto___def_107 X2 H2))
  end

with seval_1_model_auto___def_116 (X:term) (pi:(auto___def_116 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_116 X) return (seval_1 X)=val_1_5 with
    (trans___def_116_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  end

with seval_1_model_auto___def_78 (X:term) (pi:(auto___def_78 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_78 X) return (seval_1 X)=val_1_5 with
    (trans___def_78_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans___def_78_nil_1) => (seval_1_rewrite_nil)
  | (trans___def_78_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans___def_78_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_109 X1 H1))
  | (trans___def_78_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_91 X1 H1))
  | (trans___def_78_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans___def_78_nonces_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___def_78_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans___def_78_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  | (trans___def_78_success_1) => (seval_1_rewrite_success)
  | (trans___def_78_request_id_1) => (seval_1_rewrite_request_id)
  | (trans___def_78_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_7 val_1_8 (seval_1_model_auto___def_85 X1 H1) (seval_1_model_auto___def_86 X2 H2))
  | (trans___def_78_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans___def_78_crypt_3 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans___def_78_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans___def_78_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans___def_78_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___def_78_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans___def_78_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  | (trans___def_78_f1_2 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_7 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_85 X2 H2) (seval_1_model_auto___def_79 X3 H3))
  end

with seval_1_model_auto___def_79 (X:term) (pi:(auto___def_79 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_79 X) return (seval_1 X)=val_1_5 with
    (trans___def_79_nonces_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end

with seval_1_model_auto___def_81 (X:term) (pi:(auto___def_81 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_81 X) return (seval_1 X)=val_1_5 with
    (trans___def_81_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_83 X1 H1) (seval_1_model_auto___def_84 X2 H2))
  end

with seval_1_model_auto___def_83 (X:term) (pi:(auto___def_83 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_83 X) return (seval_1 X)=val_1_5 with
    (trans___def_83_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_7 val_1_8 (seval_1_model_auto___def_85 X1 H1) (seval_1_model_auto___def_86 X2 H2))
  end

with seval_1_model_auto___def_84 (X:term) (pi:(auto___def_84 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_84 X) return (seval_1 X)=val_1_5 with
    (trans___def_84_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_88 X1 H1) (seval_1_model_auto___def_89 X2 H2))
  end

with seval_1_model_auto___def_85 (X:term) (pi:(auto___def_85 X)) {struct pi}:((seval_1 X)=val_1_7) :=
  match pi as pi in (auto___def_85 X) return (seval_1 X)=val_1_7 with
    (trans___def_85_session_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_session_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end

with seval_1_model_auto___def_86 (X:term) (pi:(auto___def_86 X)) {struct pi}:((seval_1 X)=val_1_8) :=
  match pi as pi in (auto___def_86 X) return (seval_1 X)=val_1_8 with
    (trans___def_86_f5_1 X1 X2 H1 H2) => (seval_1_rewrite_f5 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_79 X2 H2))
  end

with seval_1_model_auto___def_88 (X:term) (pi:(auto___def_88 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_88 X) return (seval_1 X)=val_1_5 with
    (trans___def_88_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_7 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_85 X2 H2) (seval_1_model_auto___def_79 X3 H3))
  end

with seval_1_model_auto___def_91 (X:term) (pi:(auto___def_91 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_91 X) return (seval_1 X)=val_1_5 with
    (trans___def_91_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_92 X1 H1) (seval_1_model_auto___def_93 X2 H2))
  end

with seval_1_model_auto___def_92 (X:term) (pi:(auto___def_92 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_92 X) return (seval_1 X)=val_1_5 with
    (trans___def_92_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_94 X1 H1))
  end

with seval_1_model_auto___def_93 (X:term) (pi:(auto___def_93 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_93 X) return (seval_1 X)=val_1_5 with
    (trans___def_93_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_79 X1 H1) (seval_1_model_auto___def_99 X2 H2))
  end

with seval_1_model_auto___def_94 (X:term) (pi:(auto___def_94 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_94 X) return (seval_1 X)=val_1_5 with
    (trans___def_94_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___type_12 X1 H1) (seval_1_model_auto___def_95 X2 H2))
  end

with seval_1_model_auto___def_95 (X:term) (pi:(auto___def_95 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_95 X) return (seval_1 X)=val_1_5 with
    (trans___def_95_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_96 X1 H1) (seval_1_model_auto___def_97 X2 H2))
  end

with seval_1_model_auto___def_96 (X:term) (pi:(auto___def_96 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_96 X) return (seval_1 X)=val_1_5 with
    (trans___def_96_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_79 X2 H2))
  end

with seval_1_model_auto___def_97 (X:term) (pi:(auto___def_97 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_97 X) return (seval_1 X)=val_1_5 with
    (trans___def_97_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_98 X1 H1) (seval_1_model_auto___def_89 X2 H2))
  end

with seval_1_model_auto___def_98 (X:term) (pi:(auto___def_98 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_98 X) return (seval_1 X)=val_1_5 with
    (trans___def_98_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_79 X2 H2))
  end

with seval_1_model_auto___def_99 (X:term) (pi:(auto___def_99 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_99 X) return (seval_1 X)=val_1_5 with
    (trans___def_99_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_81 X1 H1) (seval_1_model_auto___def_89 X2 H2))
  end

with seval_1_model_auto___type_12 (X:term) (pi:(auto___type_12 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_12 X) return (seval_1 X)=val_1_5 with
    (trans___type_12_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans___type_12_nil_1) => (seval_1_rewrite_nil)
  | (trans___type_12_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans___type_12_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_109 X1 H1))
  | (trans___type_12_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_91 X1 H1))
  | (trans___type_12_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans___type_12_nonces_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_12_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans___type_12_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  | (trans___type_12_success_1) => (seval_1_rewrite_success)
  | (trans___type_12_request_id_1) => (seval_1_rewrite_request_id)
  | (trans___type_12_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_7 val_1_8 (seval_1_model_auto___def_85 X1 H1) (seval_1_model_auto___def_86 X2 H2))
  | (trans___type_12_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans___type_12_crypt_3 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans___type_12_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans___type_12_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans___type_12_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_12_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans___type_12_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  | (trans___type_12_f1_2 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_7 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_85 X2 H2) (seval_1_model_auto___def_79 X3 H3))
  end

with seval_1_model_auto___type_13 (X:term) (pi:(auto___type_13 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_13 X) return (seval_1 X)=val_1_5 with
    (trans___type_13_nonces_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_13_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end

with seval_1_model_auto___type_16 (X:term) (pi:(auto___type_16 X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_16 X) return (seval_1 X)=val_1_5 with
    (trans___type_16_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans___type_16_nil_1) => (seval_1_rewrite_nil)
  | (trans___type_16_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans___type_16_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_109 X1 H1))
  | (trans___type_16_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_91 X1 H1))
  | (trans___type_16_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans___type_16_nonces_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_16_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans___type_16_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  | (trans___type_16_success_1) => (seval_1_rewrite_success)
  | (trans___type_16_request_id_1) => (seval_1_rewrite_request_id)
  | (trans___type_16_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_7 val_1_8 (seval_1_model_auto___def_85 X1 H1) (seval_1_model_auto___def_86 X2 H2))
  | (trans___type_16_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans___type_16_crypt_3 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans___type_16_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans___type_16_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans___type_16_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans___type_16_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans___type_16_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  | (trans___type_16_f1_2 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_7 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_85 X2 H2) (seval_1_model_auto___def_79 X3 H3))
  end

with seval_1_model_auto_knows_current (X:term) (pi:(auto_knows_current X)) {struct pi}:((seval_1 X)=val_1_5) :=
  match pi as pi in (auto_knows_current X) return (seval_1 X)=val_1_5 with
    (trans_knows_current_s_1 X1 H1) => (seval_1_rewrite_s (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans_knows_current_nil_1) => (seval_1_rewrite_nil)
  | (trans_knows_current_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans_knows_current_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_109 X1 H1))
  | (trans_knows_current_h_2 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_91 X1 H1))
  | (trans_knows_current_h_3 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto_knows_current X1 H1))
  | (trans_knows_current_nonces_current_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_78 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans_knows_current_respond_id_1) => (seval_1_rewrite_respond_id)
  | (trans_knows_current_f2_1 X1 X2 H1 H2) => (seval_1_rewrite_f2 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_103 X1 H1) (seval_1_model_auto___type_13 X2 H2))
  | (trans_knows_current_success_1) => (seval_1_rewrite_success)
  | (trans_knows_current_request_id_1) => (seval_1_rewrite_request_id)
  | (trans_knows_current_crypt_1 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_7 val_1_8 (seval_1_model_auto___def_85 X1 H1) (seval_1_model_auto___def_86 X2 H2))
  | (trans_knows_current_crypt_2 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans_knows_current_crypt_3 X1 X2 H1 H2) => (seval_1_rewrite_crypt (seval_1 X1) (seval_1 X2) val_1_4 val_1_8 (seval_1_model_auto___def_16 X1 H1) (seval_1_model_auto___def_17 X2 H2))
  | (trans_knows_current_nai_1 X1 H1) => (seval_1_rewrite_nai (seval_1 X1) val_1_6 (seval_1_model_auto_agent X1 H1))
  | (trans_knows_current_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  | (trans_knows_current_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  | (trans_knows_current_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto_knows_current X2 H2))
  | (trans_knows_current_f1_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_4 val_1_5 (seval_1_model_auto___def_18 X1 H1) (seval_1_model_auto___def_16 X2 H2) (seval_1_model_auto___def_10 X3 H3))
  | (trans_knows_current_f1_2 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_f1 (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_3 val_1_7 val_1_5 (seval_1_model_auto___def_87 X1 H1) (seval_1_model_auto___def_85 X2 H2) (seval_1_model_auto___def_79 X3 H3))
  end
.
Definition seval_1_model_auto___def_122 (X:term) (pi:(auto___def_122 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_122 X) return (seval_1 X)=val_1_5 with
    (trans___def_122_nonces_current_1 X1 X2 X3 H1 H2 _ H3 _) => (seval_1_rewrite_nonces_current (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto_knows_current X1 H1) (seval_1_model_auto___type_14 X2 H2) (seval_1_model_auto___type_15 X3 H3))
  end
.
Definition seval_1_model_auto___type_18 (X:term) (pi:(auto___type_18 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_18 X) return (seval_1 X)=val_1_6 with
    (trans___type_18_i_1) => (seval_1_rewrite_i)
  | (trans___type_18_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_18_server_1) => (seval_1_rewrite_server)
  | (trans___type_18_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_126 (X:term) (pi:(auto___def_126 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_126 X) return (seval_1 X)=val_1_5 with
    (trans___def_126_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___def_125 (X:term) (pi:(auto___def_125 X)):((seval_1 X)=val_1_9) :=
  match pi as pi in (auto___def_125 X) return (seval_1 X)=val_1_9 with
    (trans___def_125_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_5 (seval_1_model_auto___type_18 X1 H1) (seval_1_model_auto___def_126 X2 H2))
  end
.
Definition seval_1_model_auto___type_17 (X:term) (pi:(auto___type_17 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_17 X) return (seval_1 X)=val_1_6 with
    (trans___type_17_i_1) => (seval_1_rewrite_i)
  | (trans___type_17_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_17_server_1) => (seval_1_rewrite_server)
  | (trans___type_17_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___def_124 (X:term) (pi:(auto___def_124 X)):((seval_1 X)=val_1_2) :=
  match pi as pi in (auto___def_124 X) return (seval_1 X)=val_1_2 with
    (trans___def_124_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_9 (seval_1_model_auto___type_17 X1 H1) (seval_1_model_auto___def_125 X2 H2))
  end
.
Definition seval_1_model_auto___def_121 (X:term) (pi:(auto___def_121 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_121 X) return (seval_1 X)=val_1_3 with
    (trans___def_121_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_123 X1 H1) (seval_1_model_auto___def_124 X2 H2))
  end
.
Definition seval_1_model_auto___def_120 (X:term) (pi:(auto___def_120 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_120 X) return (seval_1 X)=val_1_5 with
    (trans___def_120_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_121 X1 H1) (seval_1_model_auto___def_122 X2 H2))
  end
.
Definition seval_1_model_auto___def_119 (X:term) (pi:(auto___def_119 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_119 X) return (seval_1 X)=val_1_5 with
    (trans___def_119_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_121 X1 H1) (seval_1_model_auto___def_122 X2 H2))
  end
.
Definition seval_1_model_auto___def_108 (X:term) (pi:(auto___def_108 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_108 X) return (seval_1 X)=val_1_5 with
    (trans___def_108_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_109 X1 H1))
  end
.
Definition seval_1_model_auto___def_69 (X:term) (pi:(auto___def_69 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_69 X) return (seval_1 X)=val_1_5 with
    (trans___def_69_nil_1) => (seval_1_rewrite_nil)
  end
.
Definition seval_1_model_auto___type_9 (X:term) (pi:(auto___type_9 X)):((seval_1 X)=val_1_6) :=
  match pi as pi in (auto___type_9 X) return (seval_1 X)=val_1_6 with
    (trans___type_9_i_1) => (seval_1_rewrite_i)
  | (trans___type_9_bob_1) => (seval_1_rewrite_bob)
  | (trans___type_9_server_1) => (seval_1_rewrite_server)
  | (trans___type_9_alice_1) => (seval_1_rewrite_alice)
  end
.
Definition seval_1_model_auto___type_10 (X:term) (pi:(auto___type_10 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___type_10 X) return (seval_1 X)=val_1_5 with
    (trans___type_10_nonces_old_1 X1 X2 X3 H1 H2 H3) => (seval_1_rewrite_nonces_old (seval_1 X1) (seval_1 X2) (seval_1 X3) val_1_5 val_1_6 val_1_6 (seval_1_model_auto___def_9 X1 H1) (seval_1_model_auto_agent X2 H2) (seval_1_model_auto_agent X3 H3))
  end
.
Definition seval_1_model_auto___def_90 (X:term) (pi:(auto___def_90 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_90 X) return (seval_1 X)=val_1_5 with
    (trans___def_90_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_91 X1 H1))
  end
.
Definition seval_1_model_auto___def_68 (X:term) (pi:(auto___def_68 X)):((seval_1 X)=val_1_9) :=
  match pi as pi in (auto___def_68 X) return (seval_1 X)=val_1_9 with
    (trans___def_68_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_5 (seval_1_model_auto___type_9 X1 H1) (seval_1_model_auto___def_69 X2 H2))
  end
.
Definition seval_1_model_auto___def_67 (X:term) (pi:(auto___def_67 X)):((seval_1 X)=val_1_2) :=
  match pi as pi in (auto___def_67 X) return (seval_1 X)=val_1_2 with
    (trans___def_67_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_6 val_1_9 (seval_1_model_auto___type_11 X1 H1) (seval_1_model_auto___def_68 X2 H2))
  end
.
Definition seval_1_model_auto___def_66 (X:term) (pi:(auto___def_66 X)):((seval_1 X)=val_1_1) :=
  match pi as pi in (auto___def_66 X) return (seval_1 X)=val_1_1 with
    (trans___def_66_sym_1) => (seval_1_rewrite_sym)
  end
.
Definition seval_1_model_auto___def_65 (X:term) (pi:(auto___def_65 X)):((seval_1 X)=val_1_3) :=
  match pi as pi in (auto___def_65 X) return (seval_1 X)=val_1_3 with
    (trans___def_65_key_1 X1 X2 H1 H2) => (seval_1_rewrite_key (seval_1 X1) (seval_1 X2) val_1_1 val_1_2 (seval_1_model_auto___def_66 X1 H1) (seval_1_model_auto___def_67 X2 H2))
  end
.
Definition seval_1_model_auto___def_64 (X:term) (pi:(auto___def_64 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_64 X) return (seval_1 X)=val_1_5 with
    (trans___def_64_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_65 X1 H1) (seval_1_model_auto___type_10 X2 H2))
  end
.
Definition seval_1_model_auto___def_54 (X:term) (pi:(auto___def_54 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_54 X) return (seval_1 X)=val_1_5 with
    (trans___def_54_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  end
.
Definition seval_1_model_auto___def_82 (X:term) (pi:(auto___def_82 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_82 X) return (seval_1 X)=val_1_5 with
    (trans___def_82_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_90 X1 H1) (seval_1_model_auto___def_89 X2 H2))
  end
.
Definition seval_1_model_auto___def_43 (X:term) (pi:(auto___def_43 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_43 X) return (seval_1 X)=val_1_5 with
    (trans___def_43_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_44 X1 H1))
  end
.
Definition seval_1_model_auto___def_25 (X:term) (pi:(auto___def_25 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_25 X) return (seval_1 X)=val_1_5 with
    (trans___def_25_h_1 X1 H1) => (seval_1_rewrite_h (seval_1 X1) val_1_5 (seval_1_model_auto___def_26 X1 H1))
  end
.
Definition seval_1_model_auto___def_63 (X:term) (pi:(auto___def_63 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_63 X) return (seval_1 X)=val_1_5 with
    (trans___def_63_f4_1 X1 X2 H1 H2) => (seval_1_rewrite_f4 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_65 X1 H1) (seval_1_model_auto___type_10 X2 H2))
  end
.
Definition seval_1_model_auto___def_13 (X:term) (pi:(auto___def_13 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_13 X) return (seval_1 X)=val_1_5 with
    (trans___def_13_cons_1 X1 X2 H1 H2) => (seval_1_rewrite_cons (seval_1 X1) (seval_1 X2) val_1_5 val_1_5 (seval_1_model_auto___def_25 X1 H1) (seval_1_model_auto___def_24 X2 H2))
  end
.
Definition seval_1_model_auto___def_55 (X:term) (pi:(auto___def_55 X)):((seval_1 X)=val_1_5) :=
  match pi as pi in (auto___def_55 X) return (seval_1 X)=val_1_5 with
    (trans___def_55_f3_1 X1 X2 H1 H2) => (seval_1_rewrite_f3 (seval_1 X1) (seval_1 X2) val_1_3 val_1_5 (seval_1_model_auto___def_56 X1 H1) (seval_1_model_auto___def_57 X2 H2))
  end
.

Remark rem_1 : forall X1:term, auto_knows_old X1 -> auto___def_17 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_5). 2:apply seval_1_model_auto_knows_old. 2:assumption.
  cut ((seval_1 X1)=val_1_8). 2:apply seval_1_model_auto___def_17. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_2 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 (key sym X2) -> auto_knows_old (key sym X2) -> auto_knows_old X1. (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2. intros.
  assert (HH:=(rem_1 (key sym X2))). tauto.
Qed.

Remark rem_3 : forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_4 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old (key sym X2) -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_3 X1).
Qed.

Remark rem_5 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old (key sym X2) -> auto_knows_old (key sym X2) -> auto_knows_old X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old (key sym X2) -> auto_knows_old X1). tauto. exact (rem_4 X1 X2).
Qed.

Inductive or_2(H1 H2:Prop) : Prop :=
    or_2_intro_1 : H1 -> (or_2 H1 H2)
  | or_2_intro_2 : H2 -> (or_2 H1 H2)
.

Remark rem_6 : forall X1 X2:term, auto_knows_old (crypt X1 X2) -> or_2
    (auto___def_16 X1 /\ auto___def_17 X2)
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_2_intro_1; tauto.
  intros. apply or_2_intro_2; tauto.
Qed.

Remark rem_7 : forall X1 X2:term, auto_knows_old (crypt X1 (key sym X2)) -> auto_knows_old (key sym X2) -> auto_knows_old X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_6 X1 (key sym X2) H);  intros.
  apply (rem_2 X1 X2);  tauto.
  apply (rem_5 X1 X2);  tauto.
Qed.

Remark rem_8 : forall _big_m X:term, auto_knows_old (crypt _big_m (key sym X)) -> auto_knows_old (key sym X) -> auto_knows_old _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_old (crypt X1 (key sym X2)) -> auto_knows_old (key sym X2) -> auto_knows_old X1). tauto. exact (rem_7 X1 X2).
Qed.

Remark rem_9 : forall X1:term, auto_knows_current X1 -> auto_knows_current X1. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_10 : forall X1:term, auto_knows_current X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_9 X1);  assumption.
  tauto.
Qed.

Remark rem_11 : forall X1:term, auto_knows_current X1 -> auto_knows_current (s X1). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1.
  case (rem_10 X1 A1). clear  A1. intros. apply trans_knows_current_s_1;  tauto.
 clear  A1. tauto.
Qed.

Remark rem_12 : forall _big_m:term, auto_knows_current _big_m -> auto_knows_current (s _big_m). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_current X1 -> auto_knows_current (s X1)). tauto. exact (rem_11 X1).
Qed.

Inductive or_0 : Prop :=
.

Remark rem_13 : forall X1 X2:term, auto___def_86 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_14 : forall X1:term, auto___def_86 (key prv X1) -> auto_knows_current (key pub X1) -> False. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_13 prv X1 H);  intros.
Qed.

Remark rem_15 : forall X2:term, auto___def_86 (key prv X2) -> auto_knows_current (key pub X2) -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto___def_86 (key prv X1) -> auto_knows_current (key pub X1) -> False). tauto. exact (rem_14 X1).
Qed.

Remark rem_16 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 (key prv X2) -> auto_knows_current (key pub X2) -> auto_knows_current X1. (* Split. *)
Proof.
  intros X1 X2.
  cut (auto___def_86 (key prv X2) -> auto_knows_current (key pub X2) -> False). tauto.
  exact (rem_15 X2).
Qed.

Remark rem_17 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current (key prv X2) -> auto_knows_current (key pub X2) -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_9 X1).
Qed.

Remark rem_18 : forall X1 X2:term, auto___def_17 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_19 : forall X1:term, auto___def_17 (key prv X1) -> auto_knows_current (key pub X1) -> False. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_18 prv X1 H);  intros.
Qed.

Remark rem_20 : forall X2:term, auto___def_17 (key prv X2) -> auto_knows_current (key pub X2) -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto___def_17 (key prv X1) -> auto_knows_current (key pub X1) -> False). tauto. exact (rem_19 X1).
Qed.

Remark rem_21 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 (key prv X2) -> auto_knows_current (key pub X2) -> auto_knows_current X1. (* Split. *)
Proof.
  intros X1 X2.
  cut (auto___def_17 (key prv X2) -> auto_knows_current (key pub X2) -> False). tauto.
  exact (rem_20 X2).
Qed.

Inductive or_3(H1 H2 H3:Prop) : Prop :=
    or_3_intro_1 : H1 -> (or_3 H1 H2 H3)
  | or_3_intro_2 : H2 -> (or_3 H1 H2 H3)
  | or_3_intro_3 : H3 -> (or_3 H1 H2 H3)
.

Remark rem_22 : forall X1 X2:term, auto_knows_current (crypt X1 X2) -> or_3
    (auto___def_85 X1 /\ auto___def_86 X2)
    (auto_knows_current X1 /\ auto_knows_current X2)
    (auto___def_16 X1 /\ auto___def_17 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_23 : forall X1 X2:term, auto_knows_current (crypt X1 (key prv X2)) -> auto_knows_current (key pub X2) -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_22 X1 (key prv X2) H);  intros.
  apply (rem_16 X1 X2);  tauto.
  apply (rem_17 X1 X2);  tauto.
  apply (rem_21 X1 X2);  tauto.
Qed.

Remark rem_24 : forall _big_k _big_m:term, auto_knows_current (crypt _big_m (key prv _big_k)) -> auto_knows_current (key pub _big_k) -> auto_knows_current _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_current (crypt X1 (key prv X2)) -> auto_knows_current (key pub X2) -> auto_knows_current X1). tauto. exact (rem_23 X1 X2).
Qed.

Remark rem_25 : forall X1:term, auto_knows_current X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1.
  case (rem_10 X1 A1). clear  A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  A1. tauto.
Qed.

Remark rem_26 : forall _big_m:term, auto_knows_current _big_m -> auto_knows_current (h _big_m). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_current X1 -> auto_knows_current (h X1)). tauto. exact (rem_25 X1).
Qed.

Inductive or_1(H1:Prop) : Prop :=
    or_1_intro_1 : H1 -> (or_1 H1)
.

Remark rem_27 : forall X1:term, auto_knows_current (s X1) -> or_1
    (auto_knows_current X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_28 : forall X1:term, auto_knows_current (s X1) -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_27 X1 H);  intros.
  apply (rem_9 X1);  tauto.
Qed.

Remark rem_29 : forall _big_m:term, auto_knows_current (s _big_m) -> auto_knows_current _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_current (s X1) -> auto_knows_current X1). tauto. exact (rem_28 X1).
Qed.

Remark rem_30 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intros X1.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (Hrec X1).
Defined.

Remark rem_31 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_30 epsilon_mknows_old_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_32 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  case (rem_31 epsilon_mknows_old_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current A1. intros. apply trans_knows_current_s_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1. tauto.
Defined.

Remark rem_33 : forall X1:term, auto_knows_old (s X1) -> or_1
    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_34 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old (s X1) -> auto_knows_current (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intro H. intros.
  elim (rem_33 X1 H);  intros.
  apply (rem_32 epsilon_mknows_old_pknows_current X1);  tauto.
Defined.

Remark rem_35 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current.  tauto.
Defined.

Remark rem_36 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current.  case (rem_35 epsilon_mknows_old_pknows_current). clear  epsilon_mknows_old_pknows_current. intros. apply trans_knows_current_nil_1;  tauto.
 clear  epsilon_mknows_old_pknows_current. tauto.
Defined.

Remark rem_37 : auto_knows_old nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_38 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_old nil -> auto_knows_current nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intro H. intros.
  elim (rem_37 H);  intros.
  apply (rem_36 epsilon_mknows_old_pknows_current);  tauto.
Defined.

Remark rem_39 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intro H. clear H. intro H. clear H. intros X1.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (Hrec X1).
Defined.

Remark rem_40 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_39 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_41 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_16 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_40 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. intros. apply trans___type_16_s_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_42 : forall X1:term, auto___type_6 (s X1) -> or_1
    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_43 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_6 (s X1) -> auto___type_16 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_42 X1 H);  intros.
  apply (rem_41 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_44 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109.  tauto.
Defined.

Remark rem_45 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_16 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109.  case (rem_44 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros. apply trans___type_16_nil_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_46 : auto___type_6 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_47 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_6 nil -> auto___type_16 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_46 H);  intros.
  apply (rem_45 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_48 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1. (* Use induction hypothesis. *)
Proof.
   intro H. clear H. intro H. clear H. intro Hrec. intros X1.
  cut (auto___def_44 X1 -> auto___def_109 X1). tauto. exact (Hrec X1).
Defined.

Remark rem_49 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_48 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_50 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_44 X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_49 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. intros. apply trans___type_16_h_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_51 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intro H. clear H. intro H. clear H. intro H. clear H. intros X1.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (Hrec X1).
Defined.

Remark rem_52 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_51 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_53 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_52 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. intros. apply trans_knows_current_s_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_54 : forall X1:term, auto___type_2 (s X1) -> or_1
    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_55 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_2 (s X1) -> auto_knows_current (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_54 X1 H);  intros.
  apply (rem_53 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_56 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109.  tauto.
Defined.

Remark rem_57 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109.  case (rem_56 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros. apply trans_knows_current_nil_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_58 : auto___type_2 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_59 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_2 nil -> auto_knows_current nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_58 H);  intros.
  apply (rem_57 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_60 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1. (* Use induction hypothesis. *)
Proof.
   intro H. clear H. intro H. clear H. intro H. clear H. intro Hrec. intros X1.
  cut (auto___def_44 X1 -> auto___def_109 X1). tauto. exact (Hrec X1).
Defined.

Remark rem_61 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_60 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_62 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_44 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_61 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. intros. apply trans_knows_current_h_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_63 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1. (* Use induction hypothesis. *)
Proof.
   intro H. clear H. intro H. clear H. intro Hrec. intro H. clear H. intros X1.
  cut (auto___def_26 X1 -> auto_knows_current X1). tauto. exact (Hrec X1).
Defined.

Remark rem_64 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_63 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_65 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_64 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_66 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_52 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_67 : forall X1:term, auto___type_2 (h X1) -> or_3
    (auto___def_44 X1)    (auto___def_26 X1)    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_68 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_2 (h X1) -> auto_knows_current (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_67 X1 H);  intros.
  apply (rem_62 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  tauto.
  apply (rem_65 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  tauto.
  apply (rem_66 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_69 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto_knows_current respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109.  case (rem_56 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros. apply trans_knows_current_respond_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_70 : auto___type_2 respond_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_71 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_2 respond_id -> auto_knows_current respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_70 H);  intros.
  apply (rem_69 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_72 : (forall X:term, auto___def_39 X -> auto___def_104 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_39_p__def_104.  tauto.
Defined.

Remark rem_73 : (forall X:term, auto___def_39 X -> auto___def_104 X)
    -> auto___def_104 sym. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_39_p__def_104.  case (rem_72 epsilon_m__def_39_p__def_104). clear  epsilon_m__def_39_p__def_104. intros. apply trans___def_104_sym_1;  tauto.
 clear  epsilon_m__def_39_p__def_104. tauto.
Defined.

Remark rem_74 : auto___def_39 sym -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_75 : (forall X:term, auto___def_39 X -> auto___def_104 X)
    -> auto___def_39 sym -> auto___def_104 sym. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_39_p__def_104. intro H. intros.
  elim (rem_74 H);  intros.
  apply (rem_73 epsilon_m__def_39_p__def_104);  tauto.
Defined.

Remark rem_76 : forall X1:term, auto___def_39 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_77 : forall X1 X2:term, auto___def_39 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_78 : auto___def_39 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_79 : auto___def_39 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_80 : forall X1 X2:term, auto___def_39 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_81 : forall X1 X2 X3:term, auto___def_39 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_82 : forall X1 X2:term, auto___def_39 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_83 : forall X1:term, auto___def_39 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_84 : forall X1 X2 X3:term, auto___def_39 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_85 : forall X1 X2 X3:term, auto___def_39 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_86 : auto___def_39 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_87 : auto___def_39 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_88 : forall X1 X2:term, auto___def_39 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_89 : auto___def_39 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_90 : auto___def_39 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_91 : auto___def_39 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_92 : forall X1 X2:term, auto___def_39 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_93 : forall X1:term, auto___def_39 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_94 : forall X1 X2:term, auto___def_39 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_95 : auto___def_39 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_96 : auto___def_39 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_97 : forall X1 X2 X3:term, auto___def_39 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_98 : forall X1 X2:term, auto___def_39 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_99 : auto___def_39 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_100 : forall X1 X2 X3:term, auto___def_39 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_101 : forall X1:term, auto___def_39 X1 -> auto___def_104 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_39_p__def_104 1.
  intro X. case X.
   intro H. elim (rem_99  H).
   intro H. elim (rem_95  H).
  intros X1 X2. intro H. elim (rem_98 X1 X2 H).
  intros X1 X2. intro H. elim (rem_92 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_100 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_88 X1 X2 H).
  intros X1 X2. intro H. elim (rem_82 X1 X2 H).
  intros X1 X2. intro H. elim (rem_94 X1 X2 H).
  intros X1 X2. intro H. elim (rem_80 X1 X2 H).
  intros X1. intro H. elim (rem_83 X1 H).
   intro H. elim (rem_79  H).
  intros X1 X2. intro H. elim (rem_77 X1 X2 H).
  intros X1. intro H. elim (rem_93 X1 H).
   intro H. elim (rem_78  H).
  intros X1 X2 X3. intro H. elim (rem_84 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_97 X1 X2 X3 H).
   intro H. elim (rem_87  H).
   intro H. elim (rem_91  H).
   intro H. elim (rem_90  H).
   intro H. elim (rem_86  H).
  intros X1. intro H. elim (rem_76 X1 H).
   intro H. elim (rem_96  H).
  intros X1 X2 X3. intro H. elim (rem_85 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_81 X1 X2 X3 H).
   intro H. elim (rem_89  H).
  exact (rem_75 epsilon_m__def_39_p__def_104 ).
Qed.

Remark rem_102 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X1:term, auto___def_39 X1 -> auto___def_104 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_38_p__def_103. exact (rem_101).
Defined.

Remark rem_103 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X1 X2:term, auto___def_39 X1 -> auto___def_40 X2 -> auto___def_104 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_38_p__def_103. intros X1 X2.
  cut (auto___def_39 X1 -> auto___def_104 X1). tauto. exact (rem_102 epsilon_m__def_38_p__def_103 X1).
Defined.

Remark rem_104 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_4_p__type_14.  tauto.
Defined.

Remark rem_105 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_14 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14.  case (rem_104 epsilon_m__type_4_p__type_14). clear  epsilon_m__type_4_p__type_14. intros. apply trans___type_14_i_1;  tauto.
 clear  epsilon_m__type_4_p__type_14. tauto.
Defined.

Remark rem_106 : auto___type_4 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_107 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_4 i -> auto___type_14 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14. intro H. intros.
  elim (rem_106 H);  intros.
  apply (rem_105 epsilon_m__type_4_p__type_14);  tauto.
Defined.

Remark rem_108 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_14 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14.  case (rem_104 epsilon_m__type_4_p__type_14). clear  epsilon_m__type_4_p__type_14. intros. apply trans___type_14_bob_1;  tauto.
 clear  epsilon_m__type_4_p__type_14. tauto.
Defined.

Remark rem_109 : auto___type_4 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_110 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_4 bob -> auto___type_14 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14. intro H. intros.
  elim (rem_109 H);  intros.
  apply (rem_108 epsilon_m__type_4_p__type_14);  tauto.
Defined.

Remark rem_111 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_14 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14.  case (rem_104 epsilon_m__type_4_p__type_14). clear  epsilon_m__type_4_p__type_14. intros. apply trans___type_14_server_1;  tauto.
 clear  epsilon_m__type_4_p__type_14. tauto.
Defined.

Remark rem_112 : auto___type_4 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_113 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_4 server -> auto___type_14 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14. intro H. intros.
  elim (rem_112 H);  intros.
  apply (rem_111 epsilon_m__type_4_p__type_14);  tauto.
Defined.

Remark rem_114 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_14 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14.  case (rem_104 epsilon_m__type_4_p__type_14). clear  epsilon_m__type_4_p__type_14. intros. apply trans___type_14_alice_1;  tauto.
 clear  epsilon_m__type_4_p__type_14. tauto.
Defined.

Remark rem_115 : auto___type_4 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_116 : (forall X:term, auto___type_4 X -> auto___type_14 X)
    -> auto___type_4 alice -> auto___type_14 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_14. intro H. intros.
  elim (rem_115 H);  intros.
  apply (rem_114 epsilon_m__type_4_p__type_14);  tauto.
Defined.

Remark rem_117 : forall X1:term, auto___type_4 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_118 : forall X1 X2:term, auto___type_4 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_119 : auto___type_4 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_120 : auto___type_4 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_121 : forall X1 X2:term, auto___type_4 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_122 : forall X1 X2 X3:term, auto___type_4 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_123 : forall X1 X2:term, auto___type_4 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_124 : forall X1:term, auto___type_4 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_125 : forall X1 X2 X3:term, auto___type_4 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_126 : forall X1 X2 X3:term, auto___type_4 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_127 : auto___type_4 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_128 : auto___type_4 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_129 : forall X1 X2:term, auto___type_4 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_130 : auto___type_4 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_131 : auto___type_4 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_132 : auto___type_4 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_133 : forall X1 X2:term, auto___type_4 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_134 : forall X1:term, auto___type_4 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_135 : forall X1 X2:term, auto___type_4 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_136 : forall X1 X2 X3:term, auto___type_4 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_137 : forall X1 X2:term, auto___type_4 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_138 : forall X1 X2 X3:term, auto___type_4 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_139 : forall X1:term, auto___type_4 X1 -> auto___type_14 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_4_p__type_14 1.
  intro X. case X.
  exact (rem_116 epsilon_m__type_4_p__type_14 ).
  exact (rem_110 epsilon_m__type_4_p__type_14 ).
  intros X1 X2. intro H. elim (rem_137 X1 X2 H).
  intros X1 X2. intro H. elim (rem_133 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_138 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_129 X1 X2 H).
  intros X1 X2. intro H. elim (rem_123 X1 X2 H).
  intros X1 X2. intro H. elim (rem_135 X1 X2 H).
  intros X1 X2. intro H. elim (rem_121 X1 X2 H).
  intros X1. intro H. elim (rem_124 X1 H).
  exact (rem_107 epsilon_m__type_4_p__type_14 ).
  intros X1 X2. intro H. elim (rem_118 X1 X2 H).
  intros X1. intro H. elim (rem_134 X1 H).
   intro H. elim (rem_119  H).
  intros X1 X2 X3. intro H. elim (rem_125 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_136 X1 X2 X3 H).
   intro H. elim (rem_128  H).
   intro H. elim (rem_132  H).
   intro H. elim (rem_131  H).
   intro H. elim (rem_127  H).
  intros X1. intro H. elim (rem_117 X1 H).
  exact (rem_113 epsilon_m__type_4_p__type_14 ).
  intros X1 X2 X3. intro H. elim (rem_126 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_122 X1 X2 X3 H).
   intro H. elim (rem_130  H).
   intro H. elim (rem_120  H).
Qed.

Remark rem_140 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X1:term, auto___type_4 X1 -> auto___type_14 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_40_p__def_105. exact (rem_139).
Defined.

Remark rem_141 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X1 X2:term, auto___type_4 X1 -> auto___def_41 X2 -> auto___type_14 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_40_p__def_105. intros X1 X2.
  cut (auto___type_4 X1 -> auto___type_14 X1). tauto. exact (rem_140 epsilon_m__def_40_p__def_105 X1).
Defined.

Remark rem_142 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_5_p__type_15.  tauto.
Defined.

Remark rem_143 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_15 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15.  case (rem_142 epsilon_m__type_5_p__type_15). clear  epsilon_m__type_5_p__type_15. intros. apply trans___type_15_i_1;  tauto.
 clear  epsilon_m__type_5_p__type_15. tauto.
Defined.

Remark rem_144 : auto___type_5 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_145 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_5 i -> auto___type_15 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15. intro H. intros.
  elim (rem_144 H);  intros.
  apply (rem_143 epsilon_m__type_5_p__type_15);  tauto.
Defined.

Remark rem_146 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_15 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15.  case (rem_142 epsilon_m__type_5_p__type_15). clear  epsilon_m__type_5_p__type_15. intros. apply trans___type_15_bob_1;  tauto.
 clear  epsilon_m__type_5_p__type_15. tauto.
Defined.

Remark rem_147 : auto___type_5 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_148 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_5 bob -> auto___type_15 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15. intro H. intros.
  elim (rem_147 H);  intros.
  apply (rem_146 epsilon_m__type_5_p__type_15);  tauto.
Defined.

Remark rem_149 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_15 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15.  case (rem_142 epsilon_m__type_5_p__type_15). clear  epsilon_m__type_5_p__type_15. intros. apply trans___type_15_server_1;  tauto.
 clear  epsilon_m__type_5_p__type_15. tauto.
Defined.

Remark rem_150 : auto___type_5 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_151 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_5 server -> auto___type_15 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15. intro H. intros.
  elim (rem_150 H);  intros.
  apply (rem_149 epsilon_m__type_5_p__type_15);  tauto.
Defined.

Remark rem_152 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_15 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15.  case (rem_142 epsilon_m__type_5_p__type_15). clear  epsilon_m__type_5_p__type_15. intros. apply trans___type_15_alice_1;  tauto.
 clear  epsilon_m__type_5_p__type_15. tauto.
Defined.

Remark rem_153 : auto___type_5 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_154 : (forall X:term, auto___type_5 X -> auto___type_15 X)
    -> auto___type_5 alice -> auto___type_15 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_15. intro H. intros.
  elim (rem_153 H);  intros.
  apply (rem_152 epsilon_m__type_5_p__type_15);  tauto.
Defined.

Remark rem_155 : forall X1:term, auto___type_5 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_156 : forall X1 X2:term, auto___type_5 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_157 : auto___type_5 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_158 : auto___type_5 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_159 : forall X1 X2:term, auto___type_5 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_160 : forall X1 X2 X3:term, auto___type_5 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_161 : forall X1 X2:term, auto___type_5 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_162 : forall X1:term, auto___type_5 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_163 : forall X1 X2 X3:term, auto___type_5 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_164 : forall X1 X2 X3:term, auto___type_5 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_165 : auto___type_5 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_166 : auto___type_5 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_167 : forall X1 X2:term, auto___type_5 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_168 : auto___type_5 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_169 : auto___type_5 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_170 : auto___type_5 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_171 : forall X1 X2:term, auto___type_5 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_172 : forall X1:term, auto___type_5 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_173 : forall X1 X2:term, auto___type_5 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_174 : forall X1 X2 X3:term, auto___type_5 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_175 : forall X1 X2:term, auto___type_5 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_176 : forall X1 X2 X3:term, auto___type_5 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_177 : forall X1:term, auto___type_5 X1 -> auto___type_15 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_5_p__type_15 1.
  intro X. case X.
  exact (rem_154 epsilon_m__type_5_p__type_15 ).
  exact (rem_148 epsilon_m__type_5_p__type_15 ).
  intros X1 X2. intro H. elim (rem_175 X1 X2 H).
  intros X1 X2. intro H. elim (rem_171 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_176 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_167 X1 X2 H).
  intros X1 X2. intro H. elim (rem_161 X1 X2 H).
  intros X1 X2. intro H. elim (rem_173 X1 X2 H).
  intros X1 X2. intro H. elim (rem_159 X1 X2 H).
  intros X1. intro H. elim (rem_162 X1 H).
  exact (rem_145 epsilon_m__type_5_p__type_15 ).
  intros X1 X2. intro H. elim (rem_156 X1 X2 H).
  intros X1. intro H. elim (rem_172 X1 H).
   intro H. elim (rem_157  H).
  intros X1 X2 X3. intro H. elim (rem_163 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_174 X1 X2 X3 H).
   intro H. elim (rem_166  H).
   intro H. elim (rem_170  H).
   intro H. elim (rem_169  H).
   intro H. elim (rem_165  H).
  intros X1. intro H. elim (rem_155 X1 H).
  exact (rem_151 epsilon_m__type_5_p__type_15 ).
  intros X1 X2 X3. intro H. elim (rem_164 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_160 X1 X2 X3 H).
   intro H. elim (rem_168  H).
   intro H. elim (rem_158  H).
Qed.

Remark rem_178 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X1:term, auto___type_5 X1 -> auto___type_15 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_41_p__def_106. exact (rem_177).
Defined.

Remark rem_179 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X1 X2:term, auto___type_5 X1 -> auto___def_42 X2 -> auto___type_15 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_41_p__def_106. intros X1 X2.
  cut (auto___type_5 X1 -> auto___type_15 X1). tauto. exact (rem_178 epsilon_m__def_41_p__def_106 X1).
Defined.

Remark rem_180 : (forall X:term, auto___def_42 X -> auto___def_107 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_42_p__def_107.  tauto.
Defined.

Remark rem_181 : (forall X:term, auto___def_42 X -> auto___def_107 X)
    -> auto___def_107 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_42_p__def_107.  case (rem_180 epsilon_m__def_42_p__def_107). clear  epsilon_m__def_42_p__def_107. intros. apply trans___def_107_nil_1;  tauto.
 clear  epsilon_m__def_42_p__def_107. tauto.
Defined.

Remark rem_182 : auto___def_42 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_183 : (forall X:term, auto___def_42 X -> auto___def_107 X)
    -> auto___def_42 nil -> auto___def_107 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_42_p__def_107. intro H. intros.
  elim (rem_182 H);  intros.
  apply (rem_181 epsilon_m__def_42_p__def_107);  tauto.
Defined.

Remark rem_184 : forall X1:term, auto___def_42 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_185 : forall X1 X2:term, auto___def_42 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_186 : auto___def_42 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_187 : auto___def_42 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_188 : forall X1 X2:term, auto___def_42 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_189 : forall X1 X2 X3:term, auto___def_42 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_190 : forall X1 X2:term, auto___def_42 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_191 : forall X1:term, auto___def_42 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_192 : forall X1 X2 X3:term, auto___def_42 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_193 : forall X1 X2 X3:term, auto___def_42 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_194 : auto___def_42 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_195 : auto___def_42 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_196 : forall X1 X2:term, auto___def_42 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_197 : auto___def_42 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_198 : auto___def_42 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_199 : auto___def_42 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_200 : forall X1 X2:term, auto___def_42 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_201 : forall X1:term, auto___def_42 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_202 : forall X1 X2:term, auto___def_42 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_203 : auto___def_42 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_204 : auto___def_42 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_205 : forall X1 X2 X3:term, auto___def_42 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_206 : forall X1 X2:term, auto___def_42 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_207 : auto___def_42 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_208 : forall X1 X2 X3:term, auto___def_42 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_209 : forall X2:term, auto___def_42 X2 -> auto___def_107 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_42_p__def_107 1.
  intro X. case X.
   intro H. elim (rem_207  H).
   intro H. elim (rem_203  H).
  intros X1 X2. intro H. elim (rem_206 X1 X2 H).
  intros X1 X2. intro H. elim (rem_200 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_208 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_196 X1 X2 H).
  intros X1 X2. intro H. elim (rem_190 X1 X2 H).
  intros X1 X2. intro H. elim (rem_202 X1 X2 H).
  intros X1 X2. intro H. elim (rem_188 X1 X2 H).
  intros X1. intro H. elim (rem_191 X1 H).
   intro H. elim (rem_186  H).
  intros X1 X2. intro H. elim (rem_185 X1 X2 H).
  intros X1. intro H. elim (rem_201 X1 H).
  exact (rem_183 epsilon_m__def_42_p__def_107 ).
  intros X1 X2 X3. intro H. elim (rem_192 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_205 X1 X2 X3 H).
   intro H. elim (rem_195  H).
   intro H. elim (rem_199  H).
   intro H. elim (rem_198  H).
   intro H. elim (rem_194  H).
  intros X1. intro H. elim (rem_184 X1 H).
   intro H. elim (rem_204  H).
  intros X1 X2 X3. intro H. elim (rem_193 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_189 X1 X2 X3 H).
   intro H. elim (rem_197  H).
   intro H. elim (rem_187  H).
Qed.

Remark rem_210 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X2:term, auto___def_42 X2 -> auto___def_107 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_41_p__def_106. exact (rem_209).
Defined.

Remark rem_211 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X1 X2:term, auto___type_5 X1 -> auto___def_42 X2 -> auto___def_107 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_41_p__def_106. intros X1 X2.
  cut (auto___def_42 X2 -> auto___def_107 X2). tauto. exact (rem_210 epsilon_m__def_41_p__def_106 X2).
Defined.

Remark rem_212 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X1 X2:term, auto___type_5 X1 -> auto___def_42 X2 -> (auto___type_15 X1 /\ auto___def_107 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_41_p__def_106. intros X1 X2. intros A1 A2.
  cut (auto___type_15 X1). 2:apply (rem_179 epsilon_m__def_41_p__def_106 X1 X2);  assumption.
  cut (auto___def_107 X2). 2:apply (rem_211 epsilon_m__def_41_p__def_106 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_213 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X1 X2:term, auto___type_5 X1 -> auto___def_42 X2 -> auto___def_106 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_41_p__def_106. intros X1 X2. intros A1 A2.
  case (rem_212 epsilon_m__def_41_p__def_106 X1 X2 A1 A2). clear  epsilon_m__def_41_p__def_106 A1 A2. intros. apply trans___def_106_cons_1;  tauto.
 clear  epsilon_m__def_41_p__def_106 A1 A2. tauto.
Defined.

Remark rem_214 : forall X1 X2:term, auto___def_41 (cons X1 X2) -> or_1
    (auto___type_5 X1 /\ auto___def_42 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_215 : (forall X:term, auto___def_41 X -> auto___def_106 X)
    -> forall X1 X2:term, auto___def_41 (cons X1 X2) -> auto___def_106 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_41_p__def_106. intros X1 X2. intro H. intros.
  elim (rem_214 X1 X2 H);  intros.
  apply (rem_213 epsilon_m__def_41_p__def_106 X1 X2);  tauto.
Defined.

Remark rem_216 : forall X1:term, auto___def_41 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_217 : forall X1 X2:term, auto___def_41 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_218 : auto___def_41 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_219 : auto___def_41 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_220 : auto___def_41 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_221 : forall X1 X2:term, auto___def_41 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_222 : forall X1 X2 X3:term, auto___def_41 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_223 : forall X1 X2:term, auto___def_41 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_224 : forall X1:term, auto___def_41 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_225 : forall X1 X2 X3:term, auto___def_41 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_226 : forall X1 X2 X3:term, auto___def_41 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_227 : auto___def_41 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_228 : auto___def_41 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_229 : forall X1 X2:term, auto___def_41 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_230 : auto___def_41 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_231 : auto___def_41 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_232 : auto___def_41 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_233 : forall X1 X2:term, auto___def_41 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_234 : forall X1:term, auto___def_41 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_235 : forall X1 X2:term, auto___def_41 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_236 : auto___def_41 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_237 : auto___def_41 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_238 : forall X1 X2 X3:term, auto___def_41 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_239 : auto___def_41 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_240 : forall X1 X2 X3:term, auto___def_41 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_241 : forall X2:term, auto___def_41 X2 -> auto___def_106 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_41_p__def_106 1.
  intro X. case X.
   intro H. elim (rem_239  H).
   intro H. elim (rem_236  H).
  intros X1 X2;  exact (rem_215 epsilon_m__def_41_p__def_106 X1 X2).
  intros X1 X2. intro H. elim (rem_233 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_240 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_229 X1 X2 H).
  intros X1 X2. intro H. elim (rem_223 X1 X2 H).
  intros X1 X2. intro H. elim (rem_235 X1 X2 H).
  intros X1 X2. intro H. elim (rem_221 X1 X2 H).
  intros X1. intro H. elim (rem_224 X1 H).
   intro H. elim (rem_219  H).
  intros X1 X2. intro H. elim (rem_217 X1 X2 H).
  intros X1. intro H. elim (rem_234 X1 H).
   intro H. elim (rem_218  H).
  intros X1 X2 X3. intro H. elim (rem_225 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_238 X1 X2 X3 H).
   intro H. elim (rem_228  H).
   intro H. elim (rem_232  H).
   intro H. elim (rem_231  H).
   intro H. elim (rem_227  H).
  intros X1. intro H. elim (rem_216 X1 H).
   intro H. elim (rem_237  H).
  intros X1 X2 X3. intro H. elim (rem_226 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_222 X1 X2 X3 H).
   intro H. elim (rem_230  H).
   intro H. elim (rem_220  H).
Qed.

Remark rem_242 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X2:term, auto___def_41 X2 -> auto___def_106 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_40_p__def_105. exact (rem_241).
Defined.

Remark rem_243 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X1 X2:term, auto___type_4 X1 -> auto___def_41 X2 -> auto___def_106 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_40_p__def_105. intros X1 X2.
  cut (auto___def_41 X2 -> auto___def_106 X2). tauto. exact (rem_242 epsilon_m__def_40_p__def_105 X2).
Defined.

Remark rem_244 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X1 X2:term, auto___type_4 X1 -> auto___def_41 X2 -> (auto___type_14 X1 /\ auto___def_106 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_40_p__def_105. intros X1 X2. intros A1 A2.
  cut (auto___type_14 X1). 2:apply (rem_141 epsilon_m__def_40_p__def_105 X1 X2);  assumption.
  cut (auto___def_106 X2). 2:apply (rem_243 epsilon_m__def_40_p__def_105 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_245 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X1 X2:term, auto___type_4 X1 -> auto___def_41 X2 -> auto___def_105 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_40_p__def_105. intros X1 X2. intros A1 A2.
  case (rem_244 epsilon_m__def_40_p__def_105 X1 X2 A1 A2). clear  epsilon_m__def_40_p__def_105 A1 A2. intros. apply trans___def_105_cons_1;  tauto.
 clear  epsilon_m__def_40_p__def_105 A1 A2. tauto.
Defined.

Remark rem_246 : forall X1 X2:term, auto___def_40 (cons X1 X2) -> or_1
    (auto___type_4 X1 /\ auto___def_41 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_247 : (forall X:term, auto___def_40 X -> auto___def_105 X)
    -> forall X1 X2:term, auto___def_40 (cons X1 X2) -> auto___def_105 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_40_p__def_105. intros X1 X2. intro H. intros.
  elim (rem_246 X1 X2 H);  intros.
  apply (rem_245 epsilon_m__def_40_p__def_105 X1 X2);  tauto.
Defined.

Remark rem_248 : forall X1:term, auto___def_40 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_249 : forall X1 X2:term, auto___def_40 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_250 : auto___def_40 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_251 : auto___def_40 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_252 : auto___def_40 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_253 : forall X1 X2:term, auto___def_40 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_254 : forall X1 X2 X3:term, auto___def_40 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_255 : forall X1 X2:term, auto___def_40 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_256 : forall X1:term, auto___def_40 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_257 : forall X1 X2 X3:term, auto___def_40 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_258 : forall X1 X2 X3:term, auto___def_40 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_259 : auto___def_40 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_260 : auto___def_40 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_261 : forall X1 X2:term, auto___def_40 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_262 : auto___def_40 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_263 : auto___def_40 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_264 : auto___def_40 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_265 : forall X1 X2:term, auto___def_40 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_266 : forall X1:term, auto___def_40 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_267 : forall X1 X2:term, auto___def_40 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_268 : auto___def_40 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_269 : auto___def_40 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_270 : forall X1 X2 X3:term, auto___def_40 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_271 : auto___def_40 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_272 : forall X1 X2 X3:term, auto___def_40 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_273 : forall X2:term, auto___def_40 X2 -> auto___def_105 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_40_p__def_105 1.
  intro X. case X.
   intro H. elim (rem_271  H).
   intro H. elim (rem_268  H).
  intros X1 X2;  exact (rem_247 epsilon_m__def_40_p__def_105 X1 X2).
  intros X1 X2. intro H. elim (rem_265 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_272 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_261 X1 X2 H).
  intros X1 X2. intro H. elim (rem_255 X1 X2 H).
  intros X1 X2. intro H. elim (rem_267 X1 X2 H).
  intros X1 X2. intro H. elim (rem_253 X1 X2 H).
  intros X1. intro H. elim (rem_256 X1 H).
   intro H. elim (rem_251  H).
  intros X1 X2. intro H. elim (rem_249 X1 X2 H).
  intros X1. intro H. elim (rem_266 X1 H).
   intro H. elim (rem_250  H).
  intros X1 X2 X3. intro H. elim (rem_257 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_270 X1 X2 X3 H).
   intro H. elim (rem_260  H).
   intro H. elim (rem_264  H).
   intro H. elim (rem_263  H).
   intro H. elim (rem_259  H).
  intros X1. intro H. elim (rem_248 X1 H).
   intro H. elim (rem_269  H).
  intros X1 X2 X3. intro H. elim (rem_258 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_254 X1 X2 X3 H).
   intro H. elim (rem_262  H).
   intro H. elim (rem_252  H).
Qed.

Remark rem_274 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X2:term, auto___def_40 X2 -> auto___def_105 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_38_p__def_103. exact (rem_273).
Defined.

Remark rem_275 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X1 X2:term, auto___def_39 X1 -> auto___def_40 X2 -> auto___def_105 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_38_p__def_103. intros X1 X2.
  cut (auto___def_40 X2 -> auto___def_105 X2). tauto. exact (rem_274 epsilon_m__def_38_p__def_103 X2).
Defined.

Remark rem_276 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X1 X2:term, auto___def_39 X1 -> auto___def_40 X2 -> (auto___def_104 X1 /\ auto___def_105 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_38_p__def_103. intros X1 X2. intros A1 A2.
  cut (auto___def_104 X1). 2:apply (rem_103 epsilon_m__def_38_p__def_103 X1 X2);  assumption.
  cut (auto___def_105 X2). 2:apply (rem_275 epsilon_m__def_38_p__def_103 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_277 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X1 X2:term, auto___def_39 X1 -> auto___def_40 X2 -> auto___def_103 (key X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_38_p__def_103. intros X1 X2. intros A1 A2.
  case (rem_276 epsilon_m__def_38_p__def_103 X1 X2 A1 A2). clear  epsilon_m__def_38_p__def_103 A1 A2. intros. apply trans___def_103_key_1;  tauto.
 clear  epsilon_m__def_38_p__def_103 A1 A2. tauto.
Defined.

Remark rem_278 : forall X1 X2:term, auto___def_38 (key X1 X2) -> or_1
    (auto___def_39 X1 /\ auto___def_40 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_279 : (forall X:term, auto___def_38 X -> auto___def_103 X)
    -> forall X1 X2:term, auto___def_38 (key X1 X2) -> auto___def_103 (key X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_38_p__def_103. intros X1 X2. intro H. intros.
  elim (rem_278 X1 X2 H);  intros.
  apply (rem_277 epsilon_m__def_38_p__def_103 X1 X2);  tauto.
Defined.

Remark rem_280 : forall X1:term, auto___def_38 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_281 : auto___def_38 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_282 : auto___def_38 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_283 : auto___def_38 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_284 : forall X1 X2:term, auto___def_38 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_285 : forall X1 X2 X3:term, auto___def_38 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_286 : forall X1 X2:term, auto___def_38 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_287 : forall X1:term, auto___def_38 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_288 : forall X1 X2 X3:term, auto___def_38 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_289 : forall X1 X2 X3:term, auto___def_38 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_290 : auto___def_38 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_291 : auto___def_38 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_292 : forall X1 X2:term, auto___def_38 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_293 : auto___def_38 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_294 : auto___def_38 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_295 : auto___def_38 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_296 : forall X1 X2:term, auto___def_38 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_297 : forall X1:term, auto___def_38 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_298 : forall X1 X2:term, auto___def_38 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_299 : auto___def_38 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_300 : auto___def_38 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_301 : forall X1 X2 X3:term, auto___def_38 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_302 : forall X1 X2:term, auto___def_38 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_303 : auto___def_38 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_304 : forall X1 X2 X3:term, auto___def_38 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_305 : forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_38_p__def_103 1.
  intro X. case X.
   intro H. elim (rem_303  H).
   intro H. elim (rem_299  H).
  intros X1 X2. intro H. elim (rem_302 X1 X2 H).
  intros X1 X2. intro H. elim (rem_296 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_304 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_292 X1 X2 H).
  intros X1 X2. intro H. elim (rem_286 X1 X2 H).
  intros X1 X2. intro H. elim (rem_298 X1 X2 H).
  intros X1 X2. intro H. elim (rem_284 X1 X2 H).
  intros X1. intro H. elim (rem_287 X1 H).
   intro H. elim (rem_282  H).
  intros X1 X2;  exact (rem_279 epsilon_m__def_38_p__def_103 X1 X2).
  intros X1. intro H. elim (rem_297 X1 H).
   intro H. elim (rem_281  H).
  intros X1 X2 X3. intro H. elim (rem_288 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_301 X1 X2 X3 H).
   intro H. elim (rem_291  H).
   intro H. elim (rem_295  H).
   intro H. elim (rem_294  H).
   intro H. elim (rem_290  H).
  intros X1. intro H. elim (rem_280 X1 H).
   intro H. elim (rem_300  H).
  intros X1 X2 X3. intro H. elim (rem_289 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_285 X1 X2 X3 H).
   intro H. elim (rem_293  H).
   intro H. elim (rem_283  H).
Qed.

Remark rem_306 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. exact (rem_305).
Defined.

Remark rem_307 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_306 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_308 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_309 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_3_p__type_13. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_308 epsilon_m__type_3_p__type_13 X1).
Defined.

Remark rem_310 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_311 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_3_p__type_13. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_310 epsilon_m__type_3_p__type_13 X2).
Defined.

Remark rem_312 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_313 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_3_p__type_13. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_312 epsilon_m__type_3_p__type_13 X3).
Defined.

Remark rem_314 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_3_p__type_13. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_309 epsilon_m__type_3_p__type_13 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_311 epsilon_m__type_3_p__type_13 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_313 epsilon_m__type_3_p__type_13 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_315 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_13 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_3_p__type_13. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_314 epsilon_m__type_3_p__type_13 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_3_p__type_13 A1 A2 A3. intros. apply trans___type_13_nonces_old_1;  tauto.
 clear  epsilon_m__type_3_p__type_13 A1 A2 A3. tauto.
Defined.

Remark rem_316 : forall X1 X2 X3:term, auto___type_3 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_317 : (forall X:term, auto___type_3 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___type_3 (nonces_old X1 X2 X3) -> auto___type_13 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_3_p__type_13. intros X1 X2 X3. intro H. intros.
  elim (rem_316 X1 X2 X3 H);  intros.
  apply (rem_315 epsilon_m__type_3_p__type_13 X1 X2 X3);  tauto.
Defined.

Remark rem_318 : forall X1:term, auto___type_3 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_319 : forall X1 X2:term, auto___type_3 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_320 : auto___type_3 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_321 : auto___type_3 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_322 : auto___type_3 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_323 : forall X1 X2:term, auto___type_3 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_324 : forall X1 X2 X3:term, auto___type_3 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_325 : forall X1 X2:term, auto___type_3 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_326 : forall X1:term, auto___type_3 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_327 : forall X1 X2 X3:term, auto___type_3 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_328 : forall X1 X2 X3:term, auto___type_3 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_329 : auto___type_3 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_330 : auto___type_3 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_331 : forall X1 X2:term, auto___type_3 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_332 : auto___type_3 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_333 : auto___type_3 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_334 : auto___type_3 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_335 : forall X1 X2:term, auto___type_3 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_336 : forall X1:term, auto___type_3 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_337 : forall X1 X2:term, auto___type_3 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_338 : auto___type_3 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_339 : auto___type_3 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_340 : forall X1 X2:term, auto___type_3 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_341 : auto___type_3 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_342 : forall X1 X2 X3:term, auto___type_3 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_343 : forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Induct. *)
Proof.
  fix epsilon_m__type_3_p__type_13 1.
  intro X. case X.
   intro H. elim (rem_341  H).
   intro H. elim (rem_338  H).
  intros X1 X2. intro H. elim (rem_340 X1 X2 H).
  intros X1 X2. intro H. elim (rem_335 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_342 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_331 X1 X2 H).
  intros X1 X2. intro H. elim (rem_325 X1 X2 H).
  intros X1 X2. intro H. elim (rem_337 X1 X2 H).
  intros X1 X2. intro H. elim (rem_323 X1 X2 H).
  intros X1. intro H. elim (rem_326 X1 H).
   intro H. elim (rem_321  H).
  intros X1 X2. intro H. elim (rem_319 X1 X2 H).
  intros X1. intro H. elim (rem_336 X1 H).
   intro H. elim (rem_320  H).
  intros X1 X2 X3. intro H. elim (rem_327 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_317 epsilon_m__type_3_p__type_13 X1 X2 X3).
   intro H. elim (rem_330  H).
   intro H. elim (rem_334  H).
   intro H. elim (rem_333  H).
   intro H. elim (rem_329  H).
  intros X1. intro H. elim (rem_318 X1 H).
   intro H. elim (rem_339  H).
  intros X1 X2 X3. intro H. elim (rem_328 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_324 X1 X2 X3 H).
   intro H. elim (rem_332  H).
   intro H. elim (rem_322  H).
Qed.

Remark rem_344 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. exact (rem_343).
Defined.

Remark rem_345 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_344 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_346 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_307 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_345 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_347 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto_knows_current (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_346 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans_knows_current_f2_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_348 : forall X1 X2:term, auto___type_2 (f2 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_349 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 (f2 X1 X2) -> auto_knows_current (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_348 X1 X2 H);  intros.
  apply (rem_347 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_350 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto_knows_current success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109.  case (rem_56 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros. apply trans_knows_current_success_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_351 : auto___type_2 success -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_352 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_2 success -> auto_knows_current success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_351 H);  intros.
  apply (rem_350 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_353 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto_knows_current request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109.  case (rem_56 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros. apply trans_knows_current_request_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_354 : auto___type_2 request_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_355 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_2 request_id -> auto_knows_current request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_354 H);  intros.
  apply (rem_353 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_356 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_357 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_356 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_358 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_359 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_358 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_360 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_357 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_359 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_361 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_360 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans_knows_current_crypt_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_362 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (rem_51 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_363 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_current X2. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intro H. clear H. intro H. clear H. intro H. clear H. intros X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (Hrec X2).
Defined.

Remark rem_364 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (rem_363 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_365 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_362 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_364 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_366 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_365 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans_knows_current_crypt_2;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_367 : forall X1 X2:term, auto___type_2 (crypt X1 X2) -> or_2
    (auto___def_16 X1 /\ auto___def_17 X2)
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_2_intro_1; tauto.
  intros. apply or_2_intro_2; tauto.
Qed.

Remark rem_368 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 (crypt X1 X2) -> auto_knows_current (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_367 X1 X2 H);  intros.
  apply (rem_361 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
  apply (rem_366 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_369 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_370 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_369 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_371 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_agent X1 -> auto_knows_current (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_370 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. intros. apply trans_knows_current_nai_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_372 : forall X1:term, auto___type_2 (nai X1) -> or_1
    (auto_agent X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_373 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_2 (nai X1) -> auto_knows_current (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_372 X1 H);  intros.
  apply (rem_371 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_374 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_375 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_374 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_376 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_377 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_376 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_378 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_379 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_378 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X3).
Defined.

Remark rem_380 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_375 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_377 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_379 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_381 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_380 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2 A3. intros. apply trans_knows_current_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2 A3. tauto.
Defined.

Remark rem_382 : forall X1 X2 X3:term, auto___type_2 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_383 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___type_2 (nonces_old X1 X2 X3) -> auto_knows_current (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3. intro H. intros.
  elim (rem_382 X1 X2 X3 H);  intros.
  apply (rem_381 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  tauto.
Defined.

Remark rem_384 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_365 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_385 : forall X1 X2:term, auto___type_2 (cons X1 X2) -> or_1
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_386 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_385 X1 X2 H);  intros.
  apply (rem_384 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_387 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_388 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_387 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_389 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_390 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_389 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_391 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_392 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_391 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X3).
Defined.

Remark rem_393 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_388 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_390 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_392 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_394 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_current (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_393 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2 A3. intros. apply trans_knows_current_f1_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2 A3. tauto.
Defined.

Remark rem_395 : forall X1 X2 X3:term, auto___type_2 (f1 X1 X2 X3) -> or_1
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_396 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___type_2 (f1 X1 X2 X3) -> auto_knows_current (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2 X3. intro H. intros.
  elim (rem_395 X1 X2 X3 H);  intros.
  apply (rem_394 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3);  tauto.
Defined.

Remark rem_397 : forall X1 X2:term, auto___type_2 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_398 : auto___type_2 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_399 : auto___type_2 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_400 : forall X1 X2:term, auto___type_2 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_401 : forall X1 X2 X3:term, auto___type_2 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_402 : forall X1 X2:term, auto___type_2 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_403 : forall X1 X2 X3:term, auto___type_2 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_404 : forall X1 X2 X3:term, auto___type_2 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_405 : auto___type_2 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_406 : auto___type_2 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_407 : forall X1 X2:term, auto___type_2 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_408 : auto___type_2 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_409 : auto___type_2 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_410 : auto___type_2 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_411 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_2 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__type_2_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_410  H).
   intro H. elim (rem_408  H).
  intros X1 X2;  exact (rem_386 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2;  exact (rem_368 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2 X3;  exact (rem_396 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3).
  intros X1 X2;  exact (rem_349 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2. intro H. elim (rem_402 X1 X2 H).
  intros X1 X2. intro H. elim (rem_407 X1 X2 H).
  intros X1 X2. intro H. elim (rem_400 X1 X2 H).
  intros X1;  exact (rem_68 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
   intro H. elim (rem_398  H).
  intros X1 X2. intro H. elim (rem_397 X1 X2 H).
  intros X1;  exact (rem_373 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
  exact (rem_59 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 ).
  intros X1 X2 X3. intro H. elim (rem_403 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_383 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 X3).
   intro H. elim (rem_405  H).
   intro H. elim (rem_406  H).
  exact (rem_355 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 ).
  exact (rem_71 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 ).
  intros X1;  exact (rem_55 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
   intro H. elim (rem_409  H).
  intros X1 X2 X3. intro H. elim (rem_404 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_401 X1 X2 X3 H).
  exact (rem_352 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 ).
   intro H. elim (rem_399  H).
Defined.

Remark rem_412 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_2 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. exact (rem_411 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109).
Defined.

Remark rem_413 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___type_2 X1 -> auto_knows_current X1). tauto. exact (rem_412 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_414 : (forall X:term, auto___def_19 X -> auto___def_58 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_19_p__def_58.  tauto.
Defined.

Remark rem_415 : (forall X:term, auto___def_19 X -> auto___def_58 X)
    -> auto___def_58 sym. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_19_p__def_58.  case (rem_414 epsilon_m__def_19_p__def_58). clear  epsilon_m__def_19_p__def_58. intros. apply trans___def_58_sym_1;  tauto.
 clear  epsilon_m__def_19_p__def_58. tauto.
Defined.

Remark rem_416 : auto___def_19 sym -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_417 : (forall X:term, auto___def_19 X -> auto___def_58 X)
    -> auto___def_19 sym -> auto___def_58 sym. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_19_p__def_58. intro H. intros.
  elim (rem_416 H);  intros.
  apply (rem_415 epsilon_m__def_19_p__def_58);  tauto.
Defined.

Remark rem_418 : forall X1:term, auto___def_19 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_419 : forall X1 X2:term, auto___def_19 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_420 : auto___def_19 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_421 : auto___def_19 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_422 : forall X1 X2:term, auto___def_19 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_423 : forall X1 X2 X3:term, auto___def_19 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_424 : forall X1 X2:term, auto___def_19 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_425 : forall X1:term, auto___def_19 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_426 : forall X1 X2 X3:term, auto___def_19 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_427 : forall X1 X2 X3:term, auto___def_19 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_428 : auto___def_19 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_429 : auto___def_19 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_430 : forall X1 X2:term, auto___def_19 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_431 : auto___def_19 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_432 : auto___def_19 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_433 : auto___def_19 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_434 : forall X1 X2:term, auto___def_19 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_435 : forall X1:term, auto___def_19 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_436 : forall X1 X2:term, auto___def_19 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_437 : auto___def_19 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_438 : auto___def_19 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_439 : forall X1 X2 X3:term, auto___def_19 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_440 : forall X1 X2:term, auto___def_19 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_441 : auto___def_19 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_442 : forall X1 X2 X3:term, auto___def_19 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_443 : forall X1:term, auto___def_19 X1 -> auto___def_58 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_19_p__def_58 1.
  intro X. case X.
   intro H. elim (rem_441  H).
   intro H. elim (rem_437  H).
  intros X1 X2. intro H. elim (rem_440 X1 X2 H).
  intros X1 X2. intro H. elim (rem_434 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_442 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_430 X1 X2 H).
  intros X1 X2. intro H. elim (rem_424 X1 X2 H).
  intros X1 X2. intro H. elim (rem_436 X1 X2 H).
  intros X1 X2. intro H. elim (rem_422 X1 X2 H).
  intros X1. intro H. elim (rem_425 X1 H).
   intro H. elim (rem_421  H).
  intros X1 X2. intro H. elim (rem_419 X1 X2 H).
  intros X1. intro H. elim (rem_435 X1 H).
   intro H. elim (rem_420  H).
  intros X1 X2 X3. intro H. elim (rem_426 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_439 X1 X2 X3 H).
   intro H. elim (rem_429  H).
   intro H. elim (rem_433  H).
   intro H. elim (rem_432  H).
   intro H. elim (rem_428  H).
  intros X1. intro H. elim (rem_418 X1 H).
   intro H. elim (rem_438  H).
  intros X1 X2 X3. intro H. elim (rem_427 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_423 X1 X2 X3 H).
   intro H. elim (rem_431  H).
  exact (rem_417 epsilon_m__def_19_p__def_58 ).
Qed.

Remark rem_444 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X1:term, auto___def_19 X1 -> auto___def_58 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_18_p__def_56. exact (rem_443).
Defined.

Remark rem_445 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_19 X1 -> auto___def_20 X2 -> auto___def_58 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_18_p__def_56. intros X1 X2.
  cut (auto___def_19 X1 -> auto___def_58 X1). tauto. exact (rem_444 epsilon_m__def_18_p__def_56 X1).
Defined.

Remark rem_446 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_1_p__type_7.  tauto.
Defined.

Remark rem_447 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_7 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7.  case (rem_446 epsilon_m__type_1_p__type_7). clear  epsilon_m__type_1_p__type_7. intros. apply trans___type_7_i_1;  tauto.
 clear  epsilon_m__type_1_p__type_7. tauto.
Defined.

Remark rem_448 : auto___type_1 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_449 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_1 i -> auto___type_7 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7. intro H. intros.
  elim (rem_448 H);  intros.
  apply (rem_447 epsilon_m__type_1_p__type_7);  tauto.
Defined.

Remark rem_450 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_7 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7.  case (rem_446 epsilon_m__type_1_p__type_7). clear  epsilon_m__type_1_p__type_7. intros. apply trans___type_7_bob_1;  tauto.
 clear  epsilon_m__type_1_p__type_7. tauto.
Defined.

Remark rem_451 : auto___type_1 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_452 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_1 bob -> auto___type_7 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7. intro H. intros.
  elim (rem_451 H);  intros.
  apply (rem_450 epsilon_m__type_1_p__type_7);  tauto.
Defined.

Remark rem_453 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_7 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7.  case (rem_446 epsilon_m__type_1_p__type_7). clear  epsilon_m__type_1_p__type_7. intros. apply trans___type_7_server_1;  tauto.
 clear  epsilon_m__type_1_p__type_7. tauto.
Defined.

Remark rem_454 : auto___type_1 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_455 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_1 server -> auto___type_7 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7. intro H. intros.
  elim (rem_454 H);  intros.
  apply (rem_453 epsilon_m__type_1_p__type_7);  tauto.
Defined.

Remark rem_456 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_7 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7.  case (rem_446 epsilon_m__type_1_p__type_7). clear  epsilon_m__type_1_p__type_7. intros. apply trans___type_7_alice_1;  tauto.
 clear  epsilon_m__type_1_p__type_7. tauto.
Defined.

Remark rem_457 : auto___type_1 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_458 : (forall X:term, auto___type_1 X -> auto___type_7 X)
    -> auto___type_1 alice -> auto___type_7 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_7. intro H. intros.
  elim (rem_457 H);  intros.
  apply (rem_456 epsilon_m__type_1_p__type_7);  tauto.
Defined.

Remark rem_459 : forall X1:term, auto___type_1 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_460 : forall X1 X2:term, auto___type_1 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_461 : auto___type_1 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_462 : auto___type_1 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_463 : forall X1 X2:term, auto___type_1 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_464 : forall X1 X2 X3:term, auto___type_1 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_465 : forall X1 X2:term, auto___type_1 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_466 : forall X1:term, auto___type_1 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_467 : forall X1 X2 X3:term, auto___type_1 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_468 : forall X1 X2 X3:term, auto___type_1 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_469 : auto___type_1 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_470 : auto___type_1 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_471 : forall X1 X2:term, auto___type_1 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_472 : auto___type_1 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_473 : auto___type_1 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_474 : auto___type_1 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_475 : forall X1 X2:term, auto___type_1 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_476 : forall X1:term, auto___type_1 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_477 : forall X1 X2:term, auto___type_1 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_478 : forall X1 X2 X3:term, auto___type_1 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_479 : forall X1 X2:term, auto___type_1 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_480 : forall X1 X2 X3:term, auto___type_1 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_481 : forall X1:term, auto___type_1 X1 -> auto___type_7 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_1_p__type_7 1.
  intro X. case X.
  exact (rem_458 epsilon_m__type_1_p__type_7 ).
  exact (rem_452 epsilon_m__type_1_p__type_7 ).
  intros X1 X2. intro H. elim (rem_479 X1 X2 H).
  intros X1 X2. intro H. elim (rem_475 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_480 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_471 X1 X2 H).
  intros X1 X2. intro H. elim (rem_465 X1 X2 H).
  intros X1 X2. intro H. elim (rem_477 X1 X2 H).
  intros X1 X2. intro H. elim (rem_463 X1 X2 H).
  intros X1. intro H. elim (rem_466 X1 H).
  exact (rem_449 epsilon_m__type_1_p__type_7 ).
  intros X1 X2. intro H. elim (rem_460 X1 X2 H).
  intros X1. intro H. elim (rem_476 X1 H).
   intro H. elim (rem_461  H).
  intros X1 X2 X3. intro H. elim (rem_467 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_478 X1 X2 X3 H).
   intro H. elim (rem_470  H).
   intro H. elim (rem_474  H).
   intro H. elim (rem_473  H).
   intro H. elim (rem_469  H).
  intros X1. intro H. elim (rem_459 X1 H).
  exact (rem_455 epsilon_m__type_1_p__type_7 ).
  intros X1 X2 X3. intro H. elim (rem_468 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_464 X1 X2 X3 H).
   intro H. elim (rem_472  H).
   intro H. elim (rem_462  H).
Qed.

Remark rem_482 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X1:term, auto___type_1 X1 -> auto___type_7 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_20_p__def_59. exact (rem_481).
Defined.

Remark rem_483 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_1 X1 -> auto___def_21 X2 -> auto___type_7 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_20_p__def_59. intros X1 X2.
  cut (auto___type_1 X1 -> auto___type_7 X1). tauto. exact (rem_482 epsilon_m__def_20_p__def_59 X1).
Defined.

Remark rem_484 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_magent_p__type_8.  tauto.
Defined.

Remark rem_485 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto___type_8 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_8.  case (rem_484 epsilon_magent_p__type_8). clear  epsilon_magent_p__type_8. intros. apply trans___type_8_i_1;  tauto.
 clear  epsilon_magent_p__type_8. tauto.
Defined.

Remark rem_486 : auto_agent i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_487 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto_agent i -> auto___type_8 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_8. intro H. intros.
  elim (rem_486 H);  intros.
  apply (rem_485 epsilon_magent_p__type_8);  tauto.
Defined.

Remark rem_488 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto___type_8 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_8.  case (rem_484 epsilon_magent_p__type_8). clear  epsilon_magent_p__type_8. intros. apply trans___type_8_bob_1;  tauto.
 clear  epsilon_magent_p__type_8. tauto.
Defined.

Remark rem_489 : auto_agent bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_490 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto_agent bob -> auto___type_8 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_8. intro H. intros.
  elim (rem_489 H);  intros.
  apply (rem_488 epsilon_magent_p__type_8);  tauto.
Defined.

Remark rem_491 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto___type_8 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_8.  case (rem_484 epsilon_magent_p__type_8). clear  epsilon_magent_p__type_8. intros. apply trans___type_8_server_1;  tauto.
 clear  epsilon_magent_p__type_8. tauto.
Defined.

Remark rem_492 : auto_agent server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_493 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto_agent server -> auto___type_8 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_8. intro H. intros.
  elim (rem_492 H);  intros.
  apply (rem_491 epsilon_magent_p__type_8);  tauto.
Defined.

Remark rem_494 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto___type_8 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_8.  case (rem_484 epsilon_magent_p__type_8). clear  epsilon_magent_p__type_8. intros. apply trans___type_8_alice_1;  tauto.
 clear  epsilon_magent_p__type_8. tauto.
Defined.

Remark rem_495 : auto_agent alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_496 : (forall X:term, auto_agent X -> auto___type_8 X)
    -> auto_agent alice -> auto___type_8 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_8. intro H. intros.
  elim (rem_495 H);  intros.
  apply (rem_494 epsilon_magent_p__type_8);  tauto.
Defined.

Remark rem_497 : forall X1:term, auto_agent (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_498 : forall X1 X2:term, auto_agent (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_499 : auto_agent nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_500 : auto_agent sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_501 : forall X1 X2:term, auto_agent (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_502 : forall X1 X2 X3:term, auto_agent (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_503 : forall X1 X2:term, auto_agent (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_504 : forall X1:term, auto_agent (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_505 : forall X1 X2 X3:term, auto_agent (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_506 : forall X1 X2 X3:term, auto_agent (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_507 : auto_agent respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_508 : auto_agent prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_509 : forall X1 X2:term, auto_agent (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_510 : auto_agent success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_511 : auto_agent request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_512 : auto_agent pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_513 : forall X1 X2:term, auto_agent (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_514 : forall X1:term, auto_agent (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_515 : forall X1 X2:term, auto_agent (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_516 : forall X1 X2 X3:term, auto_agent (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_517 : forall X1 X2:term, auto_agent (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_518 : forall X1 X2 X3:term, auto_agent (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_519 : forall X1:term, auto_agent X1 -> auto___type_8 X1. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_8 1.
  intro X. case X.
  exact (rem_496 epsilon_magent_p__type_8 ).
  exact (rem_490 epsilon_magent_p__type_8 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_487 epsilon_magent_p__type_8 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_493 epsilon_magent_p__type_8 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_520 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X1:term, auto_agent X1 -> auto___type_8 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_21_p__def_60. exact (rem_519).
Defined.

Remark rem_521 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X1 X2:term, auto_agent X1 -> auto___def_22 X2 -> auto___type_8 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_21_p__def_60. intros X1 X2.
  cut (auto_agent X1 -> auto___type_8 X1). tauto. exact (rem_520 epsilon_m__def_21_p__def_60 X1).
Defined.

Remark rem_522 : (forall X:term, auto___def_22 X -> auto___def_61 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_22_p__def_61.  tauto.
Defined.

Remark rem_523 : (forall X:term, auto___def_22 X -> auto___def_61 X)
    -> auto___def_61 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_22_p__def_61.  case (rem_522 epsilon_m__def_22_p__def_61). clear  epsilon_m__def_22_p__def_61. intros. apply trans___def_61_nil_1;  tauto.
 clear  epsilon_m__def_22_p__def_61. tauto.
Defined.

Remark rem_524 : auto___def_22 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_525 : (forall X:term, auto___def_22 X -> auto___def_61 X)
    -> auto___def_22 nil -> auto___def_61 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_22_p__def_61. intro H. intros.
  elim (rem_524 H);  intros.
  apply (rem_523 epsilon_m__def_22_p__def_61);  tauto.
Defined.

Remark rem_526 : forall X1:term, auto___def_22 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_527 : forall X1 X2:term, auto___def_22 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_528 : auto___def_22 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_529 : auto___def_22 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_530 : forall X1 X2:term, auto___def_22 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_531 : forall X1 X2 X3:term, auto___def_22 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_532 : forall X1 X2:term, auto___def_22 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_533 : forall X1:term, auto___def_22 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_534 : forall X1 X2 X3:term, auto___def_22 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_535 : forall X1 X2 X3:term, auto___def_22 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_536 : auto___def_22 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_537 : auto___def_22 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_538 : forall X1 X2:term, auto___def_22 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_539 : auto___def_22 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_540 : auto___def_22 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_541 : auto___def_22 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_542 : forall X1 X2:term, auto___def_22 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_543 : forall X1:term, auto___def_22 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_544 : forall X1 X2:term, auto___def_22 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_545 : auto___def_22 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_546 : auto___def_22 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_547 : forall X1 X2 X3:term, auto___def_22 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_548 : forall X1 X2:term, auto___def_22 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_549 : auto___def_22 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_550 : forall X1 X2 X3:term, auto___def_22 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_551 : forall X2:term, auto___def_22 X2 -> auto___def_61 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_22_p__def_61 1.
  intro X. case X.
   intro H. elim (rem_549  H).
   intro H. elim (rem_545  H).
  intros X1 X2. intro H. elim (rem_548 X1 X2 H).
  intros X1 X2. intro H. elim (rem_542 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_550 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_538 X1 X2 H).
  intros X1 X2. intro H. elim (rem_532 X1 X2 H).
  intros X1 X2. intro H. elim (rem_544 X1 X2 H).
  intros X1 X2. intro H. elim (rem_530 X1 X2 H).
  intros X1. intro H. elim (rem_533 X1 H).
   intro H. elim (rem_528  H).
  intros X1 X2. intro H. elim (rem_527 X1 X2 H).
  intros X1. intro H. elim (rem_543 X1 H).
  exact (rem_525 epsilon_m__def_22_p__def_61 ).
  intros X1 X2 X3. intro H. elim (rem_534 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_547 X1 X2 X3 H).
   intro H. elim (rem_537  H).
   intro H. elim (rem_541  H).
   intro H. elim (rem_540  H).
   intro H. elim (rem_536  H).
  intros X1. intro H. elim (rem_526 X1 H).
   intro H. elim (rem_546  H).
  intros X1 X2 X3. intro H. elim (rem_535 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_531 X1 X2 X3 H).
   intro H. elim (rem_539  H).
   intro H. elim (rem_529  H).
Qed.

Remark rem_552 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X2:term, auto___def_22 X2 -> auto___def_61 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_21_p__def_60. exact (rem_551).
Defined.

Remark rem_553 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X1 X2:term, auto_agent X1 -> auto___def_22 X2 -> auto___def_61 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_21_p__def_60. intros X1 X2.
  cut (auto___def_22 X2 -> auto___def_61 X2). tauto. exact (rem_552 epsilon_m__def_21_p__def_60 X2).
Defined.

Remark rem_554 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X1 X2:term, auto_agent X1 -> auto___def_22 X2 -> (auto___type_8 X1 /\ auto___def_61 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_21_p__def_60. intros X1 X2. intros A1 A2.
  cut (auto___type_8 X1). 2:apply (rem_521 epsilon_m__def_21_p__def_60 X1 X2);  assumption.
  cut (auto___def_61 X2). 2:apply (rem_553 epsilon_m__def_21_p__def_60 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_555 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X1 X2:term, auto_agent X1 -> auto___def_22 X2 -> auto___def_60 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_21_p__def_60. intros X1 X2. intros A1 A2.
  case (rem_554 epsilon_m__def_21_p__def_60 X1 X2 A1 A2). clear  epsilon_m__def_21_p__def_60 A1 A2. intros. apply trans___def_60_cons_1;  tauto.
 clear  epsilon_m__def_21_p__def_60 A1 A2. tauto.
Defined.

Remark rem_556 : forall X1 X2:term, auto___def_21 (cons X1 X2) -> or_1
    (auto_agent X1 /\ auto___def_22 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_557 : (forall X:term, auto___def_21 X -> auto___def_60 X)
    -> forall X1 X2:term, auto___def_21 (cons X1 X2) -> auto___def_60 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_21_p__def_60. intros X1 X2. intro H. intros.
  elim (rem_556 X1 X2 H);  intros.
  apply (rem_555 epsilon_m__def_21_p__def_60 X1 X2);  tauto.
Defined.

Remark rem_558 : forall X1:term, auto___def_21 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_559 : forall X1 X2:term, auto___def_21 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_560 : auto___def_21 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_561 : auto___def_21 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_562 : auto___def_21 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_563 : forall X1 X2:term, auto___def_21 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_564 : forall X1 X2 X3:term, auto___def_21 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_565 : forall X1 X2:term, auto___def_21 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_566 : forall X1:term, auto___def_21 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_567 : forall X1 X2 X3:term, auto___def_21 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_568 : forall X1 X2 X3:term, auto___def_21 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_569 : auto___def_21 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_570 : auto___def_21 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_571 : forall X1 X2:term, auto___def_21 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_572 : auto___def_21 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_573 : auto___def_21 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_574 : auto___def_21 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_575 : forall X1 X2:term, auto___def_21 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_576 : forall X1:term, auto___def_21 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_577 : forall X1 X2:term, auto___def_21 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_578 : auto___def_21 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_579 : auto___def_21 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_580 : forall X1 X2 X3:term, auto___def_21 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_581 : auto___def_21 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_582 : forall X1 X2 X3:term, auto___def_21 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_583 : forall X2:term, auto___def_21 X2 -> auto___def_60 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_21_p__def_60 1.
  intro X. case X.
   intro H. elim (rem_581  H).
   intro H. elim (rem_578  H).
  intros X1 X2;  exact (rem_557 epsilon_m__def_21_p__def_60 X1 X2).
  intros X1 X2. intro H. elim (rem_575 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_582 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_571 X1 X2 H).
  intros X1 X2. intro H. elim (rem_565 X1 X2 H).
  intros X1 X2. intro H. elim (rem_577 X1 X2 H).
  intros X1 X2. intro H. elim (rem_563 X1 X2 H).
  intros X1. intro H. elim (rem_566 X1 H).
   intro H. elim (rem_561  H).
  intros X1 X2. intro H. elim (rem_559 X1 X2 H).
  intros X1. intro H. elim (rem_576 X1 H).
   intro H. elim (rem_560  H).
  intros X1 X2 X3. intro H. elim (rem_567 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_580 X1 X2 X3 H).
   intro H. elim (rem_570  H).
   intro H. elim (rem_574  H).
   intro H. elim (rem_573  H).
   intro H. elim (rem_569  H).
  intros X1. intro H. elim (rem_558 X1 H).
   intro H. elim (rem_579  H).
  intros X1 X2 X3. intro H. elim (rem_568 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_564 X1 X2 X3 H).
   intro H. elim (rem_572  H).
   intro H. elim (rem_562  H).
Qed.

Remark rem_584 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X2:term, auto___def_21 X2 -> auto___def_60 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_20_p__def_59. exact (rem_583).
Defined.

Remark rem_585 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_1 X1 -> auto___def_21 X2 -> auto___def_60 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_20_p__def_59. intros X1 X2.
  cut (auto___def_21 X2 -> auto___def_60 X2). tauto. exact (rem_584 epsilon_m__def_20_p__def_59 X2).
Defined.

Remark rem_586 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_1 X1 -> auto___def_21 X2 -> (auto___type_7 X1 /\ auto___def_60 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_20_p__def_59. intros X1 X2. intros A1 A2.
  cut (auto___type_7 X1). 2:apply (rem_483 epsilon_m__def_20_p__def_59 X1 X2);  assumption.
  cut (auto___def_60 X2). 2:apply (rem_585 epsilon_m__def_20_p__def_59 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_587 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_1 X1 -> auto___def_21 X2 -> auto___def_59 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_20_p__def_59. intros X1 X2. intros A1 A2.
  case (rem_586 epsilon_m__def_20_p__def_59 X1 X2 A1 A2). clear  epsilon_m__def_20_p__def_59 A1 A2. intros. apply trans___def_59_cons_1;  tauto.
 clear  epsilon_m__def_20_p__def_59 A1 A2. tauto.
Defined.

Remark rem_588 : forall X1 X2:term, auto___def_20 (cons X1 X2) -> or_1
    (auto___type_1 X1 /\ auto___def_21 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_589 : (forall X:term, auto___def_20 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___def_20 (cons X1 X2) -> auto___def_59 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_20_p__def_59. intros X1 X2. intro H. intros.
  elim (rem_588 X1 X2 H);  intros.
  apply (rem_587 epsilon_m__def_20_p__def_59 X1 X2);  tauto.
Defined.

Remark rem_590 : forall X1:term, auto___def_20 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_591 : forall X1 X2:term, auto___def_20 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_592 : auto___def_20 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_593 : auto___def_20 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_594 : auto___def_20 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_595 : forall X1 X2:term, auto___def_20 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_596 : forall X1 X2 X3:term, auto___def_20 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_597 : forall X1 X2:term, auto___def_20 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_598 : forall X1:term, auto___def_20 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_599 : forall X1 X2 X3:term, auto___def_20 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_600 : forall X1 X2 X3:term, auto___def_20 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_601 : auto___def_20 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_602 : auto___def_20 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_603 : forall X1 X2:term, auto___def_20 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_604 : auto___def_20 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_605 : auto___def_20 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_606 : auto___def_20 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_607 : forall X1 X2:term, auto___def_20 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_608 : forall X1:term, auto___def_20 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_609 : forall X1 X2:term, auto___def_20 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_610 : auto___def_20 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_611 : auto___def_20 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_612 : forall X1 X2 X3:term, auto___def_20 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_613 : auto___def_20 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_614 : forall X1 X2 X3:term, auto___def_20 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_615 : forall X2:term, auto___def_20 X2 -> auto___def_59 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_20_p__def_59 1.
  intro X. case X.
   intro H. elim (rem_613  H).
   intro H. elim (rem_610  H).
  intros X1 X2;  exact (rem_589 epsilon_m__def_20_p__def_59 X1 X2).
  intros X1 X2. intro H. elim (rem_607 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_614 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_603 X1 X2 H).
  intros X1 X2. intro H. elim (rem_597 X1 X2 H).
  intros X1 X2. intro H. elim (rem_609 X1 X2 H).
  intros X1 X2. intro H. elim (rem_595 X1 X2 H).
  intros X1. intro H. elim (rem_598 X1 H).
   intro H. elim (rem_593  H).
  intros X1 X2. intro H. elim (rem_591 X1 X2 H).
  intros X1. intro H. elim (rem_608 X1 H).
   intro H. elim (rem_592  H).
  intros X1 X2 X3. intro H. elim (rem_599 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_612 X1 X2 X3 H).
   intro H. elim (rem_602  H).
   intro H. elim (rem_606  H).
   intro H. elim (rem_605  H).
   intro H. elim (rem_601  H).
  intros X1. intro H. elim (rem_590 X1 H).
   intro H. elim (rem_611  H).
  intros X1 X2 X3. intro H. elim (rem_600 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_596 X1 X2 X3 H).
   intro H. elim (rem_604  H).
   intro H. elim (rem_594  H).
Qed.

Remark rem_616 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X2:term, auto___def_20 X2 -> auto___def_59 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_18_p__def_56. exact (rem_615).
Defined.

Remark rem_617 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_19 X1 -> auto___def_20 X2 -> auto___def_59 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_18_p__def_56. intros X1 X2.
  cut (auto___def_20 X2 -> auto___def_59 X2). tauto. exact (rem_616 epsilon_m__def_18_p__def_56 X2).
Defined.

Remark rem_618 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_19 X1 -> auto___def_20 X2 -> (auto___def_58 X1 /\ auto___def_59 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_18_p__def_56. intros X1 X2. intros A1 A2.
  cut (auto___def_58 X1). 2:apply (rem_445 epsilon_m__def_18_p__def_56 X1 X2);  assumption.
  cut (auto___def_59 X2). 2:apply (rem_617 epsilon_m__def_18_p__def_56 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_619 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_19 X1 -> auto___def_20 X2 -> auto___def_56 (key X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_18_p__def_56. intros X1 X2. intros A1 A2.
  case (rem_618 epsilon_m__def_18_p__def_56 X1 X2 A1 A2). clear  epsilon_m__def_18_p__def_56 A1 A2. intros. apply trans___def_56_key_1;  tauto.
 clear  epsilon_m__def_18_p__def_56 A1 A2. tauto.
Defined.

Remark rem_620 : forall X1 X2:term, auto___def_18 (key X1 X2) -> or_1
    (auto___def_19 X1 /\ auto___def_20 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_621 : (forall X:term, auto___def_18 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_18 (key X1 X2) -> auto___def_56 (key X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_18_p__def_56. intros X1 X2. intro H. intros.
  elim (rem_620 X1 X2 H);  intros.
  apply (rem_619 epsilon_m__def_18_p__def_56 X1 X2);  tauto.
Defined.

Remark rem_622 : forall X1:term, auto___def_18 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_623 : auto___def_18 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_624 : auto___def_18 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_625 : auto___def_18 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_626 : forall X1 X2:term, auto___def_18 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_627 : forall X1 X2 X3:term, auto___def_18 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_628 : forall X1 X2:term, auto___def_18 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_629 : forall X1:term, auto___def_18 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_630 : forall X1 X2 X3:term, auto___def_18 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_631 : forall X1 X2 X3:term, auto___def_18 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_632 : auto___def_18 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_633 : auto___def_18 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_634 : forall X1 X2:term, auto___def_18 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_635 : auto___def_18 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_636 : auto___def_18 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_637 : auto___def_18 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_638 : forall X1 X2:term, auto___def_18 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_639 : forall X1:term, auto___def_18 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_640 : forall X1 X2:term, auto___def_18 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_641 : auto___def_18 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_642 : auto___def_18 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_643 : forall X1 X2 X3:term, auto___def_18 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_644 : forall X1 X2:term, auto___def_18 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_645 : auto___def_18 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_646 : forall X1 X2 X3:term, auto___def_18 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_647 : forall X1:term, auto___def_18 X1 -> auto___def_56 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_18_p__def_56 1.
  intro X. case X.
   intro H. elim (rem_645  H).
   intro H. elim (rem_641  H).
  intros X1 X2. intro H. elim (rem_644 X1 X2 H).
  intros X1 X2. intro H. elim (rem_638 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_646 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_634 X1 X2 H).
  intros X1 X2. intro H. elim (rem_628 X1 X2 H).
  intros X1 X2. intro H. elim (rem_640 X1 X2 H).
  intros X1 X2. intro H. elim (rem_626 X1 X2 H).
  intros X1. intro H. elim (rem_629 X1 H).
   intro H. elim (rem_624  H).
  intros X1 X2;  exact (rem_621 epsilon_m__def_18_p__def_56 X1 X2).
  intros X1. intro H. elim (rem_639 X1 H).
   intro H. elim (rem_623  H).
  intros X1 X2 X3. intro H. elim (rem_630 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_643 X1 X2 X3 H).
   intro H. elim (rem_633  H).
   intro H. elim (rem_637  H).
   intro H. elim (rem_636  H).
   intro H. elim (rem_632  H).
  intros X1. intro H. elim (rem_622 X1 H).
   intro H. elim (rem_642  H).
  intros X1 X2 X3. intro H. elim (rem_631 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_627 X1 X2 X3 H).
   intro H. elim (rem_635  H).
   intro H. elim (rem_625  H).
Qed.

Remark rem_648 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_56 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_31_pknows_current. exact (rem_647).
Defined.

Remark rem_649 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_31_pknows_current. intros X1 X2.
  cut (auto___def_18 X1 -> auto___def_56 X1). tauto. exact (rem_648 epsilon_m__def_31_pknows_current X1).
Defined.

Remark rem_650 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_651 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_650 epsilon_m__def_9_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_652 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_6 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  case (rem_651 epsilon_m__def_9_p__type_6 X1 A1). clear  epsilon_m__def_9_p__type_6 A1. intros. apply trans___type_6_s_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1. tauto.
Defined.

Remark rem_653 : forall X1:term, auto___def_9 (s X1) -> or_1
    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_654 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_9 (s X1) -> auto___type_6 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intro H. intros.
  elim (rem_653 X1 H);  intros.
  apply (rem_652 epsilon_m__def_9_p__type_6 X1);  tauto.
Defined.

Remark rem_655 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6.  tauto.
Defined.

Remark rem_656 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___type_6 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6.  case (rem_655 epsilon_m__def_9_p__type_6). clear  epsilon_m__def_9_p__type_6. intros. apply trans___type_6_nil_1;  tauto.
 clear  epsilon_m__def_9_p__type_6. tauto.
Defined.

Remark rem_657 : auto___def_9 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_658 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___def_9 nil -> auto___type_6 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intro H. intros.
  elim (rem_657 H);  intros.
  apply (rem_656 epsilon_m__def_9_p__type_6);  tauto.
Defined.

Remark rem_659 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_660 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  cut (auto___def_44 X1). 2:apply (rem_659 epsilon_m__def_9_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_661 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  case (rem_660 epsilon_m__def_9_p__type_6 X1 A1). clear  epsilon_m__def_9_p__type_6 A1. intros. apply trans___type_6_h_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1. tauto.
Defined.

Remark rem_662 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_663 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  cut (auto___def_26 X1). 2:apply (rem_662 epsilon_m__def_9_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_664 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  case (rem_663 epsilon_m__def_9_p__type_6 X1 A1). clear  epsilon_m__def_9_p__type_6 A1. intros. apply trans___type_6_h_2;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1. tauto.
Defined.

Remark rem_665 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  case (rem_651 epsilon_m__def_9_p__type_6 X1 A1). clear  epsilon_m__def_9_p__type_6 A1. intros. apply trans___type_6_h_3;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1. tauto.
Defined.

Remark rem_666 : forall X1:term, auto___def_9 (h X1) -> or_3
    (auto___def_44 X1)    (auto___def_26 X1)    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_667 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_9 (h X1) -> auto___type_6 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intro H. intros.
  elim (rem_666 X1 H);  intros.
  apply (rem_661 epsilon_m__def_9_p__type_6 X1);  tauto.
  apply (rem_664 epsilon_m__def_9_p__type_6 X1);  tauto.
  apply (rem_665 epsilon_m__def_9_p__type_6 X1);  tauto.
Defined.

Remark rem_668 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___type_6 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6.  case (rem_655 epsilon_m__def_9_p__type_6). clear  epsilon_m__def_9_p__type_6. intros. apply trans___type_6_respond_id_1;  tauto.
 clear  epsilon_m__def_9_p__type_6. tauto.
Defined.

Remark rem_669 : auto___def_9 respond_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_670 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___def_9 respond_id -> auto___type_6 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intro H. intros.
  elim (rem_669 H);  intros.
  apply (rem_668 epsilon_m__def_9_p__type_6);  tauto.
Defined.

Remark rem_671 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_38 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_672 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_38 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_38 X1). tauto. exact (rem_671 epsilon_m__def_9_p__type_6 X1).
Defined.

Remark rem_673 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_3 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_674 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_3 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_3 X2). tauto. exact (rem_673 epsilon_m__def_9_p__type_6 X2).
Defined.

Remark rem_675 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_38 X1 /\ auto___type_3 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto___def_38 X1). 2:apply (rem_672 epsilon_m__def_9_p__type_6 X1 X2);  assumption.
  cut (auto___type_3 X2). 2:apply (rem_674 epsilon_m__def_9_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_676 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_6 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_675 epsilon_m__def_9_p__type_6 X1 X2 A1 A2). clear  epsilon_m__def_9_p__type_6 A1 A2. intros. apply trans___type_6_f2_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1 A2. tauto.
Defined.

Remark rem_677 : forall X1 X2:term, auto___def_9 (f2 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_678 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_9 (f2 X1 X2) -> auto___type_6 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_677 X1 X2 H);  intros.
  apply (rem_676 epsilon_m__def_9_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_679 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___type_6 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6.  case (rem_655 epsilon_m__def_9_p__type_6). clear  epsilon_m__def_9_p__type_6. intros. apply trans___type_6_success_1;  tauto.
 clear  epsilon_m__def_9_p__type_6. tauto.
Defined.

Remark rem_680 : auto___def_9 success -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_681 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___def_9 success -> auto___type_6 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intro H. intros.
  elim (rem_680 H);  intros.
  apply (rem_679 epsilon_m__def_9_p__type_6);  tauto.
Defined.

Remark rem_682 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___type_6 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6.  case (rem_655 epsilon_m__def_9_p__type_6). clear  epsilon_m__def_9_p__type_6. intros. apply trans___type_6_request_id_1;  tauto.
 clear  epsilon_m__def_9_p__type_6. tauto.
Defined.

Remark rem_683 : auto___def_9 request_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_684 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> auto___def_9 request_id -> auto___type_6 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intro H. intros.
  elim (rem_683 H);  intros.
  apply (rem_682 epsilon_m__def_9_p__type_6);  tauto.
Defined.

Remark rem_685 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_686 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_685 epsilon_m__def_9_p__type_6 X1).
Defined.

Remark rem_687 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_688 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_687 epsilon_m__def_9_p__type_6 X2).
Defined.

Remark rem_689 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_686 epsilon_m__def_9_p__type_6 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_688 epsilon_m__def_9_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_690 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_6 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_689 epsilon_m__def_9_p__type_6 X1 X2 A1 A2). clear  epsilon_m__def_9_p__type_6 A1 A2. intros. apply trans___type_6_crypt_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1 A2. tauto.
Defined.

Remark rem_691 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_650 epsilon_m__def_9_p__type_6 X1).
Defined.

Remark rem_692 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_693 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_692 epsilon_m__def_9_p__type_6 X2).
Defined.

Remark rem_694 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_691 epsilon_m__def_9_p__type_6 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_693 epsilon_m__def_9_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_695 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_694 epsilon_m__def_9_p__type_6 X1 X2 A1 A2). clear  epsilon_m__def_9_p__type_6 A1 A2. intros. apply trans___type_6_crypt_2;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1 A2. tauto.
Defined.

Remark rem_696 : forall X1 X2:term, auto___def_9 (crypt X1 X2) -> or_2
    (auto___def_16 X1 /\ auto___def_17 X2)
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_2_intro_1; tauto.
  intros. apply or_2_intro_2; tauto.
Qed.

Remark rem_697 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_9 (crypt X1 X2) -> auto___type_6 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_696 X1 X2 H);  intros.
  apply (rem_690 epsilon_m__def_9_p__type_6 X1 X2);  tauto.
  apply (rem_695 epsilon_m__def_9_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_698 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_699 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_698 epsilon_m__def_9_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_700 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto___type_6 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intros A1.
  case (rem_699 epsilon_m__def_9_p__type_6 X1 A1). clear  epsilon_m__def_9_p__type_6 A1. intros. apply trans___type_6_nai_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1. tauto.
Defined.

Remark rem_701 : forall X1:term, auto___def_9 (nai X1) -> or_1
    (auto_agent X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_702 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_9 (nai X1) -> auto___type_6 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1. intro H. intros.
  elim (rem_701 X1 H);  intros.
  apply (rem_700 epsilon_m__def_9_p__type_6 X1);  tauto.
Defined.

Remark rem_703 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_704 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_703 epsilon_m__def_9_p__type_6 X1).
Defined.

Remark rem_705 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_706 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_705 epsilon_m__def_9_p__type_6 X2).
Defined.

Remark rem_707 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_708 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_707 epsilon_m__def_9_p__type_6 X3).
Defined.

Remark rem_709 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_704 epsilon_m__def_9_p__type_6 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_706 epsilon_m__def_9_p__type_6 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_708 epsilon_m__def_9_p__type_6 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_710 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_6 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_709 epsilon_m__def_9_p__type_6 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_9_p__type_6 A1 A2 A3. intros. apply trans___type_6_nonces_old_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1 A2 A3. tauto.
Defined.

Remark rem_711 : forall X1 X2 X3:term, auto___def_9 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_712 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 (nonces_old X1 X2 X3) -> auto___type_6 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3. intro H. intros.
  elim (rem_711 X1 X2 X3 H);  intros.
  apply (rem_710 epsilon_m__def_9_p__type_6 X1 X2 X3);  tauto.
Defined.

Remark rem_713 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_694 epsilon_m__def_9_p__type_6 X1 X2 A1 A2). clear  epsilon_m__def_9_p__type_6 A1 A2. intros. apply trans___type_6_cons_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1 A2. tauto.
Defined.

Remark rem_714 : forall X1 X2:term, auto___def_9 (cons X1 X2) -> or_1
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_715 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_9 (cons X1 X2) -> auto___type_6 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_714 X1 X2 H);  intros.
  apply (rem_713 epsilon_m__def_9_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_716 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_717 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_716 epsilon_m__def_9_p__type_6 X1).
Defined.

Remark rem_718 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_719 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_718 epsilon_m__def_9_p__type_6 X2).
Defined.

Remark rem_720 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_721 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_720 epsilon_m__def_9_p__type_6 X3).
Defined.

Remark rem_722 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_717 epsilon_m__def_9_p__type_6 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_719 epsilon_m__def_9_p__type_6 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_721 epsilon_m__def_9_p__type_6 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_723 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_6 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_722 epsilon_m__def_9_p__type_6 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_9_p__type_6 A1 A2 A3. intros. apply trans___type_6_f1_1;  tauto.
 clear  epsilon_m__def_9_p__type_6 A1 A2 A3. tauto.
Defined.

Remark rem_724 : forall X1 X2 X3:term, auto___def_9 (f1 X1 X2 X3) -> or_1
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_725 : (forall X:term, auto___def_9 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 (f1 X1 X2 X3) -> auto___type_6 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_p__type_6. intros X1 X2 X3. intro H. intros.
  elim (rem_724 X1 X2 X3 H);  intros.
  apply (rem_723 epsilon_m__def_9_p__type_6 X1 X2 X3);  tauto.
Defined.

Remark rem_726 : forall X1 X2:term, auto___def_9 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_727 : auto___def_9 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_728 : auto___def_9 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_729 : forall X1 X2:term, auto___def_9 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_730 : forall X1 X2 X3:term, auto___def_9 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_731 : forall X1 X2:term, auto___def_9 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_732 : forall X1 X2 X3:term, auto___def_9 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_733 : forall X1 X2 X3:term, auto___def_9 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_734 : auto___def_9 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_735 : auto___def_9 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_736 : forall X1 X2:term, auto___def_9 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_737 : auto___def_9 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_738 : auto___def_9 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_739 : auto___def_9 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_740 : forall X1:term, auto___def_9 X1 -> auto___type_6 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_9_p__type_6 1.
  intro X. case X.
   intro H. elim (rem_739  H).
   intro H. elim (rem_737  H).
  intros X1 X2;  exact (rem_715 epsilon_m__def_9_p__type_6 X1 X2).
  intros X1 X2;  exact (rem_697 epsilon_m__def_9_p__type_6 X1 X2).
  intros X1 X2 X3;  exact (rem_725 epsilon_m__def_9_p__type_6 X1 X2 X3).
  intros X1 X2;  exact (rem_678 epsilon_m__def_9_p__type_6 X1 X2).
  intros X1 X2. intro H. elim (rem_731 X1 X2 H).
  intros X1 X2. intro H. elim (rem_736 X1 X2 H).
  intros X1 X2. intro H. elim (rem_729 X1 X2 H).
  intros X1;  exact (rem_667 epsilon_m__def_9_p__type_6 X1).
   intro H. elim (rem_727  H).
  intros X1 X2. intro H. elim (rem_726 X1 X2 H).
  intros X1;  exact (rem_702 epsilon_m__def_9_p__type_6 X1).
  exact (rem_658 epsilon_m__def_9_p__type_6 ).
  intros X1 X2 X3. intro H. elim (rem_732 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_712 epsilon_m__def_9_p__type_6 X1 X2 X3).
   intro H. elim (rem_734  H).
   intro H. elim (rem_735  H).
  exact (rem_684 epsilon_m__def_9_p__type_6 ).
  exact (rem_670 epsilon_m__def_9_p__type_6 ).
  intros X1;  exact (rem_654 epsilon_m__def_9_p__type_6 X1).
   intro H. elim (rem_738  H).
  intros X1 X2 X3. intro H. elim (rem_733 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_730 X1 X2 X3 H).
  exact (rem_681 epsilon_m__def_9_p__type_6 ).
   intro H. elim (rem_728  H).
Qed.

Remark rem_741 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1:term, auto___def_9 X1 -> auto___type_6 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_10_p__def_57. exact (rem_740).
Defined.

Remark rem_742 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_6 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___type_6 X1). tauto. exact (rem_741 epsilon_m__def_10_p__def_57 X1).
Defined.

Remark rem_743 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_744 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_743 epsilon_m__def_9_pknows_old X1);  assumption.
  tauto.
Defined.

Remark rem_745 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  case (rem_744 epsilon_m__def_9_pknows_old X1 A1). clear  epsilon_m__def_9_pknows_old A1. intros. apply trans_knows_old_s_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1. tauto.
Defined.

Remark rem_746 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_9 (s X1) -> auto_knows_old (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intro H. intros.
  elim (rem_653 X1 H);  intros.
  apply (rem_745 epsilon_m__def_9_pknows_old X1);  tauto.
Defined.

Remark rem_747 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old.  tauto.
Defined.

Remark rem_748 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto_knows_old nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old.  case (rem_747 epsilon_m__def_9_pknows_old). clear  epsilon_m__def_9_pknows_old. intros. apply trans_knows_old_nil_1;  tauto.
 clear  epsilon_m__def_9_pknows_old. tauto.
Defined.

Remark rem_749 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto___def_9 nil -> auto_knows_old nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intro H. intros.
  elim (rem_657 H);  intros.
  apply (rem_748 epsilon_m__def_9_pknows_old);  tauto.
Defined.

Remark rem_750 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_751 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  cut (auto___def_44 X1). 2:apply (rem_750 epsilon_m__def_9_pknows_old X1);  assumption.
  tauto.
Defined.

Remark rem_752 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_44 X1 -> auto_knows_old (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  case (rem_751 epsilon_m__def_9_pknows_old X1 A1). clear  epsilon_m__def_9_pknows_old A1. intros. apply trans_knows_old_h_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1. tauto.
Defined.

Remark rem_753 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_754 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  cut (auto___def_26 X1). 2:apply (rem_753 epsilon_m__def_9_pknows_old X1);  assumption.
  tauto.
Defined.

Remark rem_755 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_old (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  case (rem_754 epsilon_m__def_9_pknows_old X1 A1). clear  epsilon_m__def_9_pknows_old A1. intros. apply trans_knows_old_h_2;  tauto.
 clear  epsilon_m__def_9_pknows_old A1. tauto.
Defined.

Remark rem_756 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  case (rem_744 epsilon_m__def_9_pknows_old X1 A1). clear  epsilon_m__def_9_pknows_old A1. intros. apply trans_knows_old_h_3;  tauto.
 clear  epsilon_m__def_9_pknows_old A1. tauto.
Defined.

Remark rem_757 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_9 (h X1) -> auto_knows_old (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intro H. intros.
  elim (rem_666 X1 H);  intros.
  apply (rem_752 epsilon_m__def_9_pknows_old X1);  tauto.
  apply (rem_755 epsilon_m__def_9_pknows_old X1);  tauto.
  apply (rem_756 epsilon_m__def_9_pknows_old X1);  tauto.
Defined.

Remark rem_758 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto_knows_old respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old.  case (rem_747 epsilon_m__def_9_pknows_old). clear  epsilon_m__def_9_pknows_old. intros. apply trans_knows_old_respond_id_1;  tauto.
 clear  epsilon_m__def_9_pknows_old. tauto.
Defined.

Remark rem_759 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto___def_9 respond_id -> auto_knows_old respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intro H. intros.
  elim (rem_669 H);  intros.
  apply (rem_758 epsilon_m__def_9_pknows_old);  tauto.
Defined.

Remark rem_760 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_38 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_761 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_38 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_38 X1). tauto. exact (rem_760 epsilon_m__def_9_pknows_old X1).
Defined.

Remark rem_762 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_3 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_763 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_3 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_3 X2). tauto. exact (rem_762 epsilon_m__def_9_pknows_old X2).
Defined.

Remark rem_764 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_38 X1 /\ auto___type_3 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  cut (auto___def_38 X1). 2:apply (rem_761 epsilon_m__def_9_pknows_old X1 X2);  assumption.
  cut (auto___type_3 X2). 2:apply (rem_763 epsilon_m__def_9_pknows_old X1 X2);  assumption.
  tauto.
Defined.

Remark rem_765 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto_knows_old (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  case (rem_764 epsilon_m__def_9_pknows_old X1 X2 A1 A2). clear  epsilon_m__def_9_pknows_old A1 A2. intros. apply trans_knows_old_f2_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1 A2. tauto.
Defined.

Remark rem_766 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_9 (f2 X1 X2) -> auto_knows_old (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intro H. intros.
  elim (rem_677 X1 X2 H);  intros.
  apply (rem_765 epsilon_m__def_9_pknows_old X1 X2);  tauto.
Defined.

Remark rem_767 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto_knows_old success. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old.  case (rem_747 epsilon_m__def_9_pknows_old). clear  epsilon_m__def_9_pknows_old. intros. apply trans_knows_old_success_1;  tauto.
 clear  epsilon_m__def_9_pknows_old. tauto.
Defined.

Remark rem_768 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto___def_9 success -> auto_knows_old success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intro H. intros.
  elim (rem_680 H);  intros.
  apply (rem_767 epsilon_m__def_9_pknows_old);  tauto.
Defined.

Remark rem_769 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto_knows_old request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old.  case (rem_747 epsilon_m__def_9_pknows_old). clear  epsilon_m__def_9_pknows_old. intros. apply trans_knows_old_request_id_1;  tauto.
 clear  epsilon_m__def_9_pknows_old. tauto.
Defined.

Remark rem_770 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> auto___def_9 request_id -> auto_knows_old request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intro H. intros.
  elim (rem_683 H);  intros.
  apply (rem_769 epsilon_m__def_9_pknows_old);  tauto.
Defined.

Remark rem_771 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_772 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_771 epsilon_m__def_9_pknows_old X1).
Defined.

Remark rem_773 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_774 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_773 epsilon_m__def_9_pknows_old X2).
Defined.

Remark rem_775 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_772 epsilon_m__def_9_pknows_old X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_774 epsilon_m__def_9_pknows_old X1 X2);  assumption.
  tauto.
Defined.

Remark rem_776 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_old (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  case (rem_775 epsilon_m__def_9_pknows_old X1 X2 A1 A2). clear  epsilon_m__def_9_pknows_old A1 A2. intros. apply trans_knows_old_crypt_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1 A2. tauto.
Defined.

Remark rem_777 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_743 epsilon_m__def_9_pknows_old X1).
Defined.

Remark rem_778 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_779 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_778 epsilon_m__def_9_pknows_old X2).
Defined.

Remark rem_780 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_777 epsilon_m__def_9_pknows_old X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_779 epsilon_m__def_9_pknows_old X1 X2);  assumption.
  tauto.
Defined.

Remark rem_781 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  case (rem_780 epsilon_m__def_9_pknows_old X1 X2 A1 A2). clear  epsilon_m__def_9_pknows_old A1 A2. intros. apply trans_knows_old_crypt_2;  tauto.
 clear  epsilon_m__def_9_pknows_old A1 A2. tauto.
Defined.

Remark rem_782 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_9 (crypt X1 X2) -> auto_knows_old (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intro H. intros.
  elim (rem_696 X1 X2 H);  intros.
  apply (rem_776 epsilon_m__def_9_pknows_old X1 X2);  tauto.
  apply (rem_781 epsilon_m__def_9_pknows_old X1 X2);  tauto.
Defined.

Remark rem_783 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_784 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_783 epsilon_m__def_9_pknows_old X1);  assumption.
  tauto.
Defined.

Remark rem_785 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto_agent X1 -> auto_knows_old (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intros A1.
  case (rem_784 epsilon_m__def_9_pknows_old X1 A1). clear  epsilon_m__def_9_pknows_old A1. intros. apply trans_knows_old_nai_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1. tauto.
Defined.

Remark rem_786 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_9 (nai X1) -> auto_knows_old (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1. intro H. intros.
  elim (rem_701 X1 H);  intros.
  apply (rem_785 epsilon_m__def_9_pknows_old X1);  tauto.
Defined.

Remark rem_787 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_788 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_787 epsilon_m__def_9_pknows_old X1).
Defined.

Remark rem_789 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_790 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_789 epsilon_m__def_9_pknows_old X2).
Defined.

Remark rem_791 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_792 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_791 epsilon_m__def_9_pknows_old X3).
Defined.

Remark rem_793 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_788 epsilon_m__def_9_pknows_old X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_790 epsilon_m__def_9_pknows_old X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_792 epsilon_m__def_9_pknows_old X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_794 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_old (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_793 epsilon_m__def_9_pknows_old X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_9_pknows_old A1 A2 A3. intros. apply trans_knows_old_nonces_old_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1 A2 A3. tauto.
Defined.

Remark rem_795 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 (nonces_old X1 X2 X3) -> auto_knows_old (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3. intro H. intros.
  elim (rem_711 X1 X2 X3 H);  intros.
  apply (rem_794 epsilon_m__def_9_pknows_old X1 X2 X3);  tauto.
Defined.

Remark rem_796 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intros A1 A2.
  case (rem_780 epsilon_m__def_9_pknows_old X1 X2 A1 A2). clear  epsilon_m__def_9_pknows_old A1 A2. intros. apply trans_knows_old_cons_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1 A2. tauto.
Defined.

Remark rem_797 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2:term, auto___def_9 (cons X1 X2) -> auto_knows_old (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2. intro H. intros.
  elim (rem_714 X1 X2 H);  intros.
  apply (rem_796 epsilon_m__def_9_pknows_old X1 X2);  tauto.
Defined.

Remark rem_798 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_799 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_798 epsilon_m__def_9_pknows_old X1).
Defined.

Remark rem_800 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_801 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_800 epsilon_m__def_9_pknows_old X2).
Defined.

Remark rem_802 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_803 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_802 epsilon_m__def_9_pknows_old X3).
Defined.

Remark rem_804 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_799 epsilon_m__def_9_pknows_old X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_801 epsilon_m__def_9_pknows_old X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_803 epsilon_m__def_9_pknows_old X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_805 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_old (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_804 epsilon_m__def_9_pknows_old X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_9_pknows_old A1 A2 A3. intros. apply trans_knows_old_f1_1;  tauto.
 clear  epsilon_m__def_9_pknows_old A1 A2 A3. tauto.
Defined.

Remark rem_806 : (forall X:term, auto___def_9 X -> auto_knows_old X)
    -> forall X1 X2 X3:term, auto___def_9 (f1 X1 X2 X3) -> auto_knows_old (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_9_pknows_old. intros X1 X2 X3. intro H. intros.
  elim (rem_724 X1 X2 X3 H);  intros.
  apply (rem_805 epsilon_m__def_9_pknows_old X1 X2 X3);  tauto.
Defined.

Remark rem_807 : forall X1:term, auto___def_9 X1 -> auto_knows_old X1. (* Induct. *)
Proof.
  fix epsilon_m__def_9_pknows_old 1.
  intro X. case X.
   intro H. elim (rem_739  H).
   intro H. elim (rem_737  H).
  intros X1 X2;  exact (rem_797 epsilon_m__def_9_pknows_old X1 X2).
  intros X1 X2;  exact (rem_782 epsilon_m__def_9_pknows_old X1 X2).
  intros X1 X2 X3;  exact (rem_806 epsilon_m__def_9_pknows_old X1 X2 X3).
  intros X1 X2;  exact (rem_766 epsilon_m__def_9_pknows_old X1 X2).
  intros X1 X2. intro H. elim (rem_731 X1 X2 H).
  intros X1 X2. intro H. elim (rem_736 X1 X2 H).
  intros X1 X2. intro H. elim (rem_729 X1 X2 H).
  intros X1;  exact (rem_757 epsilon_m__def_9_pknows_old X1).
   intro H. elim (rem_727  H).
  intros X1 X2. intro H. elim (rem_726 X1 X2 H).
  intros X1;  exact (rem_786 epsilon_m__def_9_pknows_old X1).
  exact (rem_749 epsilon_m__def_9_pknows_old ).
  intros X1 X2 X3. intro H. elim (rem_732 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_795 epsilon_m__def_9_pknows_old X1 X2 X3).
   intro H. elim (rem_734  H).
   intro H. elim (rem_735  H).
  exact (rem_770 epsilon_m__def_9_pknows_old ).
  exact (rem_759 epsilon_m__def_9_pknows_old ).
  intros X1;  exact (rem_746 epsilon_m__def_9_pknows_old X1).
   intro H. elim (rem_738  H).
  intros X1 X2 X3. intro H. elim (rem_733 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_730 X1 X2 X3 H).
  exact (rem_768 epsilon_m__def_9_pknows_old ).
   intro H. elim (rem_728  H).
Qed.

Remark rem_808 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1:term, auto___def_9 X1 -> auto_knows_old X1. (* Cut history. *)
Proof.  intros epsilon_m__def_10_p__def_57. exact (rem_807).
Defined.

Remark rem_809 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto_knows_old X1). tauto. exact (rem_808 epsilon_m__def_10_p__def_57 X1).
Defined.

Remark rem_810 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_magent_p__type_4.  tauto.
Defined.

Remark rem_811 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto___type_4 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_4.  case (rem_810 epsilon_magent_p__type_4). clear  epsilon_magent_p__type_4. intros. apply trans___type_4_i_1;  tauto.
 clear  epsilon_magent_p__type_4. tauto.
Defined.

Remark rem_812 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto_agent i -> auto___type_4 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_4. intro H. intros.
  elim (rem_486 H);  intros.
  apply (rem_811 epsilon_magent_p__type_4);  tauto.
Defined.

Remark rem_813 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto___type_4 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_4.  case (rem_810 epsilon_magent_p__type_4). clear  epsilon_magent_p__type_4. intros. apply trans___type_4_bob_1;  tauto.
 clear  epsilon_magent_p__type_4. tauto.
Defined.

Remark rem_814 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto_agent bob -> auto___type_4 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_4. intro H. intros.
  elim (rem_489 H);  intros.
  apply (rem_813 epsilon_magent_p__type_4);  tauto.
Defined.

Remark rem_815 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto___type_4 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_4.  case (rem_810 epsilon_magent_p__type_4). clear  epsilon_magent_p__type_4. intros. apply trans___type_4_server_1;  tauto.
 clear  epsilon_magent_p__type_4. tauto.
Defined.

Remark rem_816 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto_agent server -> auto___type_4 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_4. intro H. intros.
  elim (rem_492 H);  intros.
  apply (rem_815 epsilon_magent_p__type_4);  tauto.
Defined.

Remark rem_817 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto___type_4 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_4.  case (rem_810 epsilon_magent_p__type_4). clear  epsilon_magent_p__type_4. intros. apply trans___type_4_alice_1;  tauto.
 clear  epsilon_magent_p__type_4. tauto.
Defined.

Remark rem_818 : (forall X:term, auto_agent X -> auto___type_4 X)
    -> auto_agent alice -> auto___type_4 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_4. intro H. intros.
  elim (rem_495 H);  intros.
  apply (rem_817 epsilon_magent_p__type_4);  tauto.
Defined.

Remark rem_819 : forall X2:term, auto_agent X2 -> auto___type_4 X2. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_4 1.
  intro X. case X.
  exact (rem_818 epsilon_magent_p__type_4 ).
  exact (rem_814 epsilon_magent_p__type_4 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_812 epsilon_magent_p__type_4 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_816 epsilon_magent_p__type_4 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_820 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X2:term, auto_agent X2 -> auto___type_4 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_10_p__def_57. exact (rem_819).
Defined.

Remark rem_821 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_4 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X2 -> auto___type_4 X2). tauto. exact (rem_820 epsilon_m__def_10_p__def_57 X2).
Defined.

Remark rem_822 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_823 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_822 epsilon_m__def_10_p__def_57 X2).
Defined.

Remark rem_824 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_825 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_824 epsilon_m__def_10_p__def_57 X3).
Defined.

Remark rem_826 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_magent_p__type_5.  tauto.
Defined.

Remark rem_827 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto___type_5 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_5.  case (rem_826 epsilon_magent_p__type_5). clear  epsilon_magent_p__type_5. intros. apply trans___type_5_i_1;  tauto.
 clear  epsilon_magent_p__type_5. tauto.
Defined.

Remark rem_828 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto_agent i -> auto___type_5 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_5. intro H. intros.
  elim (rem_486 H);  intros.
  apply (rem_827 epsilon_magent_p__type_5);  tauto.
Defined.

Remark rem_829 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto___type_5 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_5.  case (rem_826 epsilon_magent_p__type_5). clear  epsilon_magent_p__type_5. intros. apply trans___type_5_bob_1;  tauto.
 clear  epsilon_magent_p__type_5. tauto.
Defined.

Remark rem_830 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto_agent bob -> auto___type_5 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_5. intro H. intros.
  elim (rem_489 H);  intros.
  apply (rem_829 epsilon_magent_p__type_5);  tauto.
Defined.

Remark rem_831 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto___type_5 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_5.  case (rem_826 epsilon_magent_p__type_5). clear  epsilon_magent_p__type_5. intros. apply trans___type_5_server_1;  tauto.
 clear  epsilon_magent_p__type_5. tauto.
Defined.

Remark rem_832 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto_agent server -> auto___type_5 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_5. intro H. intros.
  elim (rem_492 H);  intros.
  apply (rem_831 epsilon_magent_p__type_5);  tauto.
Defined.

Remark rem_833 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto___type_5 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_5.  case (rem_826 epsilon_magent_p__type_5). clear  epsilon_magent_p__type_5. intros. apply trans___type_5_alice_1;  tauto.
 clear  epsilon_magent_p__type_5. tauto.
Defined.

Remark rem_834 : (forall X:term, auto_agent X -> auto___type_5 X)
    -> auto_agent alice -> auto___type_5 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_5. intro H. intros.
  elim (rem_495 H);  intros.
  apply (rem_833 epsilon_magent_p__type_5);  tauto.
Defined.

Remark rem_835 : forall X3:term, auto_agent X3 -> auto___type_5 X3. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_5 1.
  intro X. case X.
  exact (rem_834 epsilon_magent_p__type_5 ).
  exact (rem_830 epsilon_magent_p__type_5 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_828 epsilon_magent_p__type_5 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_832 epsilon_magent_p__type_5 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_836 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X3:term, auto_agent X3 -> auto___type_5 X3. (* Cut history. *)
Proof.  intros epsilon_m__def_10_p__def_57. exact (rem_835).
Defined.

Remark rem_837 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_5 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X3 -> auto___type_5 X3). tauto. exact (rem_836 epsilon_m__def_10_p__def_57 X3).
Defined.

Remark rem_838 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___type_6 X1 /\ auto_knows_old X1 /\ auto___type_4 X2 /\ auto_agent X2 /\ auto_agent X3 /\ auto___type_5 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___type_6 X1). 2:apply (rem_742 epsilon_m__def_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto_knows_old X1). 2:apply (rem_809 epsilon_m__def_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto___type_4 X2). 2:apply (rem_821 epsilon_m__def_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_823 epsilon_m__def_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_825 epsilon_m__def_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto___type_5 X3). 2:apply (rem_837 epsilon_m__def_10_p__def_57 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_839 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_57 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_838 epsilon_m__def_10_p__def_57 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_10_p__def_57 A1 A2 A3. intros. apply trans___def_57_nonces_old_1;  tauto.
 clear  epsilon_m__def_10_p__def_57 A1 A2 A3. tauto.
Defined.

Remark rem_840 : forall X1 X2 X3:term, auto___def_10 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_841 : (forall X:term, auto___def_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_10 (nonces_old X1 X2 X3) -> auto___def_57 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_10_p__def_57. intros X1 X2 X3. intro H. intros.
  elim (rem_840 X1 X2 X3 H);  intros.
  apply (rem_839 epsilon_m__def_10_p__def_57 X1 X2 X3);  tauto.
Defined.

Remark rem_842 : forall X1:term, auto___def_10 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_843 : forall X1 X2:term, auto___def_10 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_844 : auto___def_10 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_845 : auto___def_10 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_846 : auto___def_10 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_847 : forall X1 X2:term, auto___def_10 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_848 : forall X1 X2 X3:term, auto___def_10 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_849 : forall X1 X2:term, auto___def_10 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_850 : forall X1:term, auto___def_10 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_851 : forall X1 X2 X3:term, auto___def_10 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_852 : forall X1 X2 X3:term, auto___def_10 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_853 : auto___def_10 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_854 : auto___def_10 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_855 : forall X1 X2:term, auto___def_10 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_856 : auto___def_10 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_857 : auto___def_10 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_858 : auto___def_10 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_859 : forall X1 X2:term, auto___def_10 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_860 : forall X1:term, auto___def_10 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_861 : forall X1 X2:term, auto___def_10 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_862 : auto___def_10 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_863 : auto___def_10 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_864 : forall X1 X2:term, auto___def_10 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_865 : auto___def_10 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_866 : forall X1 X2 X3:term, auto___def_10 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_867 : forall X2:term, auto___def_10 X2 -> auto___def_57 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_10_p__def_57 1.
  intro X. case X.
   intro H. elim (rem_865  H).
   intro H. elim (rem_862  H).
  intros X1 X2. intro H. elim (rem_864 X1 X2 H).
  intros X1 X2. intro H. elim (rem_859 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_866 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_861 X1 X2 H).
  intros X1 X2. intro H. elim (rem_847 X1 X2 H).
  intros X1. intro H. elim (rem_850 X1 H).
   intro H. elim (rem_845  H).
  intros X1 X2. intro H. elim (rem_843 X1 X2 H).
  intros X1. intro H. elim (rem_860 X1 H).
   intro H. elim (rem_844  H).
  intros X1 X2 X3. intro H. elim (rem_851 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_841 epsilon_m__def_10_p__def_57 X1 X2 X3).
   intro H. elim (rem_854  H).
   intro H. elim (rem_858  H).
   intro H. elim (rem_857  H).
   intro H. elim (rem_853  H).
  intros X1. intro H. elim (rem_842 X1 H).
   intro H. elim (rem_863  H).
  intros X1 X2 X3. intro H. elim (rem_852 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_848 X1 X2 X3 H).
   intro H. elim (rem_856  H).
   intro H. elim (rem_846  H).
Qed.

Remark rem_868 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X2:term, auto___def_10 X2 -> auto___def_57 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_31_pknows_current. exact (rem_867).
Defined.

Remark rem_869 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_31_pknows_current. intros X1 X2.
  cut (auto___def_10 X2 -> auto___def_57 X2). tauto. exact (rem_868 epsilon_m__def_31_pknows_current X2).
Defined.

Remark rem_870 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_31_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_649 epsilon_m__def_31_pknows_current X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_869 epsilon_m__def_31_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_871 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto_knows_current (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_31_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_870 epsilon_m__def_31_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_31_pknows_current A1 A2. intros. apply trans_knows_current_f4_1;  tauto.
 clear  epsilon_m__def_31_pknows_current A1 A2. tauto.
Defined.

Remark rem_872 : forall X1 X2:term, auto___def_31 (f4 X1 X2) -> or_1
    (auto___def_18 X1 /\ auto___def_10 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_873 : (forall X:term, auto___def_31 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_31 (f4 X1 X2) -> auto_knows_current (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_31_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_872 X1 X2 H);  intros.
  apply (rem_871 epsilon_m__def_31_pknows_current X1 X2);  tauto.
Defined.

Remark rem_874 : forall X1:term, auto___def_31 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_875 : forall X1 X2:term, auto___def_31 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_876 : auto___def_31 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_877 : auto___def_31 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_878 : auto___def_31 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_879 : forall X1 X2:term, auto___def_31 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_880 : forall X1 X2 X3:term, auto___def_31 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_881 : forall X1 X2:term, auto___def_31 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_882 : forall X1:term, auto___def_31 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_883 : forall X1 X2 X3:term, auto___def_31 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_884 : forall X1 X2 X3:term, auto___def_31 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_885 : auto___def_31 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_886 : auto___def_31 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_887 : forall X1 X2:term, auto___def_31 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_888 : auto___def_31 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_889 : auto___def_31 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_890 : auto___def_31 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_891 : forall X1 X2:term, auto___def_31 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_892 : forall X1:term, auto___def_31 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_893 : auto___def_31 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_894 : auto___def_31 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_895 : forall X1 X2 X3:term, auto___def_31 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_896 : forall X1 X2:term, auto___def_31 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_897 : auto___def_31 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_898 : forall X1 X2 X3:term, auto___def_31 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_899 : forall X1:term, auto___def_31 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_31_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_897  H).
   intro H. elim (rem_893  H).
  intros X1 X2. intro H. elim (rem_896 X1 X2 H).
  intros X1 X2. intro H. elim (rem_891 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_898 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_887 X1 X2 H).
  intros X1 X2. intro H. elim (rem_881 X1 X2 H).
  intros X1 X2;  exact (rem_873 epsilon_m__def_31_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_879 X1 X2 H).
  intros X1. intro H. elim (rem_882 X1 H).
   intro H. elim (rem_877  H).
  intros X1 X2. intro H. elim (rem_875 X1 X2 H).
  intros X1. intro H. elim (rem_892 X1 H).
   intro H. elim (rem_876  H).
  intros X1 X2 X3. intro H. elim (rem_883 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_895 X1 X2 X3 H).
   intro H. elim (rem_886  H).
   intro H. elim (rem_890  H).
   intro H. elim (rem_889  H).
   intro H. elim (rem_885  H).
  intros X1. intro H. elim (rem_874 X1 H).
   intro H. elim (rem_894  H).
  intros X1 X2 X3. intro H. elim (rem_884 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_880 X1 X2 X3 H).
   intro H. elim (rem_888  H).
   intro H. elim (rem_878  H).
Qed.

Remark rem_900 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X1:term, auto___def_31 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_30_pknows_current. exact (rem_899).
Defined.

Remark rem_901 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_31 X1 -> auto___def_32 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_30_pknows_current. intros X1 X2.
  cut (auto___def_31 X1 -> auto_knows_current X1). tauto. exact (rem_900 epsilon_m__def_30_pknows_current X1).
Defined.

Remark rem_902 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_56 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_33_pknows_current. exact (rem_647).
Defined.

Remark rem_903 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_33_pknows_current. intros X1 X2.
  cut (auto___def_18 X1 -> auto___def_56 X1). tauto. exact (rem_902 epsilon_m__def_33_pknows_current X1).
Defined.

Remark rem_904 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X2:term, auto___def_10 X2 -> auto___def_57 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_33_pknows_current. exact (rem_867).
Defined.

Remark rem_905 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_33_pknows_current. intros X1 X2.
  cut (auto___def_10 X2 -> auto___def_57 X2). tauto. exact (rem_904 epsilon_m__def_33_pknows_current X2).
Defined.

Remark rem_906 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_33_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_903 epsilon_m__def_33_pknows_current X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_905 epsilon_m__def_33_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_907 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_18 X1 -> auto___def_10 X2 -> auto_knows_current (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_33_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_906 epsilon_m__def_33_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_33_pknows_current A1 A2. intros. apply trans_knows_current_f3_1;  tauto.
 clear  epsilon_m__def_33_pknows_current A1 A2. tauto.
Defined.

Remark rem_908 : forall X1 X2:term, auto___def_33 (f3 X1 X2) -> or_1
    (auto___def_18 X1 /\ auto___def_10 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_909 : (forall X:term, auto___def_33 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_33 (f3 X1 X2) -> auto_knows_current (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_33_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_908 X1 X2 H);  intros.
  apply (rem_907 epsilon_m__def_33_pknows_current X1 X2);  tauto.
Defined.

Remark rem_910 : forall X1:term, auto___def_33 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_911 : forall X1 X2:term, auto___def_33 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_912 : auto___def_33 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_913 : auto___def_33 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_914 : auto___def_33 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_915 : forall X1 X2:term, auto___def_33 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_916 : forall X1 X2 X3:term, auto___def_33 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_917 : forall X1:term, auto___def_33 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_918 : forall X1 X2 X3:term, auto___def_33 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_919 : forall X1 X2 X3:term, auto___def_33 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_920 : auto___def_33 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_921 : auto___def_33 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_922 : forall X1 X2:term, auto___def_33 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_923 : auto___def_33 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_924 : auto___def_33 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_925 : auto___def_33 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_926 : forall X1 X2:term, auto___def_33 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_927 : forall X1:term, auto___def_33 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_928 : forall X1 X2:term, auto___def_33 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_929 : auto___def_33 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_930 : auto___def_33 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_931 : forall X1 X2 X3:term, auto___def_33 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_932 : forall X1 X2:term, auto___def_33 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_933 : auto___def_33 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_934 : forall X1 X2 X3:term, auto___def_33 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_935 : forall X1:term, auto___def_33 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_33_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_933  H).
   intro H. elim (rem_929  H).
  intros X1 X2. intro H. elim (rem_932 X1 X2 H).
  intros X1 X2. intro H. elim (rem_926 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_934 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_922 X1 X2 H).
  intros X1 X2;  exact (rem_909 epsilon_m__def_33_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_928 X1 X2 H).
  intros X1 X2. intro H. elim (rem_915 X1 X2 H).
  intros X1. intro H. elim (rem_917 X1 H).
   intro H. elim (rem_913  H).
  intros X1 X2. intro H. elim (rem_911 X1 X2 H).
  intros X1. intro H. elim (rem_927 X1 H).
   intro H. elim (rem_912  H).
  intros X1 X2 X3. intro H. elim (rem_918 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_931 X1 X2 X3 H).
   intro H. elim (rem_921  H).
   intro H. elim (rem_925  H).
   intro H. elim (rem_924  H).
   intro H. elim (rem_920  H).
  intros X1. intro H. elim (rem_910 X1 H).
   intro H. elim (rem_930  H).
  intros X1 X2 X3. intro H. elim (rem_919 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_916 X1 X2 X3 H).
   intro H. elim (rem_923  H).
   intro H. elim (rem_914  H).
Qed.

Remark rem_936 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X1:term, auto___def_33 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_32_pknows_current. exact (rem_935).
Defined.

Remark rem_937 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_33 X1 -> auto___def_24 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_32_pknows_current. intros X1 X2.
  cut (auto___def_33 X1 -> auto_knows_current X1). tauto. exact (rem_936 epsilon_m__def_32_pknows_current X1).
Defined.

Remark rem_938 : (forall X:term, auto___def_24 X -> auto_knows_current X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_24_pknows_current.  tauto.
Defined.

Remark rem_939 : (forall X:term, auto___def_24 X -> auto_knows_current X)
    -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_24_pknows_current.  case (rem_938 epsilon_m__def_24_pknows_current). clear  epsilon_m__def_24_pknows_current. intros. apply trans_knows_current_nil_1;  tauto.
 clear  epsilon_m__def_24_pknows_current. tauto.
Defined.

Remark rem_940 : auto___def_24 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_941 : (forall X:term, auto___def_24 X -> auto_knows_current X)
    -> auto___def_24 nil -> auto_knows_current nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_24_pknows_current. intro H. intros.
  elim (rem_940 H);  intros.
  apply (rem_939 epsilon_m__def_24_pknows_current);  tauto.
Defined.

Remark rem_942 : forall X1:term, auto___def_24 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_943 : forall X1 X2:term, auto___def_24 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_944 : auto___def_24 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_945 : auto___def_24 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_946 : forall X1 X2:term, auto___def_24 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_947 : forall X1 X2 X3:term, auto___def_24 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_948 : forall X1 X2:term, auto___def_24 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_949 : forall X1:term, auto___def_24 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_950 : forall X1 X2 X3:term, auto___def_24 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_951 : forall X1 X2 X3:term, auto___def_24 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_952 : auto___def_24 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_953 : auto___def_24 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_954 : forall X1 X2:term, auto___def_24 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_955 : auto___def_24 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_956 : auto___def_24 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_957 : auto___def_24 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_958 : forall X1 X2:term, auto___def_24 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_959 : forall X1:term, auto___def_24 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_960 : forall X1 X2:term, auto___def_24 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_961 : auto___def_24 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_962 : auto___def_24 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_963 : forall X1 X2 X3:term, auto___def_24 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_964 : forall X1 X2:term, auto___def_24 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_965 : auto___def_24 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_966 : forall X1 X2 X3:term, auto___def_24 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_967 : forall X2:term, auto___def_24 X2 -> auto_knows_current X2. (* Induct. *)
Proof.
  fix epsilon_m__def_24_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_965  H).
   intro H. elim (rem_961  H).
  intros X1 X2. intro H. elim (rem_964 X1 X2 H).
  intros X1 X2. intro H. elim (rem_958 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_966 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_954 X1 X2 H).
  intros X1 X2. intro H. elim (rem_948 X1 X2 H).
  intros X1 X2. intro H. elim (rem_960 X1 X2 H).
  intros X1 X2. intro H. elim (rem_946 X1 X2 H).
  intros X1. intro H. elim (rem_949 X1 H).
   intro H. elim (rem_944  H).
  intros X1 X2. intro H. elim (rem_943 X1 X2 H).
  intros X1. intro H. elim (rem_959 X1 H).
  exact (rem_941 epsilon_m__def_24_pknows_current ).
  intros X1 X2 X3. intro H. elim (rem_950 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_963 X1 X2 X3 H).
   intro H. elim (rem_953  H).
   intro H. elim (rem_957  H).
   intro H. elim (rem_956  H).
   intro H. elim (rem_952  H).
  intros X1. intro H. elim (rem_942 X1 H).
   intro H. elim (rem_962  H).
  intros X1 X2 X3. intro H. elim (rem_951 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_947 X1 X2 X3 H).
   intro H. elim (rem_955  H).
   intro H. elim (rem_945  H).
Qed.

Remark rem_968 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X2:term, auto___def_24 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_32_pknows_current. exact (rem_967).
Defined.

Remark rem_969 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_33 X1 -> auto___def_24 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_32_pknows_current. intros X1 X2.
  cut (auto___def_24 X2 -> auto_knows_current X2). tauto. exact (rem_968 epsilon_m__def_32_pknows_current X2).
Defined.

Remark rem_970 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_33 X1 -> auto___def_24 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_32_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_937 epsilon_m__def_32_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_969 epsilon_m__def_32_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_971 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_33 X1 -> auto___def_24 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_32_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_970 epsilon_m__def_32_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_32_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_32_pknows_current A1 A2. tauto.
Defined.

Remark rem_972 : forall X1 X2:term, auto___def_32 (cons X1 X2) -> or_1
    (auto___def_33 X1 /\ auto___def_24 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_973 : (forall X:term, auto___def_32 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_32 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_32_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_972 X1 X2 H);  intros.
  apply (rem_971 epsilon_m__def_32_pknows_current X1 X2);  tauto.
Defined.

Remark rem_974 : forall X1:term, auto___def_32 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_975 : forall X1 X2:term, auto___def_32 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_976 : auto___def_32 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_977 : auto___def_32 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_978 : auto___def_32 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_979 : forall X1 X2:term, auto___def_32 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_980 : forall X1 X2 X3:term, auto___def_32 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_981 : forall X1 X2:term, auto___def_32 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_982 : forall X1:term, auto___def_32 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_983 : forall X1 X2 X3:term, auto___def_32 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_984 : forall X1 X2 X3:term, auto___def_32 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_985 : auto___def_32 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_986 : auto___def_32 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_987 : forall X1 X2:term, auto___def_32 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_988 : auto___def_32 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_989 : auto___def_32 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_990 : auto___def_32 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_991 : forall X1 X2:term, auto___def_32 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_992 : forall X1:term, auto___def_32 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_993 : forall X1 X2:term, auto___def_32 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_994 : auto___def_32 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_995 : auto___def_32 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_996 : forall X1 X2 X3:term, auto___def_32 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_997 : auto___def_32 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_998 : forall X1 X2 X3:term, auto___def_32 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_999 : forall X2:term, auto___def_32 X2 -> auto_knows_current X2. (* Induct. *)
Proof.
  fix epsilon_m__def_32_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_997  H).
   intro H. elim (rem_994  H).
  intros X1 X2;  exact (rem_973 epsilon_m__def_32_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_991 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_998 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_987 X1 X2 H).
  intros X1 X2. intro H. elim (rem_981 X1 X2 H).
  intros X1 X2. intro H. elim (rem_993 X1 X2 H).
  intros X1 X2. intro H. elim (rem_979 X1 X2 H).
  intros X1. intro H. elim (rem_982 X1 H).
   intro H. elim (rem_977  H).
  intros X1 X2. intro H. elim (rem_975 X1 X2 H).
  intros X1. intro H. elim (rem_992 X1 H).
   intro H. elim (rem_976  H).
  intros X1 X2 X3. intro H. elim (rem_983 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_996 X1 X2 X3 H).
   intro H. elim (rem_986  H).
   intro H. elim (rem_990  H).
   intro H. elim (rem_989  H).
   intro H. elim (rem_985  H).
  intros X1. intro H. elim (rem_974 X1 H).
   intro H. elim (rem_995  H).
  intros X1 X2 X3. intro H. elim (rem_984 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_980 X1 X2 X3 H).
   intro H. elim (rem_988  H).
   intro H. elim (rem_978  H).
Qed.

Remark rem_1000 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X2:term, auto___def_32 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_30_pknows_current. exact (rem_999).
Defined.

Remark rem_1001 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_31 X1 -> auto___def_32 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_30_pknows_current. intros X1 X2.
  cut (auto___def_32 X2 -> auto_knows_current X2). tauto. exact (rem_1000 epsilon_m__def_30_pknows_current X2).
Defined.

Remark rem_1002 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_31 X1 -> auto___def_32 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_30_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_901 epsilon_m__def_30_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1001 epsilon_m__def_30_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1003 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_31 X1 -> auto___def_32 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_30_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1002 epsilon_m__def_30_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_30_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_30_pknows_current A1 A2. tauto.
Defined.

Remark rem_1004 : forall X1 X2:term, auto___def_30 (cons X1 X2) -> or_1
    (auto___def_31 X1 /\ auto___def_32 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1005 : (forall X:term, auto___def_30 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_30 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_30_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1004 X1 X2 H);  intros.
  apply (rem_1003 epsilon_m__def_30_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1006 : forall X1:term, auto___def_30 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1007 : forall X1 X2:term, auto___def_30 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1008 : auto___def_30 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1009 : auto___def_30 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1010 : auto___def_30 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1011 : forall X1 X2:term, auto___def_30 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1012 : forall X1 X2 X3:term, auto___def_30 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1013 : forall X1 X2:term, auto___def_30 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1014 : forall X1:term, auto___def_30 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1015 : forall X1 X2 X3:term, auto___def_30 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1016 : forall X1 X2 X3:term, auto___def_30 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1017 : auto___def_30 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1018 : auto___def_30 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1019 : forall X1 X2:term, auto___def_30 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1020 : auto___def_30 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1021 : auto___def_30 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1022 : auto___def_30 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1023 : forall X1 X2:term, auto___def_30 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1024 : forall X1:term, auto___def_30 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1025 : forall X1 X2:term, auto___def_30 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1026 : auto___def_30 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1027 : auto___def_30 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1028 : forall X1 X2 X3:term, auto___def_30 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1029 : auto___def_30 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1030 : forall X1 X2 X3:term, auto___def_30 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1031 : forall X2:term, auto___def_30 X2 -> auto_knows_current X2. (* Induct. *)
Proof.
  fix epsilon_m__def_30_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1029  H).
   intro H. elim (rem_1026  H).
  intros X1 X2;  exact (rem_1005 epsilon_m__def_30_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1023 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1030 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1019 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1013 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1025 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1011 X1 X2 H).
  intros X1. intro H. elim (rem_1014 X1 H).
   intro H. elim (rem_1009  H).
  intros X1 X2. intro H. elim (rem_1007 X1 X2 H).
  intros X1. intro H. elim (rem_1024 X1 H).
   intro H. elim (rem_1008  H).
  intros X1 X2 X3. intro H. elim (rem_1015 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1028 X1 X2 X3 H).
   intro H. elim (rem_1018  H).
   intro H. elim (rem_1022  H).
   intro H. elim (rem_1021  H).
   intro H. elim (rem_1017  H).
  intros X1. intro H. elim (rem_1006 X1 H).
   intro H. elim (rem_1027  H).
  intros X1 X2 X3. intro H. elim (rem_1016 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1012 X1 X2 X3 H).
   intro H. elim (rem_1020  H).
   intro H. elim (rem_1010  H).
Qed.

Remark rem_1032 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_30 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. exact (rem_1031).
Defined.

Remark rem_1033 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_30 X2 -> auto_knows_current X2). tauto. exact (rem_1032 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1034 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_413 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1033 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1035 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1034 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1036 : forall X1 X2:term, auto___def_29 (cons X1 X2) -> or_1
    (auto___type_2 X1 /\ auto___def_30 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1037 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_29 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_1036 X1 X2 H);  intros.
  apply (rem_1035 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_1038 : forall X1:term, auto___def_29 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1039 : forall X1 X2:term, auto___def_29 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1040 : auto___def_29 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1041 : auto___def_29 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1042 : auto___def_29 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1043 : forall X1 X2:term, auto___def_29 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1044 : forall X1 X2 X3:term, auto___def_29 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1045 : forall X1 X2:term, auto___def_29 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1046 : forall X1:term, auto___def_29 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1047 : forall X1 X2 X3:term, auto___def_29 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1048 : forall X1 X2 X3:term, auto___def_29 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1049 : auto___def_29 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1050 : auto___def_29 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1051 : forall X1 X2:term, auto___def_29 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1052 : auto___def_29 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1053 : auto___def_29 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1054 : auto___def_29 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1055 : forall X1 X2:term, auto___def_29 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1056 : forall X1:term, auto___def_29 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1057 : forall X1 X2:term, auto___def_29 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1058 : auto___def_29 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1059 : auto___def_29 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1060 : forall X1 X2 X3:term, auto___def_29 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1061 : auto___def_29 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1062 : forall X1 X2 X3:term, auto___def_29 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1063 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__def_29_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1061  H).
   intro H. elim (rem_1058  H).
  intros X1 X2;  exact (rem_1037 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2. intro H. elim (rem_1055 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1062 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1051 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1045 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1057 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1043 X1 X2 H).
  intros X1. intro H. elim (rem_1046 X1 H).
   intro H. elim (rem_1041  H).
  intros X1 X2. intro H. elim (rem_1039 X1 X2 H).
  intros X1. intro H. elim (rem_1056 X1 H).
   intro H. elim (rem_1040  H).
  intros X1 X2 X3. intro H. elim (rem_1047 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1060 X1 X2 X3 H).
   intro H. elim (rem_1050  H).
   intro H. elim (rem_1054  H).
   intro H. elim (rem_1053  H).
   intro H. elim (rem_1049  H).
  intros X1. intro H. elim (rem_1038 X1 H).
   intro H. elim (rem_1059  H).
  intros X1 X2 X3. intro H. elim (rem_1048 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1044 X1 X2 X3 H).
   intro H. elim (rem_1052  H).
   intro H. elim (rem_1042  H).
Defined.

Remark rem_1064 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109. exact (rem_1063 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109).
Defined.

Remark rem_1065 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_1064 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_1066 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_1065 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109 A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_1067 : forall X1:term, auto___def_27 (h X1) -> or_1
    (auto___def_29 X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1068 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_27 (h X1) -> auto_knows_current (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_1067 X1 H);  intros.
  apply (rem_1066 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_1069 : forall X1:term, auto___def_27 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1070 : forall X1 X2:term, auto___def_27 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1071 : auto___def_27 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1072 : auto___def_27 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1073 : auto___def_27 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1074 : forall X1 X2:term, auto___def_27 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1075 : forall X1 X2 X3:term, auto___def_27 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1076 : forall X1 X2:term, auto___def_27 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1077 : forall X1 X2 X3:term, auto___def_27 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1078 : forall X1 X2 X3:term, auto___def_27 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1079 : auto___def_27 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1080 : auto___def_27 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1081 : forall X1 X2:term, auto___def_27 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1082 : auto___def_27 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1083 : auto___def_27 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1084 : auto___def_27 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1085 : forall X1 X2:term, auto___def_27 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1086 : forall X1:term, auto___def_27 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1087 : forall X1 X2:term, auto___def_27 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1088 : auto___def_27 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1089 : auto___def_27 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1090 : forall X1 X2 X3:term, auto___def_27 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1091 : forall X1 X2:term, auto___def_27 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1092 : auto___def_27 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1093 : forall X1 X2 X3:term, auto___def_27 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1094 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_27 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__def_27_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1092  H).
   intro H. elim (rem_1088  H).
  intros X1 X2. intro H. elim (rem_1091 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1085 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1093 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1081 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1076 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1087 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1074 X1 X2 H).
  intros X1;  exact (rem_1068 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current epsilon_m__def_44_p__def_109 X1).
   intro H. elim (rem_1072  H).
  intros X1 X2. intro H. elim (rem_1070 X1 X2 H).
  intros X1. intro H. elim (rem_1086 X1 H).
   intro H. elim (rem_1071  H).
  intros X1 X2 X3. intro H. elim (rem_1077 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1090 X1 X2 X3 H).
   intro H. elim (rem_1080  H).
   intro H. elim (rem_1084  H).
   intro H. elim (rem_1083  H).
   intro H. elim (rem_1079  H).
  intros X1. intro H. elim (rem_1069 X1 H).
   intro H. elim (rem_1089  H).
  intros X1 X2 X3. intro H. elim (rem_1078 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1075 X1 X2 X3 H).
   intro H. elim (rem_1082  H).
   intro H. elim (rem_1073  H).
Defined.

Remark rem_1095 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_27 X1 -> auto_knows_current X1). tauto. exact (rem_1094 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1096 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1097 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_pknows_current. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_1096 epsilon_m__def_10_pknows_current X1).
Defined.

Remark rem_1098 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1099 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_pknows_current. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_1098 epsilon_m__def_10_pknows_current X2).
Defined.

Remark rem_1100 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1101 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_pknows_current. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_1100 epsilon_m__def_10_pknows_current X3).
Defined.

Remark rem_1102 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_10_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_1097 epsilon_m__def_10_pknows_current X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_1099 epsilon_m__def_10_pknows_current X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_1101 epsilon_m__def_10_pknows_current X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1103 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_10_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1102 epsilon_m__def_10_pknows_current X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_10_pknows_current A1 A2 A3. intros. apply trans_knows_current_nonces_old_1;  tauto.
 clear  epsilon_m__def_10_pknows_current A1 A2 A3. tauto.
Defined.

Remark rem_1104 : (forall X:term, auto___def_10 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_10 (nonces_old X1 X2 X3) -> auto_knows_current (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_10_pknows_current. intros X1 X2 X3. intro H. intros.
  elim (rem_840 X1 X2 X3 H);  intros.
  apply (rem_1103 epsilon_m__def_10_pknows_current X1 X2 X3);  tauto.
Defined.

Remark rem_1105 : forall X1:term, auto___def_10 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_10_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_865  H).
   intro H. elim (rem_862  H).
  intros X1 X2. intro H. elim (rem_864 X1 X2 H).
  intros X1 X2. intro H. elim (rem_859 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_866 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_861 X1 X2 H).
  intros X1 X2. intro H. elim (rem_847 X1 X2 H).
  intros X1. intro H. elim (rem_850 X1 H).
   intro H. elim (rem_845  H).
  intros X1 X2. intro H. elim (rem_843 X1 X2 H).
  intros X1. intro H. elim (rem_860 X1 H).
   intro H. elim (rem_844  H).
  intros X1 X2 X3. intro H. elim (rem_851 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_1104 epsilon_m__def_10_pknows_current X1 X2 X3).
   intro H. elim (rem_854  H).
   intro H. elim (rem_858  H).
   intro H. elim (rem_857  H).
   intro H. elim (rem_853  H).
  intros X1. intro H. elim (rem_842 X1 H).
   intro H. elim (rem_863  H).
  intros X1 X2 X3. intro H. elim (rem_852 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_848 X1 X2 X3 H).
   intro H. elim (rem_856  H).
   intro H. elim (rem_846  H).
Qed.

Remark rem_1106 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X1:term, auto___def_10 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_28_pknows_current. exact (rem_1105).
Defined.

Remark rem_1107 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_10 X1 -> auto___def_34 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_28_pknows_current. intros X1 X2.
  cut (auto___def_10 X1 -> auto_knows_current X1). tauto. exact (rem_1106 epsilon_m__def_28_pknows_current X1).
Defined.

Remark rem_1108 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1109 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_14_pknows_current. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_1108 epsilon_m__def_14_pknows_current X1).
Defined.

Remark rem_1110 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1111 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_14_pknows_current. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_1110 epsilon_m__def_14_pknows_current X2).
Defined.

Remark rem_1112 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_14_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_1109 epsilon_m__def_14_pknows_current X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_1111 epsilon_m__def_14_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1113 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_14_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1112 epsilon_m__def_14_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_14_pknows_current A1 A2. intros. apply trans_knows_current_crypt_3;  tauto.
 clear  epsilon_m__def_14_pknows_current A1 A2. tauto.
Defined.

Remark rem_1114 : forall X1 X2:term, auto___def_14 (crypt X1 X2) -> or_1
    (auto___def_16 X1 /\ auto___def_17 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1115 : (forall X:term, auto___def_14 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_14 (crypt X1 X2) -> auto_knows_current (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_14_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1114 X1 X2 H);  intros.
  apply (rem_1113 epsilon_m__def_14_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1116 : forall X1:term, auto___def_14 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1117 : forall X1 X2:term, auto___def_14 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1118 : auto___def_14 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1119 : auto___def_14 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1120 : auto___def_14 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1121 : forall X1 X2:term, auto___def_14 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1122 : forall X1 X2 X3:term, auto___def_14 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1123 : forall X1 X2:term, auto___def_14 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1124 : forall X1:term, auto___def_14 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1125 : forall X1 X2 X3:term, auto___def_14 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1126 : forall X1 X2 X3:term, auto___def_14 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1127 : auto___def_14 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1128 : auto___def_14 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1129 : forall X1 X2:term, auto___def_14 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1130 : auto___def_14 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1131 : auto___def_14 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1132 : auto___def_14 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1133 : forall X1:term, auto___def_14 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1134 : forall X1 X2:term, auto___def_14 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1135 : auto___def_14 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1136 : auto___def_14 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1137 : forall X1 X2 X3:term, auto___def_14 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1138 : forall X1 X2:term, auto___def_14 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1139 : auto___def_14 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1140 : forall X1 X2 X3:term, auto___def_14 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1141 : forall X1:term, auto___def_14 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_14_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1139  H).
   intro H. elim (rem_1135  H).
  intros X1 X2. intro H. elim (rem_1138 X1 X2 H).
  intros X1 X2;  exact (rem_1115 epsilon_m__def_14_pknows_current X1 X2).
  intros X1 X2 X3. intro H. elim (rem_1140 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1129 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1123 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1134 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1121 X1 X2 H).
  intros X1. intro H. elim (rem_1124 X1 H).
   intro H. elim (rem_1119  H).
  intros X1 X2. intro H. elim (rem_1117 X1 X2 H).
  intros X1. intro H. elim (rem_1133 X1 H).
   intro H. elim (rem_1118  H).
  intros X1 X2 X3. intro H. elim (rem_1125 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1137 X1 X2 X3 H).
   intro H. elim (rem_1128  H).
   intro H. elim (rem_1132  H).
   intro H. elim (rem_1131  H).
   intro H. elim (rem_1127  H).
  intros X1. intro H. elim (rem_1116 X1 H).
   intro H. elim (rem_1136  H).
  intros X1 X2 X3. intro H. elim (rem_1126 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1122 X1 X2 X3 H).
   intro H. elim (rem_1130  H).
   intro H. elim (rem_1120  H).
Qed.

Remark rem_1142 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X1:term, auto___def_14 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_12_pknows_current. exact (rem_1141).
Defined.

Remark rem_1143 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_14 X1 -> auto___def_15 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_12_pknows_current. intros X1 X2.
  cut (auto___def_14 X1 -> auto_knows_current X1). tauto. exact (rem_1142 epsilon_m__def_12_pknows_current X1).
Defined.

Remark rem_1144 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1145 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_23_pknows_current. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_1144 epsilon_m__def_23_pknows_current X1).
Defined.

Remark rem_1146 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1147 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_23_pknows_current. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_1146 epsilon_m__def_23_pknows_current X2).
Defined.

Remark rem_1148 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1149 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_23_pknows_current. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_1148 epsilon_m__def_23_pknows_current X3).
Defined.

Remark rem_1150 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_23_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_1145 epsilon_m__def_23_pknows_current X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_1147 epsilon_m__def_23_pknows_current X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_1149 epsilon_m__def_23_pknows_current X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1151 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_current (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_23_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1150 epsilon_m__def_23_pknows_current X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_23_pknows_current A1 A2 A3. intros. apply trans_knows_current_f1_1;  tauto.
 clear  epsilon_m__def_23_pknows_current A1 A2 A3. tauto.
Defined.

Remark rem_1152 : forall X1 X2 X3:term, auto___def_23 (f1 X1 X2 X3) -> or_1
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1153 : (forall X:term, auto___def_23 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_23 (f1 X1 X2 X3) -> auto_knows_current (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_23_pknows_current. intros X1 X2 X3. intro H. intros.
  elim (rem_1152 X1 X2 X3 H);  intros.
  apply (rem_1151 epsilon_m__def_23_pknows_current X1 X2 X3);  tauto.
Defined.

Remark rem_1154 : forall X1:term, auto___def_23 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1155 : forall X1 X2:term, auto___def_23 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1156 : auto___def_23 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1157 : auto___def_23 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1158 : auto___def_23 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1159 : forall X1 X2:term, auto___def_23 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1160 : forall X1 X2 X3:term, auto___def_23 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1161 : forall X1 X2:term, auto___def_23 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1162 : forall X1:term, auto___def_23 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1163 : forall X1 X2 X3:term, auto___def_23 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1164 : forall X1 X2 X3:term, auto___def_23 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1165 : auto___def_23 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1166 : auto___def_23 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1167 : forall X1 X2:term, auto___def_23 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1168 : auto___def_23 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1169 : auto___def_23 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1170 : auto___def_23 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1171 : forall X1 X2:term, auto___def_23 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1172 : forall X1:term, auto___def_23 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1173 : forall X1 X2:term, auto___def_23 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1174 : auto___def_23 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1175 : auto___def_23 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1176 : forall X1 X2 X3:term, auto___def_23 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1177 : forall X1 X2:term, auto___def_23 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1178 : auto___def_23 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1179 : forall X1:term, auto___def_23 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_23_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1178  H).
   intro H. elim (rem_1174  H).
  intros X1 X2. intro H. elim (rem_1177 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1171 X1 X2 H).
  intros X1 X2 X3;  exact (rem_1153 epsilon_m__def_23_pknows_current X1 X2 X3).
  intros X1 X2. intro H. elim (rem_1167 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1161 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1173 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1159 X1 X2 H).
  intros X1. intro H. elim (rem_1162 X1 H).
   intro H. elim (rem_1157  H).
  intros X1 X2. intro H. elim (rem_1155 X1 X2 H).
  intros X1. intro H. elim (rem_1172 X1 H).
   intro H. elim (rem_1156  H).
  intros X1 X2 X3. intro H. elim (rem_1163 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1176 X1 X2 X3 H).
   intro H. elim (rem_1166  H).
   intro H. elim (rem_1170  H).
   intro H. elim (rem_1169  H).
   intro H. elim (rem_1165  H).
  intros X1. intro H. elim (rem_1154 X1 H).
   intro H. elim (rem_1175  H).
  intros X1 X2 X3. intro H. elim (rem_1164 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1160 X1 X2 X3 H).
   intro H. elim (rem_1168  H).
   intro H. elim (rem_1158  H).
Qed.

Remark rem_1180 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X1:term, auto___def_23 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_15_pknows_current. exact (rem_1179).
Defined.

Remark rem_1181 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_23 X1 -> auto___def_24 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_15_pknows_current. intros X1 X2.
  cut (auto___def_23 X1 -> auto_knows_current X1). tauto. exact (rem_1180 epsilon_m__def_15_pknows_current X1).
Defined.

Remark rem_1182 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X2:term, auto___def_24 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_15_pknows_current. exact (rem_967).
Defined.

Remark rem_1183 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_23 X1 -> auto___def_24 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_15_pknows_current. intros X1 X2.
  cut (auto___def_24 X2 -> auto_knows_current X2). tauto. exact (rem_1182 epsilon_m__def_15_pknows_current X2).
Defined.

Remark rem_1184 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_23 X1 -> auto___def_24 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_15_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1181 epsilon_m__def_15_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1183 epsilon_m__def_15_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1185 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_23 X1 -> auto___def_24 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_15_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1184 epsilon_m__def_15_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_15_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_15_pknows_current A1 A2. tauto.
Defined.

Remark rem_1186 : forall X1 X2:term, auto___def_15 (cons X1 X2) -> or_1
    (auto___def_23 X1 /\ auto___def_24 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1187 : (forall X:term, auto___def_15 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_15 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_15_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1186 X1 X2 H);  intros.
  apply (rem_1185 epsilon_m__def_15_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1188 : forall X1:term, auto___def_15 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1189 : forall X1 X2:term, auto___def_15 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1190 : auto___def_15 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1191 : auto___def_15 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1192 : auto___def_15 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1193 : forall X1 X2:term, auto___def_15 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1194 : forall X1 X2 X3:term, auto___def_15 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1195 : forall X1 X2:term, auto___def_15 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1196 : forall X1:term, auto___def_15 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1197 : forall X1 X2 X3:term, auto___def_15 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1198 : forall X1 X2 X3:term, auto___def_15 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1199 : auto___def_15 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1200 : auto___def_15 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1201 : forall X1 X2:term, auto___def_15 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1202 : auto___def_15 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1203 : auto___def_15 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1204 : auto___def_15 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1205 : forall X1 X2:term, auto___def_15 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1206 : forall X1:term, auto___def_15 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1207 : forall X1 X2:term, auto___def_15 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1208 : auto___def_15 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1209 : auto___def_15 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1210 : forall X1 X2 X3:term, auto___def_15 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1211 : auto___def_15 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1212 : forall X1 X2 X3:term, auto___def_15 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1213 : forall X2:term, auto___def_15 X2 -> auto_knows_current X2. (* Induct. *)
Proof.
  fix epsilon_m__def_15_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1211  H).
   intro H. elim (rem_1208  H).
  intros X1 X2;  exact (rem_1187 epsilon_m__def_15_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1205 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1212 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1201 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1195 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1207 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1193 X1 X2 H).
  intros X1. intro H. elim (rem_1196 X1 H).
   intro H. elim (rem_1191  H).
  intros X1 X2. intro H. elim (rem_1189 X1 X2 H).
  intros X1. intro H. elim (rem_1206 X1 H).
   intro H. elim (rem_1190  H).
  intros X1 X2 X3. intro H. elim (rem_1197 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1210 X1 X2 X3 H).
   intro H. elim (rem_1200  H).
   intro H. elim (rem_1204  H).
   intro H. elim (rem_1203  H).
   intro H. elim (rem_1199  H).
  intros X1. intro H. elim (rem_1188 X1 H).
   intro H. elim (rem_1209  H).
  intros X1 X2 X3. intro H. elim (rem_1198 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1194 X1 X2 X3 H).
   intro H. elim (rem_1202  H).
   intro H. elim (rem_1192  H).
Qed.

Remark rem_1214 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X2:term, auto___def_15 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_12_pknows_current. exact (rem_1213).
Defined.

Remark rem_1215 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_14 X1 -> auto___def_15 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_12_pknows_current. intros X1 X2.
  cut (auto___def_15 X2 -> auto_knows_current X2). tauto. exact (rem_1214 epsilon_m__def_12_pknows_current X2).
Defined.

Remark rem_1216 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_14 X1 -> auto___def_15 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_12_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1143 epsilon_m__def_12_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1215 epsilon_m__def_12_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1217 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_14 X1 -> auto___def_15 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_12_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1216 epsilon_m__def_12_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_12_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_12_pknows_current A1 A2. tauto.
Defined.

Remark rem_1218 : forall X1 X2:term, auto___def_12 (cons X1 X2) -> or_1
    (auto___def_14 X1 /\ auto___def_15 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1219 : (forall X:term, auto___def_12 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_12 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_12_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1218 X1 X2 H);  intros.
  apply (rem_1217 epsilon_m__def_12_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1220 : forall X1:term, auto___def_12 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1221 : forall X1 X2:term, auto___def_12 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1222 : auto___def_12 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1223 : auto___def_12 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1224 : auto___def_12 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1225 : forall X1 X2:term, auto___def_12 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1226 : forall X1 X2 X3:term, auto___def_12 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1227 : forall X1 X2:term, auto___def_12 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1228 : forall X1:term, auto___def_12 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1229 : forall X1 X2 X3:term, auto___def_12 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1230 : forall X1 X2 X3:term, auto___def_12 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1231 : auto___def_12 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1232 : auto___def_12 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1233 : forall X1 X2:term, auto___def_12 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1234 : auto___def_12 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1235 : auto___def_12 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1236 : auto___def_12 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1237 : forall X1 X2:term, auto___def_12 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1238 : forall X1:term, auto___def_12 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1239 : forall X1 X2:term, auto___def_12 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1240 : auto___def_12 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1241 : auto___def_12 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1242 : forall X1 X2 X3:term, auto___def_12 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1243 : auto___def_12 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1244 : forall X1 X2 X3:term, auto___def_12 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1245 : forall X1:term, auto___def_12 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_12_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1243  H).
   intro H. elim (rem_1240  H).
  intros X1 X2;  exact (rem_1219 epsilon_m__def_12_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1237 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1244 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1233 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1227 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1239 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1225 X1 X2 H).
  intros X1. intro H. elim (rem_1228 X1 H).
   intro H. elim (rem_1223  H).
  intros X1 X2. intro H. elim (rem_1221 X1 X2 H).
  intros X1. intro H. elim (rem_1238 X1 H).
   intro H. elim (rem_1222  H).
  intros X1 X2 X3. intro H. elim (rem_1229 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1242 X1 X2 X3 H).
   intro H. elim (rem_1232  H).
   intro H. elim (rem_1236  H).
   intro H. elim (rem_1235  H).
   intro H. elim (rem_1231  H).
  intros X1. intro H. elim (rem_1220 X1 H).
   intro H. elim (rem_1241  H).
  intros X1 X2 X3. intro H. elim (rem_1230 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1226 X1 X2 X3 H).
   intro H. elim (rem_1234  H).
   intro H. elim (rem_1224  H).
Qed.

Remark rem_1246 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X1:term, auto___def_12 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_34_pknows_current. exact (rem_1245).
Defined.

Remark rem_1247 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_12 X1 -> auto___def_24 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_34_pknows_current. intros X1 X2.
  cut (auto___def_12 X1 -> auto_knows_current X1). tauto. exact (rem_1246 epsilon_m__def_34_pknows_current X1).
Defined.

Remark rem_1248 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X2:term, auto___def_24 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_34_pknows_current. exact (rem_967).
Defined.

Remark rem_1249 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_12 X1 -> auto___def_24 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_34_pknows_current. intros X1 X2.
  cut (auto___def_24 X2 -> auto_knows_current X2). tauto. exact (rem_1248 epsilon_m__def_34_pknows_current X2).
Defined.

Remark rem_1250 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_12 X1 -> auto___def_24 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_34_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1247 epsilon_m__def_34_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1249 epsilon_m__def_34_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1251 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_12 X1 -> auto___def_24 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_34_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1250 epsilon_m__def_34_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_34_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_34_pknows_current A1 A2. tauto.
Defined.

Remark rem_1252 : forall X1 X2:term, auto___def_34 (cons X1 X2) -> or_1
    (auto___def_12 X1 /\ auto___def_24 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1253 : (forall X:term, auto___def_34 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_34 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_34_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1252 X1 X2 H);  intros.
  apply (rem_1251 epsilon_m__def_34_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1254 : forall X1:term, auto___def_34 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1255 : forall X1 X2:term, auto___def_34 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1256 : auto___def_34 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1257 : auto___def_34 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1258 : auto___def_34 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1259 : forall X1 X2:term, auto___def_34 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1260 : forall X1 X2 X3:term, auto___def_34 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1261 : forall X1 X2:term, auto___def_34 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1262 : forall X1:term, auto___def_34 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1263 : forall X1 X2 X3:term, auto___def_34 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1264 : forall X1 X2 X3:term, auto___def_34 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1265 : auto___def_34 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1266 : auto___def_34 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1267 : forall X1 X2:term, auto___def_34 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1268 : auto___def_34 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1269 : auto___def_34 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1270 : auto___def_34 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1271 : forall X1 X2:term, auto___def_34 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1272 : forall X1:term, auto___def_34 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1273 : forall X1 X2:term, auto___def_34 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1274 : auto___def_34 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1275 : auto___def_34 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1276 : forall X1 X2 X3:term, auto___def_34 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1277 : auto___def_34 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1278 : forall X1 X2 X3:term, auto___def_34 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1279 : forall X2:term, auto___def_34 X2 -> auto_knows_current X2. (* Induct. *)
Proof.
  fix epsilon_m__def_34_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1277  H).
   intro H. elim (rem_1274  H).
  intros X1 X2;  exact (rem_1253 epsilon_m__def_34_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1271 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1278 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1267 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1261 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1273 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1259 X1 X2 H).
  intros X1. intro H. elim (rem_1262 X1 H).
   intro H. elim (rem_1257  H).
  intros X1 X2. intro H. elim (rem_1255 X1 X2 H).
  intros X1. intro H. elim (rem_1272 X1 H).
   intro H. elim (rem_1256  H).
  intros X1 X2 X3. intro H. elim (rem_1263 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1276 X1 X2 X3 H).
   intro H. elim (rem_1266  H).
   intro H. elim (rem_1270  H).
   intro H. elim (rem_1269  H).
   intro H. elim (rem_1265  H).
  intros X1. intro H. elim (rem_1254 X1 H).
   intro H. elim (rem_1275  H).
  intros X1 X2 X3. intro H. elim (rem_1264 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1260 X1 X2 X3 H).
   intro H. elim (rem_1268  H).
   intro H. elim (rem_1258  H).
Qed.

Remark rem_1280 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X2:term, auto___def_34 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_28_pknows_current. exact (rem_1279).
Defined.

Remark rem_1281 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_10 X1 -> auto___def_34 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_28_pknows_current. intros X1 X2.
  cut (auto___def_34 X2 -> auto_knows_current X2). tauto. exact (rem_1280 epsilon_m__def_28_pknows_current X2).
Defined.

Remark rem_1282 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_10 X1 -> auto___def_34 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_28_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1107 epsilon_m__def_28_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1281 epsilon_m__def_28_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1283 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_10 X1 -> auto___def_34 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_28_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1282 epsilon_m__def_28_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_28_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_28_pknows_current A1 A2. tauto.
Defined.

Remark rem_1284 : forall X1 X2:term, auto___def_28 (cons X1 X2) -> or_1
    (auto___def_10 X1 /\ auto___def_34 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1285 : (forall X:term, auto___def_28 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_28 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_28_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1284 X1 X2 H);  intros.
  apply (rem_1283 epsilon_m__def_28_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1286 : forall X1:term, auto___def_28 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1287 : forall X1 X2:term, auto___def_28 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1288 : auto___def_28 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1289 : auto___def_28 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1290 : auto___def_28 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1291 : forall X1 X2:term, auto___def_28 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1292 : forall X1 X2 X3:term, auto___def_28 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1293 : forall X1 X2:term, auto___def_28 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1294 : forall X1:term, auto___def_28 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1295 : forall X1 X2 X3:term, auto___def_28 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1296 : forall X1 X2 X3:term, auto___def_28 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1297 : auto___def_28 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1298 : auto___def_28 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1299 : forall X1 X2:term, auto___def_28 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1300 : auto___def_28 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1301 : auto___def_28 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1302 : auto___def_28 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1303 : forall X1 X2:term, auto___def_28 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1304 : forall X1:term, auto___def_28 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1305 : forall X1 X2:term, auto___def_28 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1306 : auto___def_28 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1307 : auto___def_28 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1308 : forall X1 X2 X3:term, auto___def_28 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1309 : auto___def_28 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1310 : forall X1 X2 X3:term, auto___def_28 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1311 : forall X2:term, auto___def_28 X2 -> auto_knows_current X2. (* Induct. *)
Proof.
  fix epsilon_m__def_28_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1309  H).
   intro H. elim (rem_1306  H).
  intros X1 X2;  exact (rem_1285 epsilon_m__def_28_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1303 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1310 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1299 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1293 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1305 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1291 X1 X2 H).
  intros X1. intro H. elim (rem_1294 X1 H).
   intro H. elim (rem_1289  H).
  intros X1 X2. intro H. elim (rem_1287 X1 X2 H).
  intros X1. intro H. elim (rem_1304 X1 H).
   intro H. elim (rem_1288  H).
  intros X1 X2 X3. intro H. elim (rem_1295 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1308 X1 X2 X3 H).
   intro H. elim (rem_1298  H).
   intro H. elim (rem_1302  H).
   intro H. elim (rem_1301  H).
   intro H. elim (rem_1297  H).
  intros X1. intro H. elim (rem_1286 X1 H).
   intro H. elim (rem_1307  H).
  intros X1 X2 X3. intro H. elim (rem_1296 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1292 X1 X2 X3 H).
   intro H. elim (rem_1300  H).
   intro H. elim (rem_1290  H).
Qed.

Remark rem_1312 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_28 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. exact (rem_1311).
Defined.

Remark rem_1313 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_28 X2 -> auto_knows_current X2). tauto. exact (rem_1312 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1314 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1095 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1313 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1315 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1314 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1316 : forall X1 X2:term, auto___def_26 (cons X1 X2) -> or_1
    (auto___def_27 X1 /\ auto___def_28 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1317 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_26 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_1316 X1 X2 H);  intros.
  apply (rem_1315 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_1318 : forall X1:term, auto___def_26 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1319 : forall X1 X2:term, auto___def_26 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1320 : auto___def_26 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1321 : auto___def_26 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1322 : auto___def_26 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1323 : forall X1 X2:term, auto___def_26 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1324 : forall X1 X2 X3:term, auto___def_26 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1325 : forall X1 X2:term, auto___def_26 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1326 : forall X1:term, auto___def_26 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1327 : forall X1 X2 X3:term, auto___def_26 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1328 : forall X1 X2 X3:term, auto___def_26 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1329 : auto___def_26 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1330 : auto___def_26 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1331 : forall X1 X2:term, auto___def_26 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1332 : auto___def_26 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1333 : auto___def_26 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1334 : auto___def_26 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1335 : forall X1 X2:term, auto___def_26 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1336 : forall X1:term, auto___def_26 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1337 : forall X1 X2:term, auto___def_26 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1338 : auto___def_26 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1339 : auto___def_26 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1340 : forall X1 X2 X3:term, auto___def_26 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1341 : auto___def_26 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1342 : forall X1 X2 X3:term, auto___def_26 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1343 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__def_26_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1341  H).
   intro H. elim (rem_1338  H).
  intros X1 X2;  exact (rem_1317 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2. intro H. elim (rem_1335 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1342 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1331 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1325 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1337 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1323 X1 X2 H).
  intros X1. intro H. elim (rem_1326 X1 H).
   intro H. elim (rem_1321  H).
  intros X1 X2. intro H. elim (rem_1319 X1 X2 H).
  intros X1. intro H. elim (rem_1336 X1 H).
   intro H. elim (rem_1320  H).
  intros X1 X2 X3. intro H. elim (rem_1327 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1340 X1 X2 X3 H).
   intro H. elim (rem_1330  H).
   intro H. elim (rem_1334  H).
   intro H. elim (rem_1333  H).
   intro H. elim (rem_1329  H).
  intros X1. intro H. elim (rem_1318 X1 H).
   intro H. elim (rem_1339  H).
  intros X1 X2 X3. intro H. elim (rem_1328 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1324 X1 X2 X3 H).
   intro H. elim (rem_1332  H).
   intro H. elim (rem_1322  H).
Defined.

Remark rem_1344 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. exact (rem_1343 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109).
Defined.

Remark rem_1345 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_1344 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_1346 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_26 X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_1345 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. intros. apply trans___type_16_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_1347 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_40 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. intros. apply trans___type_16_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_1348 : forall X1:term, auto___type_6 (h X1) -> or_3
    (auto___def_44 X1)    (auto___def_26 X1)    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_1349 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_6 (h X1) -> auto___type_16 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_1348 X1 H);  intros.
  apply (rem_50 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  tauto.
  apply (rem_1346 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  tauto.
  apply (rem_1347 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_1350 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_16 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109.  case (rem_44 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros. apply trans___type_16_respond_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_1351 : auto___type_6 respond_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1352 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_6 respond_id -> auto___type_16 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_1351 H);  intros.
  apply (rem_1350 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_1353 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. exact (rem_305).
Defined.

Remark rem_1354 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_1353 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1355 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. exact (rem_343).
Defined.

Remark rem_1356 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_1355 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1357 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_1354 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_1356 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1358 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_16 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1357 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans___type_16_f2_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1359 : forall X1 X2:term, auto___type_6 (f2 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1360 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_6 (f2 X1 X2) -> auto___type_16 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_1359 X1 X2 H);  intros.
  apply (rem_1358 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_1361 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_16 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109.  case (rem_44 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros. apply trans___type_16_success_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_1362 : auto___type_6 success -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1363 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_6 success -> auto___type_16 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_1362 H);  intros.
  apply (rem_1361 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_1364 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_16 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109.  case (rem_44 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros. apply trans___type_16_request_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. tauto.
Defined.

Remark rem_1365 : auto___type_6 request_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1366 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> auto___type_6 request_id -> auto___type_16 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intro H. intros.
  elim (rem_1365 H);  intros.
  apply (rem_1364 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109);  tauto.
Defined.

Remark rem_1367 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1368 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_1367 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1369 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1370 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_1369 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1371 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_1368 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_1370 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1372 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1371 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans___type_16_crypt_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1373 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (rem_39 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1374 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_current X2. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intro H. clear H. intro H. clear H. intros X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (Hrec X2).
Defined.

Remark rem_1375 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (rem_1374 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1376 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1373 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1375 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1377 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1376 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans___type_16_crypt_2;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1378 : forall X1 X2:term, auto___type_6 (crypt X1 X2) -> or_2
    (auto___def_16 X1 /\ auto___def_17 X2)
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_2_intro_1; tauto.
  intros. apply or_2_intro_2; tauto.
Qed.

Remark rem_1379 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_6 (crypt X1 X2) -> auto___type_16 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_1378 X1 X2 H);  intros.
  apply (rem_1372 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  tauto.
  apply (rem_1377 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_1380 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1381 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_1380 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  assumption.
  tauto.
Defined.

Remark rem_1382 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto_agent X1 -> auto___type_16 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intros A1.
  case (rem_1381 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. intros. apply trans___type_16_nai_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1. tauto.
Defined.

Remark rem_1383 : forall X1:term, auto___type_6 (nai X1) -> or_1
    (auto_agent X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1384 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_6 (nai X1) -> auto___type_16 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1. intro H. intros.
  elim (rem_1383 X1 H);  intros.
  apply (rem_1382 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1);  tauto.
Defined.

Remark rem_1385 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1386 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_1385 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1387 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1388 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_1387 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1389 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1390 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_1389 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X3).
Defined.

Remark rem_1391 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_1386 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_1388 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_1390 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1392 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1391 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2 A3. intros. apply trans___type_16_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2 A3. tauto.
Defined.

Remark rem_1393 : forall X1 X2 X3:term, auto___type_6 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1394 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___type_6 (nonces_old X1 X2 X3) -> auto___type_16 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3. intro H. intros.
  elim (rem_1393 X1 X2 X3 H);  intros.
  apply (rem_1392 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  tauto.
Defined.

Remark rem_1395 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_16 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1376 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans___type_16_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1396 : forall X1 X2:term, auto___type_6 (cons X1 X2) -> or_1
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1397 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___type_6 (cons X1 X2) -> auto___type_16 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_1396 X1 X2 H);  intros.
  apply (rem_1395 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_1398 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1399 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_1398 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1400 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1401 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_1400 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1402 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1403 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_1402 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X3).
Defined.

Remark rem_1404 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_1399 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_1401 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_1403 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1405 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_16 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1404 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2 A3. intros. apply trans___type_16_f1_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 A1 A2 A3. tauto.
Defined.

Remark rem_1406 : forall X1 X2 X3:term, auto___type_6 (f1 X1 X2 X3) -> or_1
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1407 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_6 X -> auto___type_16 X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2 X3:term, auto___type_6 (f1 X1 X2 X3) -> auto___type_16 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109. intros X1 X2 X3. intro H. intros.
  elim (rem_1406 X1 X2 X3 H);  intros.
  apply (rem_1405 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3);  tauto.
Defined.

Remark rem_1408 : forall X1 X2:term, auto___type_6 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1409 : auto___type_6 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1410 : auto___type_6 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1411 : forall X1 X2:term, auto___type_6 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1412 : forall X1 X2 X3:term, auto___type_6 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1413 : forall X1 X2:term, auto___type_6 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1414 : forall X1 X2 X3:term, auto___type_6 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1415 : forall X1 X2 X3:term, auto___type_6 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1416 : auto___type_6 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1417 : auto___type_6 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1418 : forall X1 X2:term, auto___type_6 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1419 : auto___type_6 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1420 : auto___type_6 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1421 : auto___type_6 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1422 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___type_6 X1 -> auto___type_16 X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__type_6_p__type_16 1.
  intro X. case X.
   intro H. elim (rem_1421  H).
   intro H. elim (rem_1419  H).
  intros X1 X2;  exact (rem_1397 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2;  exact (rem_1379 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2 X3;  exact (rem_1407 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3).
  intros X1 X2;  exact (rem_1360 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2. intro H. elim (rem_1413 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1418 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1411 X1 X2 H).
  intros X1;  exact (rem_1349 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
   intro H. elim (rem_1409  H).
  intros X1 X2. intro H. elim (rem_1408 X1 X2 H).
  intros X1;  exact (rem_1384 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
  exact (rem_47 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 ).
  intros X1 X2 X3. intro H. elim (rem_1414 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_1394 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1 X2 X3).
   intro H. elim (rem_1416  H).
   intro H. elim (rem_1417  H).
  exact (rem_1366 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 ).
  exact (rem_1352 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 ).
  intros X1;  exact (rem_43 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 X1).
   intro H. elim (rem_1420  H).
  intros X1 X2 X3. intro H. elim (rem_1415 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1412 X1 X2 X3 H).
  exact (rem_1363 epsilon_mknows_old_pknows_current epsilon_m__type_6_p__type_16 epsilon_m__def_44_p__def_109 ).
   intro H. elim (rem_1410  H).
Defined.

Remark rem_1423 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X1:term, auto___type_6 X1 -> auto___type_16 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. exact (rem_1422 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109).
Defined.

Remark rem_1424 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X1 X2:term, auto___type_6 X1 -> auto___def_48 X2 -> auto___type_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. intros X1 X2.
  cut (auto___type_6 X1 -> auto___type_16 X1). tauto. exact (rem_1423 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X1).
Defined.

Remark rem_1425 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_49_p__def_114. exact (rem_305).
Defined.

Remark rem_1426 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_49_p__def_114. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_1425 epsilon_m__def_49_p__def_114 X1).
Defined.

Remark rem_1427 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_49_p__def_114. exact (rem_343).
Defined.

Remark rem_1428 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_49_p__def_114. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_1427 epsilon_m__def_49_p__def_114 X2).
Defined.

Remark rem_1429 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_49_p__def_114. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_1426 epsilon_m__def_49_p__def_114 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_1428 epsilon_m__def_49_p__def_114 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1430 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_114 (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_49_p__def_114. intros X1 X2. intros A1 A2.
  case (rem_1429 epsilon_m__def_49_p__def_114 X1 X2 A1 A2). clear  epsilon_m__def_49_p__def_114 A1 A2. intros. apply trans___def_114_f4_1;  tauto.
 clear  epsilon_m__def_49_p__def_114 A1 A2. tauto.
Defined.

Remark rem_1431 : forall X1 X2:term, auto___def_49 (f4 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1432 : (forall X:term, auto___def_49 X -> auto___def_114 X)
    -> forall X1 X2:term, auto___def_49 (f4 X1 X2) -> auto___def_114 (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_49_p__def_114. intros X1 X2. intro H. intros.
  elim (rem_1431 X1 X2 H);  intros.
  apply (rem_1430 epsilon_m__def_49_p__def_114 X1 X2);  tauto.
Defined.

Remark rem_1433 : forall X1:term, auto___def_49 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1434 : forall X1 X2:term, auto___def_49 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1435 : auto___def_49 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1436 : auto___def_49 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1437 : auto___def_49 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1438 : forall X1 X2:term, auto___def_49 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1439 : forall X1 X2 X3:term, auto___def_49 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1440 : forall X1 X2:term, auto___def_49 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1441 : forall X1:term, auto___def_49 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1442 : forall X1 X2 X3:term, auto___def_49 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1443 : forall X1 X2 X3:term, auto___def_49 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1444 : auto___def_49 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1445 : auto___def_49 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1446 : forall X1 X2:term, auto___def_49 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1447 : auto___def_49 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1448 : auto___def_49 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1449 : auto___def_49 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1450 : forall X1 X2:term, auto___def_49 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1451 : forall X1:term, auto___def_49 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1452 : auto___def_49 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1453 : auto___def_49 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1454 : forall X1 X2 X3:term, auto___def_49 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1455 : forall X1 X2:term, auto___def_49 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1456 : auto___def_49 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1457 : forall X1 X2 X3:term, auto___def_49 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1458 : forall X1:term, auto___def_49 X1 -> auto___def_114 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_49_p__def_114 1.
  intro X. case X.
   intro H. elim (rem_1456  H).
   intro H. elim (rem_1452  H).
  intros X1 X2. intro H. elim (rem_1455 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1450 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1457 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1446 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1440 X1 X2 H).
  intros X1 X2;  exact (rem_1432 epsilon_m__def_49_p__def_114 X1 X2).
  intros X1 X2. intro H. elim (rem_1438 X1 X2 H).
  intros X1. intro H. elim (rem_1441 X1 H).
   intro H. elim (rem_1436  H).
  intros X1 X2. intro H. elim (rem_1434 X1 X2 H).
  intros X1. intro H. elim (rem_1451 X1 H).
   intro H. elim (rem_1435  H).
  intros X1 X2 X3. intro H. elim (rem_1442 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1454 X1 X2 X3 H).
   intro H. elim (rem_1445  H).
   intro H. elim (rem_1449  H).
   intro H. elim (rem_1448  H).
   intro H. elim (rem_1444  H).
  intros X1. intro H. elim (rem_1433 X1 H).
   intro H. elim (rem_1453  H).
  intros X1 X2 X3. intro H. elim (rem_1443 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1439 X1 X2 X3 H).
   intro H. elim (rem_1447  H).
   intro H. elim (rem_1437  H).
Qed.

Remark rem_1459 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X1:term, auto___def_49 X1 -> auto___def_114 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_48_p__def_113. exact (rem_1458).
Defined.

Remark rem_1460 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X1 X2:term, auto___def_49 X1 -> auto___def_50 X2 -> auto___def_114 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_48_p__def_113. intros X1 X2.
  cut (auto___def_49 X1 -> auto___def_114 X1). tauto. exact (rem_1459 epsilon_m__def_48_p__def_113 X1).
Defined.

Remark rem_1461 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_51_p__def_116. exact (rem_305).
Defined.

Remark rem_1462 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_51_p__def_116. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_1461 epsilon_m__def_51_p__def_116 X1).
Defined.

Remark rem_1463 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_51_p__def_116. exact (rem_343).
Defined.

Remark rem_1464 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_51_p__def_116. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_1463 epsilon_m__def_51_p__def_116 X2).
Defined.

Remark rem_1465 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_51_p__def_116. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_1462 epsilon_m__def_51_p__def_116 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_1464 epsilon_m__def_51_p__def_116 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1466 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_116 (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_51_p__def_116. intros X1 X2. intros A1 A2.
  case (rem_1465 epsilon_m__def_51_p__def_116 X1 X2 A1 A2). clear  epsilon_m__def_51_p__def_116 A1 A2. intros. apply trans___def_116_f3_1;  tauto.
 clear  epsilon_m__def_51_p__def_116 A1 A2. tauto.
Defined.

Remark rem_1467 : forall X1 X2:term, auto___def_51 (f3 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1468 : (forall X:term, auto___def_51 X -> auto___def_116 X)
    -> forall X1 X2:term, auto___def_51 (f3 X1 X2) -> auto___def_116 (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_51_p__def_116. intros X1 X2. intro H. intros.
  elim (rem_1467 X1 X2 H);  intros.
  apply (rem_1466 epsilon_m__def_51_p__def_116 X1 X2);  tauto.
Defined.

Remark rem_1469 : forall X1:term, auto___def_51 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1470 : forall X1 X2:term, auto___def_51 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1471 : auto___def_51 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1472 : auto___def_51 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1473 : auto___def_51 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1474 : forall X1 X2:term, auto___def_51 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1475 : forall X1 X2 X3:term, auto___def_51 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1476 : forall X1:term, auto___def_51 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1477 : forall X1 X2 X3:term, auto___def_51 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1478 : forall X1 X2 X3:term, auto___def_51 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1479 : auto___def_51 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1480 : auto___def_51 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1481 : forall X1 X2:term, auto___def_51 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1482 : auto___def_51 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1483 : auto___def_51 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1484 : auto___def_51 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1485 : forall X1 X2:term, auto___def_51 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1486 : forall X1:term, auto___def_51 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1487 : forall X1 X2:term, auto___def_51 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1488 : auto___def_51 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1489 : auto___def_51 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1490 : forall X1 X2 X3:term, auto___def_51 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1491 : forall X1 X2:term, auto___def_51 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1492 : auto___def_51 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1493 : forall X1 X2 X3:term, auto___def_51 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1494 : forall X1:term, auto___def_51 X1 -> auto___def_116 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_51_p__def_116 1.
  intro X. case X.
   intro H. elim (rem_1492  H).
   intro H. elim (rem_1488  H).
  intros X1 X2. intro H. elim (rem_1491 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1485 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1493 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1481 X1 X2 H).
  intros X1 X2;  exact (rem_1468 epsilon_m__def_51_p__def_116 X1 X2).
  intros X1 X2. intro H. elim (rem_1487 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1474 X1 X2 H).
  intros X1. intro H. elim (rem_1476 X1 H).
   intro H. elim (rem_1472  H).
  intros X1 X2. intro H. elim (rem_1470 X1 X2 H).
  intros X1. intro H. elim (rem_1486 X1 H).
   intro H. elim (rem_1471  H).
  intros X1 X2 X3. intro H. elim (rem_1477 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1490 X1 X2 X3 H).
   intro H. elim (rem_1480  H).
   intro H. elim (rem_1484  H).
   intro H. elim (rem_1483  H).
   intro H. elim (rem_1479  H).
  intros X1. intro H. elim (rem_1469 X1 H).
   intro H. elim (rem_1489  H).
  intros X1 X2 X3. intro H. elim (rem_1478 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1475 X1 X2 X3 H).
   intro H. elim (rem_1482  H).
   intro H. elim (rem_1473  H).
Qed.

Remark rem_1495 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X1:term, auto___def_51 X1 -> auto___def_116 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_50_p__def_115. exact (rem_1494).
Defined.

Remark rem_1496 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X1 X2:term, auto___def_51 X1 -> auto___def_42 X2 -> auto___def_116 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_50_p__def_115. intros X1 X2.
  cut (auto___def_51 X1 -> auto___def_116 X1). tauto. exact (rem_1495 epsilon_m__def_50_p__def_115 X1).
Defined.

Remark rem_1497 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X2:term, auto___def_42 X2 -> auto___def_107 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_50_p__def_115. exact (rem_209).
Defined.

Remark rem_1498 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X1 X2:term, auto___def_51 X1 -> auto___def_42 X2 -> auto___def_107 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_50_p__def_115. intros X1 X2.
  cut (auto___def_42 X2 -> auto___def_107 X2). tauto. exact (rem_1497 epsilon_m__def_50_p__def_115 X2).
Defined.

Remark rem_1499 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X1 X2:term, auto___def_51 X1 -> auto___def_42 X2 -> (auto___def_116 X1 /\ auto___def_107 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_50_p__def_115. intros X1 X2. intros A1 A2.
  cut (auto___def_116 X1). 2:apply (rem_1496 epsilon_m__def_50_p__def_115 X1 X2);  assumption.
  cut (auto___def_107 X2). 2:apply (rem_1498 epsilon_m__def_50_p__def_115 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1500 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X1 X2:term, auto___def_51 X1 -> auto___def_42 X2 -> auto___def_115 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_50_p__def_115. intros X1 X2. intros A1 A2.
  case (rem_1499 epsilon_m__def_50_p__def_115 X1 X2 A1 A2). clear  epsilon_m__def_50_p__def_115 A1 A2. intros. apply trans___def_115_cons_1;  tauto.
 clear  epsilon_m__def_50_p__def_115 A1 A2. tauto.
Defined.

Remark rem_1501 : forall X1 X2:term, auto___def_50 (cons X1 X2) -> or_1
    (auto___def_51 X1 /\ auto___def_42 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1502 : (forall X:term, auto___def_50 X -> auto___def_115 X)
    -> forall X1 X2:term, auto___def_50 (cons X1 X2) -> auto___def_115 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_50_p__def_115. intros X1 X2. intro H. intros.
  elim (rem_1501 X1 X2 H);  intros.
  apply (rem_1500 epsilon_m__def_50_p__def_115 X1 X2);  tauto.
Defined.

Remark rem_1503 : forall X1:term, auto___def_50 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1504 : forall X1 X2:term, auto___def_50 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1505 : auto___def_50 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1506 : auto___def_50 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1507 : auto___def_50 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1508 : forall X1 X2:term, auto___def_50 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1509 : forall X1 X2 X3:term, auto___def_50 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1510 : forall X1 X2:term, auto___def_50 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1511 : forall X1:term, auto___def_50 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1512 : forall X1 X2 X3:term, auto___def_50 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1513 : forall X1 X2 X3:term, auto___def_50 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1514 : auto___def_50 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1515 : auto___def_50 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1516 : forall X1 X2:term, auto___def_50 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1517 : auto___def_50 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1518 : auto___def_50 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1519 : auto___def_50 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1520 : forall X1 X2:term, auto___def_50 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1521 : forall X1:term, auto___def_50 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1522 : forall X1 X2:term, auto___def_50 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1523 : auto___def_50 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1524 : auto___def_50 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1525 : forall X1 X2 X3:term, auto___def_50 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1526 : auto___def_50 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1527 : forall X1 X2 X3:term, auto___def_50 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1528 : forall X2:term, auto___def_50 X2 -> auto___def_115 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_50_p__def_115 1.
  intro X. case X.
   intro H. elim (rem_1526  H).
   intro H. elim (rem_1523  H).
  intros X1 X2;  exact (rem_1502 epsilon_m__def_50_p__def_115 X1 X2).
  intros X1 X2. intro H. elim (rem_1520 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1527 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1516 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1510 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1522 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1508 X1 X2 H).
  intros X1. intro H. elim (rem_1511 X1 H).
   intro H. elim (rem_1506  H).
  intros X1 X2. intro H. elim (rem_1504 X1 X2 H).
  intros X1. intro H. elim (rem_1521 X1 H).
   intro H. elim (rem_1505  H).
  intros X1 X2 X3. intro H. elim (rem_1512 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1525 X1 X2 X3 H).
   intro H. elim (rem_1515  H).
   intro H. elim (rem_1519  H).
   intro H. elim (rem_1518  H).
   intro H. elim (rem_1514  H).
  intros X1. intro H. elim (rem_1503 X1 H).
   intro H. elim (rem_1524  H).
  intros X1 X2 X3. intro H. elim (rem_1513 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1509 X1 X2 X3 H).
   intro H. elim (rem_1517  H).
   intro H. elim (rem_1507  H).
Qed.

Remark rem_1529 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X2:term, auto___def_50 X2 -> auto___def_115 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_48_p__def_113. exact (rem_1528).
Defined.

Remark rem_1530 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X1 X2:term, auto___def_49 X1 -> auto___def_50 X2 -> auto___def_115 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_48_p__def_113. intros X1 X2.
  cut (auto___def_50 X2 -> auto___def_115 X2). tauto. exact (rem_1529 epsilon_m__def_48_p__def_113 X2).
Defined.

Remark rem_1531 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X1 X2:term, auto___def_49 X1 -> auto___def_50 X2 -> (auto___def_114 X1 /\ auto___def_115 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_48_p__def_113. intros X1 X2. intros A1 A2.
  cut (auto___def_114 X1). 2:apply (rem_1460 epsilon_m__def_48_p__def_113 X1 X2);  assumption.
  cut (auto___def_115 X2). 2:apply (rem_1530 epsilon_m__def_48_p__def_113 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1532 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X1 X2:term, auto___def_49 X1 -> auto___def_50 X2 -> auto___def_113 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_48_p__def_113. intros X1 X2. intros A1 A2.
  case (rem_1531 epsilon_m__def_48_p__def_113 X1 X2 A1 A2). clear  epsilon_m__def_48_p__def_113 A1 A2. intros. apply trans___def_113_cons_1;  tauto.
 clear  epsilon_m__def_48_p__def_113 A1 A2. tauto.
Defined.

Remark rem_1533 : forall X1 X2:term, auto___def_48 (cons X1 X2) -> or_1
    (auto___def_49 X1 /\ auto___def_50 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1534 : (forall X:term, auto___def_48 X -> auto___def_113 X)
    -> forall X1 X2:term, auto___def_48 (cons X1 X2) -> auto___def_113 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_48_p__def_113. intros X1 X2. intro H. intros.
  elim (rem_1533 X1 X2 H);  intros.
  apply (rem_1532 epsilon_m__def_48_p__def_113 X1 X2);  tauto.
Defined.

Remark rem_1535 : forall X1:term, auto___def_48 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1536 : forall X1 X2:term, auto___def_48 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1537 : auto___def_48 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1538 : auto___def_48 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1539 : auto___def_48 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1540 : forall X1 X2:term, auto___def_48 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1541 : forall X1 X2 X3:term, auto___def_48 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1542 : forall X1 X2:term, auto___def_48 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1543 : forall X1:term, auto___def_48 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1544 : forall X1 X2 X3:term, auto___def_48 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1545 : forall X1 X2 X3:term, auto___def_48 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1546 : auto___def_48 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1547 : auto___def_48 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1548 : forall X1 X2:term, auto___def_48 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1549 : auto___def_48 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1550 : auto___def_48 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1551 : auto___def_48 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1552 : forall X1 X2:term, auto___def_48 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1553 : forall X1:term, auto___def_48 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1554 : forall X1 X2:term, auto___def_48 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1555 : auto___def_48 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1556 : auto___def_48 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1557 : forall X1 X2 X3:term, auto___def_48 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1558 : auto___def_48 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1559 : forall X1 X2 X3:term, auto___def_48 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1560 : forall X2:term, auto___def_48 X2 -> auto___def_113 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_48_p__def_113 1.
  intro X. case X.
   intro H. elim (rem_1558  H).
   intro H. elim (rem_1555  H).
  intros X1 X2;  exact (rem_1534 epsilon_m__def_48_p__def_113 X1 X2).
  intros X1 X2. intro H. elim (rem_1552 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1559 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1548 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1542 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1554 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1540 X1 X2 H).
  intros X1. intro H. elim (rem_1543 X1 H).
   intro H. elim (rem_1538  H).
  intros X1 X2. intro H. elim (rem_1536 X1 X2 H).
  intros X1. intro H. elim (rem_1553 X1 H).
   intro H. elim (rem_1537  H).
  intros X1 X2 X3. intro H. elim (rem_1544 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1557 X1 X2 X3 H).
   intro H. elim (rem_1547  H).
   intro H. elim (rem_1551  H).
   intro H. elim (rem_1550  H).
   intro H. elim (rem_1546  H).
  intros X1. intro H. elim (rem_1535 X1 H).
   intro H. elim (rem_1556  H).
  intros X1 X2 X3. intro H. elim (rem_1545 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1541 X1 X2 X3 H).
   intro H. elim (rem_1549  H).
   intro H. elim (rem_1539  H).
Qed.

Remark rem_1561 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X2:term, auto___def_48 X2 -> auto___def_113 X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. exact (rem_1560).
Defined.

Remark rem_1562 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X1 X2:term, auto___type_6 X1 -> auto___def_48 X2 -> auto___def_113 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. intros X1 X2.
  cut (auto___def_48 X2 -> auto___def_113 X2). tauto. exact (rem_1561 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X2).
Defined.

Remark rem_1563 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X1 X2:term, auto___type_6 X1 -> auto___def_48 X2 -> (auto___type_16 X1 /\ auto___def_113 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. intros X1 X2. intros A1 A2.
  cut (auto___type_16 X1). 2:apply (rem_1424 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X1 X2);  assumption.
  cut (auto___def_113 X2). 2:apply (rem_1562 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1564 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X1 X2:term, auto___type_6 X1 -> auto___def_48 X2 -> auto___def_112 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. intros X1 X2. intros A1 A2.
  case (rem_1563 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 A1 A2. intros. apply trans___def_112_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 A1 A2. tauto.
Defined.

Remark rem_1565 : forall X1 X2:term, auto___def_47 (cons X1 X2) -> or_1
    (auto___type_6 X1 /\ auto___def_48 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1566 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_47 X -> auto___def_112 X)
    -> forall X1 X2:term, auto___def_47 (cons X1 X2) -> auto___def_112 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112. intros X1 X2. intro H. intros.
  elim (rem_1565 X1 X2 H);  intros.
  apply (rem_1564 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X1 X2);  tauto.
Defined.

Remark rem_1567 : forall X1:term, auto___def_47 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1568 : forall X1 X2:term, auto___def_47 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1569 : auto___def_47 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1570 : auto___def_47 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1571 : auto___def_47 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1572 : forall X1 X2:term, auto___def_47 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1573 : forall X1 X2 X3:term, auto___def_47 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1574 : forall X1 X2:term, auto___def_47 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1575 : forall X1:term, auto___def_47 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1576 : forall X1 X2 X3:term, auto___def_47 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1577 : forall X1 X2 X3:term, auto___def_47 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1578 : auto___def_47 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1579 : auto___def_47 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1580 : forall X1 X2:term, auto___def_47 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1581 : auto___def_47 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1582 : auto___def_47 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1583 : auto___def_47 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1584 : forall X1 X2:term, auto___def_47 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1585 : forall X1:term, auto___def_47 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1586 : forall X1 X2:term, auto___def_47 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1587 : auto___def_47 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1588 : auto___def_47 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1589 : forall X1 X2 X3:term, auto___def_47 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1590 : auto___def_47 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1591 : forall X1 X2 X3:term, auto___def_47 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1592 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_47 X1 -> auto___def_112 X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__def_47_p__def_112 1.
  intro X. case X.
   intro H. elim (rem_1590  H).
   intro H. elim (rem_1587  H).
  intros X1 X2;  exact (rem_1566 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_47_p__def_112 X1 X2).
  intros X1 X2. intro H. elim (rem_1584 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1591 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1580 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1574 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1586 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1572 X1 X2 H).
  intros X1. intro H. elim (rem_1575 X1 H).
   intro H. elim (rem_1570  H).
  intros X1 X2. intro H. elim (rem_1568 X1 X2 H).
  intros X1. intro H. elim (rem_1585 X1 H).
   intro H. elim (rem_1569  H).
  intros X1 X2 X3. intro H. elim (rem_1576 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1589 X1 X2 X3 H).
   intro H. elim (rem_1579  H).
   intro H. elim (rem_1583  H).
   intro H. elim (rem_1582  H).
   intro H. elim (rem_1578  H).
  intros X1. intro H. elim (rem_1567 X1 H).
   intro H. elim (rem_1588  H).
  intros X1 X2 X3. intro H. elim (rem_1577 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1573 X1 X2 X3 H).
   intro H. elim (rem_1581  H).
   intro H. elim (rem_1571  H).
Defined.

Remark rem_1593 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_45 X -> auto___def_110 X)
    -> forall X1:term, auto___def_47 X1 -> auto___def_112 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110. exact (rem_1592 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109).
Defined.

Remark rem_1594 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_45 X -> auto___def_110 X)
    -> forall X1:term, auto___def_47 X1 -> auto___def_112 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110. intros X1. intros A1.
  cut (auto___def_112 X1). 2:apply (rem_1593 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110 X1);  assumption.
  tauto.
Defined.

Remark rem_1595 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_45 X -> auto___def_110 X)
    -> forall X1:term, auto___def_47 X1 -> auto___def_110 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110. intros X1. intros A1.
  case (rem_1594 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110 X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110 A1. intros. apply trans___def_110_h_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110 A1. tauto.
Defined.

Remark rem_1596 : forall X1:term, auto___def_45 (h X1) -> or_1
    (auto___def_47 X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1597 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> (forall X:term, auto___def_45 X -> auto___def_110 X)
    -> forall X1:term, auto___def_45 (h X1) -> auto___def_110 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110. intros X1. intro H. intros.
  elim (rem_1596 X1 H);  intros.
  apply (rem_1595 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110 X1);  tauto.
Defined.

Remark rem_1598 : forall X1:term, auto___def_45 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1599 : forall X1 X2:term, auto___def_45 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1600 : auto___def_45 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1601 : auto___def_45 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1602 : auto___def_45 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1603 : forall X1 X2:term, auto___def_45 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1604 : forall X1 X2 X3:term, auto___def_45 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1605 : forall X1 X2:term, auto___def_45 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1606 : forall X1 X2 X3:term, auto___def_45 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1607 : forall X1 X2 X3:term, auto___def_45 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1608 : auto___def_45 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1609 : auto___def_45 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1610 : forall X1 X2:term, auto___def_45 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1611 : auto___def_45 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1612 : auto___def_45 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1613 : auto___def_45 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1614 : forall X1 X2:term, auto___def_45 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1615 : forall X1:term, auto___def_45 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1616 : forall X1 X2:term, auto___def_45 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1617 : auto___def_45 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1618 : auto___def_45 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1619 : forall X1 X2 X3:term, auto___def_45 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1620 : forall X1 X2:term, auto___def_45 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1621 : auto___def_45 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1622 : forall X1 X2 X3:term, auto___def_45 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1623 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1:term, auto___def_45 X1 -> auto___def_110 X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. fix epsilon_m__def_45_p__def_110 1.
  intro X. case X.
   intro H. elim (rem_1621  H).
   intro H. elim (rem_1617  H).
  intros X1 X2. intro H. elim (rem_1620 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1614 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1622 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1610 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1605 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1616 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1603 X1 X2 H).
  intros X1;  exact (rem_1597 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 epsilon_m__def_45_p__def_110 X1).
   intro H. elim (rem_1601  H).
  intros X1 X2. intro H. elim (rem_1599 X1 X2 H).
  intros X1. intro H. elim (rem_1615 X1 H).
   intro H. elim (rem_1600  H).
  intros X1 X2 X3. intro H. elim (rem_1606 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1619 X1 X2 X3 H).
   intro H. elim (rem_1609  H).
   intro H. elim (rem_1613  H).
   intro H. elim (rem_1612  H).
   intro H. elim (rem_1608  H).
  intros X1. intro H. elim (rem_1598 X1 H).
   intro H. elim (rem_1618  H).
  intros X1 X2 X3. intro H. elim (rem_1607 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1604 X1 X2 X3 H).
   intro H. elim (rem_1611  H).
   intro H. elim (rem_1602  H).
Defined.

Remark rem_1624 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_45 X1 -> auto___def_46 X2 -> auto___def_110 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_45 X1 -> auto___def_110 X1). tauto. exact (rem_1623 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X1).
Defined.

Remark rem_1625 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_36_p__def_101. exact (rem_305).
Defined.

Remark rem_1626 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_36_p__def_101. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_1625 epsilon_m__def_36_p__def_101 X1).
Defined.

Remark rem_1627 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_36_p__def_101. exact (rem_343).
Defined.

Remark rem_1628 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_36_p__def_101. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_1627 epsilon_m__def_36_p__def_101 X2).
Defined.

Remark rem_1629 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_36_p__def_101. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_1626 epsilon_m__def_36_p__def_101 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_1628 epsilon_m__def_36_p__def_101 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1630 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_101 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_36_p__def_101. intros X1 X2. intros A1 A2.
  case (rem_1629 epsilon_m__def_36_p__def_101 X1 X2 A1 A2). clear  epsilon_m__def_36_p__def_101 A1 A2. intros. apply trans___def_101_f2_1;  tauto.
 clear  epsilon_m__def_36_p__def_101 A1 A2. tauto.
Defined.

Remark rem_1631 : forall X1 X2:term, auto___def_36 (f2 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1632 : (forall X:term, auto___def_36 X -> auto___def_101 X)
    -> forall X1 X2:term, auto___def_36 (f2 X1 X2) -> auto___def_101 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_36_p__def_101. intros X1 X2. intro H. intros.
  elim (rem_1631 X1 X2 H);  intros.
  apply (rem_1630 epsilon_m__def_36_p__def_101 X1 X2);  tauto.
Defined.

Remark rem_1633 : forall X1:term, auto___def_36 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1634 : forall X1 X2:term, auto___def_36 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1635 : auto___def_36 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1636 : auto___def_36 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1637 : auto___def_36 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1638 : forall X1 X2:term, auto___def_36 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1639 : forall X1 X2 X3:term, auto___def_36 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1640 : forall X1 X2:term, auto___def_36 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1641 : forall X1:term, auto___def_36 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1642 : forall X1 X2 X3:term, auto___def_36 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1643 : forall X1 X2 X3:term, auto___def_36 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1644 : auto___def_36 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1645 : auto___def_36 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1646 : auto___def_36 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1647 : auto___def_36 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1648 : auto___def_36 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1649 : forall X1 X2:term, auto___def_36 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1650 : forall X1:term, auto___def_36 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1651 : forall X1 X2:term, auto___def_36 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1652 : auto___def_36 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1653 : auto___def_36 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1654 : forall X1 X2 X3:term, auto___def_36 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1655 : forall X1 X2:term, auto___def_36 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1656 : auto___def_36 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1657 : forall X1 X2 X3:term, auto___def_36 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1658 : forall X1:term, auto___def_36 X1 -> auto___def_101 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_36_p__def_101 1.
  intro X. case X.
   intro H. elim (rem_1656  H).
   intro H. elim (rem_1652  H).
  intros X1 X2. intro H. elim (rem_1655 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1649 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1657 X1 X2 X3 H).
  intros X1 X2;  exact (rem_1632 epsilon_m__def_36_p__def_101 X1 X2).
  intros X1 X2. intro H. elim (rem_1640 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1651 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1638 X1 X2 H).
  intros X1. intro H. elim (rem_1641 X1 H).
   intro H. elim (rem_1636  H).
  intros X1 X2. intro H. elim (rem_1634 X1 X2 H).
  intros X1. intro H. elim (rem_1650 X1 H).
   intro H. elim (rem_1635  H).
  intros X1 X2 X3. intro H. elim (rem_1642 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1654 X1 X2 X3 H).
   intro H. elim (rem_1645  H).
   intro H. elim (rem_1648  H).
   intro H. elim (rem_1647  H).
   intro H. elim (rem_1644  H).
  intros X1. intro H. elim (rem_1633 X1 H).
   intro H. elim (rem_1653  H).
  intros X1 X2 X3. intro H. elim (rem_1643 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1639 X1 X2 X3 H).
   intro H. elim (rem_1646  H).
   intro H. elim (rem_1637  H).
Qed.

Remark rem_1659 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X1:term, auto___def_36 X1 -> auto___def_101 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_46_p__def_111. exact (rem_1658).
Defined.

Remark rem_1660 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X1 X2:term, auto___def_36 X1 -> auto___def_42 X2 -> auto___def_101 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_46_p__def_111. intros X1 X2.
  cut (auto___def_36 X1 -> auto___def_101 X1). tauto. exact (rem_1659 epsilon_m__def_46_p__def_111 X1).
Defined.

Remark rem_1661 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X2:term, auto___def_42 X2 -> auto___def_107 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_46_p__def_111. exact (rem_209).
Defined.

Remark rem_1662 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X1 X2:term, auto___def_36 X1 -> auto___def_42 X2 -> auto___def_107 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_46_p__def_111. intros X1 X2.
  cut (auto___def_42 X2 -> auto___def_107 X2). tauto. exact (rem_1661 epsilon_m__def_46_p__def_111 X2).
Defined.

Remark rem_1663 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X1 X2:term, auto___def_36 X1 -> auto___def_42 X2 -> (auto___def_101 X1 /\ auto___def_107 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_46_p__def_111. intros X1 X2. intros A1 A2.
  cut (auto___def_101 X1). 2:apply (rem_1660 epsilon_m__def_46_p__def_111 X1 X2);  assumption.
  cut (auto___def_107 X2). 2:apply (rem_1662 epsilon_m__def_46_p__def_111 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1664 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X1 X2:term, auto___def_36 X1 -> auto___def_42 X2 -> auto___def_111 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_46_p__def_111. intros X1 X2. intros A1 A2.
  case (rem_1663 epsilon_m__def_46_p__def_111 X1 X2 A1 A2). clear  epsilon_m__def_46_p__def_111 A1 A2. intros. apply trans___def_111_cons_1;  tauto.
 clear  epsilon_m__def_46_p__def_111 A1 A2. tauto.
Defined.

Remark rem_1665 : forall X1 X2:term, auto___def_46 (cons X1 X2) -> or_1
    (auto___def_36 X1 /\ auto___def_42 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1666 : (forall X:term, auto___def_46 X -> auto___def_111 X)
    -> forall X1 X2:term, auto___def_46 (cons X1 X2) -> auto___def_111 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_46_p__def_111. intros X1 X2. intro H. intros.
  elim (rem_1665 X1 X2 H);  intros.
  apply (rem_1664 epsilon_m__def_46_p__def_111 X1 X2);  tauto.
Defined.

Remark rem_1667 : forall X1:term, auto___def_46 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1668 : forall X1 X2:term, auto___def_46 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1669 : auto___def_46 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1670 : auto___def_46 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1671 : auto___def_46 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1672 : forall X1 X2:term, auto___def_46 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1673 : forall X1 X2 X3:term, auto___def_46 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1674 : forall X1 X2:term, auto___def_46 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1675 : forall X1:term, auto___def_46 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1676 : forall X1 X2 X3:term, auto___def_46 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1677 : forall X1 X2 X3:term, auto___def_46 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1678 : auto___def_46 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1679 : auto___def_46 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1680 : forall X1 X2:term, auto___def_46 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1681 : auto___def_46 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1682 : auto___def_46 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1683 : auto___def_46 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1684 : forall X1 X2:term, auto___def_46 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1685 : forall X1:term, auto___def_46 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1686 : forall X1 X2:term, auto___def_46 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1687 : auto___def_46 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1688 : auto___def_46 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1689 : forall X1 X2 X3:term, auto___def_46 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1690 : auto___def_46 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1691 : forall X1 X2 X3:term, auto___def_46 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1692 : forall X2:term, auto___def_46 X2 -> auto___def_111 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_46_p__def_111 1.
  intro X. case X.
   intro H. elim (rem_1690  H).
   intro H. elim (rem_1687  H).
  intros X1 X2;  exact (rem_1666 epsilon_m__def_46_p__def_111 X1 X2).
  intros X1 X2. intro H. elim (rem_1684 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1691 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1680 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1674 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1686 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1672 X1 X2 H).
  intros X1. intro H. elim (rem_1675 X1 H).
   intro H. elim (rem_1670  H).
  intros X1 X2. intro H. elim (rem_1668 X1 X2 H).
  intros X1. intro H. elim (rem_1685 X1 H).
   intro H. elim (rem_1669  H).
  intros X1 X2 X3. intro H. elim (rem_1676 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1689 X1 X2 X3 H).
   intro H. elim (rem_1679  H).
   intro H. elim (rem_1683  H).
   intro H. elim (rem_1682  H).
   intro H. elim (rem_1678  H).
  intros X1. intro H. elim (rem_1667 X1 H).
   intro H. elim (rem_1688  H).
  intros X1 X2 X3. intro H. elim (rem_1677 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1673 X1 X2 X3 H).
   intro H. elim (rem_1681  H).
   intro H. elim (rem_1671  H).
Qed.

Remark rem_1693 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X2:term, auto___def_46 X2 -> auto___def_111 X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. exact (rem_1692).
Defined.

Remark rem_1694 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_45 X1 -> auto___def_46 X2 -> auto___def_111 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2.
  cut (auto___def_46 X2 -> auto___def_111 X2). tauto. exact (rem_1693 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X2).
Defined.

Remark rem_1695 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_45 X1 -> auto___def_46 X2 -> (auto___def_110 X1 /\ auto___def_111 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  cut (auto___def_110 X1). 2:apply (rem_1624 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  cut (auto___def_111 X2). 2:apply (rem_1694 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1696 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_45 X1 -> auto___def_46 X2 -> auto___def_109 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intros A1 A2.
  case (rem_1695 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 A1 A2. intros. apply trans___def_109_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 A1 A2. tauto.
Defined.

Remark rem_1697 : forall X1 X2:term, auto___def_44 (cons X1 X2) -> or_1
    (auto___def_45 X1 /\ auto___def_46 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1698 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_44 X -> auto___def_109 X)
    -> forall X1 X2:term, auto___def_44 (cons X1 X2) -> auto___def_109 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109. intros X1 X2. intro H. intros.
  elim (rem_1697 X1 X2 H);  intros.
  apply (rem_1696 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X1 X2);  tauto.
Defined.

Remark rem_1699 : forall X1:term, auto___def_44 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1700 : forall X1 X2:term, auto___def_44 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1701 : auto___def_44 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1702 : auto___def_44 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1703 : auto___def_44 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1704 : forall X1 X2:term, auto___def_44 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1705 : forall X1 X2 X3:term, auto___def_44 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1706 : forall X1 X2:term, auto___def_44 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1707 : forall X1:term, auto___def_44 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1708 : forall X1 X2 X3:term, auto___def_44 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1709 : forall X1 X2 X3:term, auto___def_44 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1710 : auto___def_44 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1711 : auto___def_44 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1712 : forall X1 X2:term, auto___def_44 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1713 : auto___def_44 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1714 : auto___def_44 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1715 : auto___def_44 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1716 : forall X1 X2:term, auto___def_44 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1717 : forall X1:term, auto___def_44 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1718 : forall X1 X2:term, auto___def_44 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1719 : auto___def_44 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1720 : auto___def_44 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1721 : forall X1 X2 X3:term, auto___def_44 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1722 : auto___def_44 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1723 : forall X1 X2 X3:term, auto___def_44 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1724 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current. fix epsilon_m__def_44_p__def_109 1.
  intro X. case X.
   intro H. elim (rem_1722  H).
   intro H. elim (rem_1719  H).
  intros X1 X2;  exact (rem_1698 epsilon_mknows_old_pknows_current epsilon_m__def_44_p__def_109 X1 X2).
  intros X1 X2. intro H. elim (rem_1716 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1723 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1712 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1706 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1718 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1704 X1 X2 H).
  intros X1. intro H. elim (rem_1707 X1 H).
   intro H. elim (rem_1702  H).
  intros X1 X2. intro H. elim (rem_1700 X1 X2 H).
  intros X1. intro H. elim (rem_1717 X1 H).
   intro H. elim (rem_1701  H).
  intros X1 X2 X3. intro H. elim (rem_1708 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1721 X1 X2 X3 H).
   intro H. elim (rem_1711  H).
   intro H. elim (rem_1715  H).
   intro H. elim (rem_1714  H).
   intro H. elim (rem_1710  H).
  intros X1. intro H. elim (rem_1699 X1 H).
   intro H. elim (rem_1720  H).
  intros X1 X2 X3. intro H. elim (rem_1709 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1705 X1 X2 X3 H).
   intro H. elim (rem_1713  H).
   intro H. elim (rem_1703  H).
Defined.

Remark rem_1725 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_1724 epsilon_mknows_old_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1726 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_44 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  case (rem_1725 epsilon_mknows_old_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current A1. intros. apply trans_knows_current_h_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1. tauto.
Defined.

Remark rem_1727 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intro H. clear H. intro H. clear H. intros X1.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (Hrec X1).
Defined.

Remark rem_1728 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_1727 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1729 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  case (rem_1728 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. intros. apply trans_knows_current_s_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. tauto.
Defined.

Remark rem_1730 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___type_2 (s X1) -> auto_knows_current (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intro H. intros.
  elim (rem_54 X1 H);  intros.
  apply (rem_1729 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  tauto.
Defined.

Remark rem_1731 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current.  tauto.
Defined.

Remark rem_1732 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current.  case (rem_1731 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros. apply trans_knows_current_nil_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. tauto.
Defined.

Remark rem_1733 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto___type_2 nil -> auto_knows_current nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intro H. intros.
  elim (rem_58 H);  intros.
  apply (rem_1732 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current);  tauto.
Defined.

Remark rem_1734 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. exact (rem_1724 epsilon_mknows_old_pknows_current).
Defined.

Remark rem_1735 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_1734 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1736 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_44 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  case (rem_1735 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. intros. apply trans_knows_current_h_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. tauto.
Defined.

Remark rem_1737 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1. (* Use induction hypothesis. *)
Proof.
   intro H. clear H. intro H. clear H. intro Hrec. intros X1.
  cut (auto___def_26 X1 -> auto_knows_current X1). tauto. exact (Hrec X1).
Defined.

Remark rem_1738 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_1737 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1739 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  case (rem_1738 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. tauto.
Defined.

Remark rem_1740 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  case (rem_1728 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. tauto.
Defined.

Remark rem_1741 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___type_2 (h X1) -> auto_knows_current (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intro H. intros.
  elim (rem_67 X1 H);  intros.
  apply (rem_1736 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  tauto.
  apply (rem_1739 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  tauto.
  apply (rem_1740 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  tauto.
Defined.

Remark rem_1742 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto_knows_current respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current.  case (rem_1731 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros. apply trans_knows_current_respond_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. tauto.
Defined.

Remark rem_1743 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto___type_2 respond_id -> auto_knows_current respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intro H. intros.
  elim (rem_70 H);  intros.
  apply (rem_1742 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current);  tauto.
Defined.

Remark rem_1744 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. exact (rem_305).
Defined.

Remark rem_1745 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_1744 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1746 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. exact (rem_343).
Defined.

Remark rem_1747 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_1746 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1748 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_1745 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_1747 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1749 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto_knows_current (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1748 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. intros. apply trans_knows_current_f2_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. tauto.
Defined.

Remark rem_1750 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 (f2 X1 X2) -> auto_knows_current (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_348 X1 X2 H);  intros.
  apply (rem_1749 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1751 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto_knows_current success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current.  case (rem_1731 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros. apply trans_knows_current_success_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. tauto.
Defined.

Remark rem_1752 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto___type_2 success -> auto_knows_current success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intro H. intros.
  elim (rem_351 H);  intros.
  apply (rem_1751 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current);  tauto.
Defined.

Remark rem_1753 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto_knows_current request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current.  case (rem_1731 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros. apply trans_knows_current_request_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. tauto.
Defined.

Remark rem_1754 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> auto___type_2 request_id -> auto_knows_current request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intro H. intros.
  elim (rem_354 H);  intros.
  apply (rem_1753 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current);  tauto.
Defined.

Remark rem_1755 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1756 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_1755 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1757 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1758 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_1757 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1759 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_1756 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_1758 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1760 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1759 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. intros. apply trans_knows_current_crypt_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. tauto.
Defined.

Remark rem_1761 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (rem_1727 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1762 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_current X2. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intro H. clear H. intro H. clear H. intros X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (Hrec X2).
Defined.

Remark rem_1763 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (rem_1762 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1764 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1761 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1763 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1765 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1764 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. intros. apply trans_knows_current_crypt_2;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. tauto.
Defined.

Remark rem_1766 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 (crypt X1 X2) -> auto_knows_current (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_367 X1 X2 H);  intros.
  apply (rem_1760 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  tauto.
  apply (rem_1765 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1767 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1768 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_1767 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1769 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto_agent X1 -> auto_knows_current (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intros A1.
  case (rem_1768 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. intros. apply trans_knows_current_nai_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1. tauto.
Defined.

Remark rem_1770 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___type_2 (nai X1) -> auto_knows_current (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1. intro H. intros.
  elim (rem_372 X1 H);  intros.
  apply (rem_1769 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1);  tauto.
Defined.

Remark rem_1771 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1772 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_1771 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1773 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1774 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_1773 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1775 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1776 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_1775 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X3).
Defined.

Remark rem_1777 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_1772 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_1774 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_1776 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1778 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1777 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2 A3. intros. apply trans_knows_current_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2 A3. tauto.
Defined.

Remark rem_1779 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___type_2 (nonces_old X1 X2 X3) -> auto_knows_current (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3. intro H. intros.
  elim (rem_382 X1 X2 X3 H);  intros.
  apply (rem_1778 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  tauto.
Defined.

Remark rem_1780 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1764 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2. tauto.
Defined.

Remark rem_1781 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_385 X1 X2 H);  intros.
  apply (rem_1780 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1782 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1783 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_1782 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1784 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1785 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_1784 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1786 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. intro H. clear H. intro H. clear H. tauto. Defined.

Remark rem_1787 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_1786 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X3).
Defined.

Remark rem_1788 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_1783 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_1785 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_1787 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1789 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_current (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1788 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2 A3. intros. apply trans_knows_current_f1_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current A1 A2 A3. tauto.
Defined.

Remark rem_1790 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___type_2 X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___type_2 (f1 X1 X2 X3) -> auto_knows_current (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2 X3. intro H. intros.
  elim (rem_395 X1 X2 X3 H);  intros.
  apply (rem_1789 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3);  tauto.
Defined.

Remark rem_1791 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___type_2 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. fix epsilon_m__type_2_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_410  H).
   intro H. elim (rem_408  H).
  intros X1 X2;  exact (rem_1781 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2).
  intros X1 X2;  exact (rem_1766 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2).
  intros X1 X2 X3;  exact (rem_1790 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3).
  intros X1 X2;  exact (rem_1750 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_402 X1 X2 H).
  intros X1 X2. intro H. elim (rem_407 X1 X2 H).
  intros X1 X2. intro H. elim (rem_400 X1 X2 H).
  intros X1;  exact (rem_1741 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
   intro H. elim (rem_398  H).
  intros X1 X2. intro H. elim (rem_397 X1 X2 H).
  intros X1;  exact (rem_1770 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
  exact (rem_1733 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current ).
  intros X1 X2 X3. intro H. elim (rem_403 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_1779 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1 X2 X3).
   intro H. elim (rem_405  H).
   intro H. elim (rem_406  H).
  exact (rem_1754 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current ).
  exact (rem_1743 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current ).
  intros X1;  exact (rem_1730 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current X1).
   intro H. elim (rem_409  H).
  intros X1 X2 X3. intro H. elim (rem_404 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_401 X1 X2 X3 H).
  exact (rem_1752 epsilon_mknows_old_pknows_current epsilon_m__type_2_pknows_current epsilon_m__def_26_pknows_current ).
   intro H. elim (rem_399  H).
Defined.

Remark rem_1792 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___type_2 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. exact (rem_1791 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current).
Defined.

Remark rem_1793 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___type_2 X1 -> auto_knows_current X1). tauto. exact (rem_1792 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1794 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto___def_30 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. exact (rem_1031).
Defined.

Remark rem_1795 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___def_30 X2 -> auto_knows_current X2). tauto. exact (rem_1794 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1796 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1793 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1795 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1797 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___type_2 X1 -> auto___def_30 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1796 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current A1 A2. tauto.
Defined.

Remark rem_1798 : (forall X:term, auto___def_29 X -> auto_knows_current X)
    -> (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_29 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1036 X1 X2 H);  intros.
  apply (rem_1797 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1799 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. fix epsilon_m__def_29_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1061  H).
   intro H. elim (rem_1058  H).
  intros X1 X2;  exact (rem_1798 epsilon_m__def_29_pknows_current epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1055 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1062 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1051 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1045 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1057 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1043 X1 X2 H).
  intros X1. intro H. elim (rem_1046 X1 H).
   intro H. elim (rem_1041  H).
  intros X1 X2. intro H. elim (rem_1039 X1 X2 H).
  intros X1. intro H. elim (rem_1056 X1 H).
   intro H. elim (rem_1040  H).
  intros X1 X2 X3. intro H. elim (rem_1047 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1060 X1 X2 X3 H).
   intro H. elim (rem_1050  H).
   intro H. elim (rem_1054  H).
   intro H. elim (rem_1053  H).
   intro H. elim (rem_1049  H).
  intros X1. intro H. elim (rem_1038 X1 H).
   intro H. elim (rem_1059  H).
  intros X1 X2 X3. intro H. elim (rem_1048 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1044 X1 X2 X3 H).
   intro H. elim (rem_1052  H).
   intro H. elim (rem_1042  H).
Defined.

Remark rem_1800 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current. exact (rem_1799 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current).
Defined.

Remark rem_1801 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_1800 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1802 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> forall X1:term, auto___def_29 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current. intros X1. intros A1.
  case (rem_1801 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current A1. tauto.
Defined.

Remark rem_1803 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> (forall X:term, auto___def_27 X -> auto_knows_current X)
    -> forall X1:term, auto___def_27 (h X1) -> auto_knows_current (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current. intros X1. intro H. intros.
  elim (rem_1067 X1 H);  intros.
  apply (rem_1802 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current X1);  tauto.
Defined.

Remark rem_1804 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1:term, auto___def_27 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. fix epsilon_m__def_27_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1092  H).
   intro H. elim (rem_1088  H).
  intros X1 X2. intro H. elim (rem_1091 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1085 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1093 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1081 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1076 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1087 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1074 X1 X2 H).
  intros X1;  exact (rem_1803 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current epsilon_m__def_27_pknows_current X1).
   intro H. elim (rem_1072  H).
  intros X1 X2. intro H. elim (rem_1070 X1 X2 H).
  intros X1. intro H. elim (rem_1086 X1 H).
   intro H. elim (rem_1071  H).
  intros X1 X2 X3. intro H. elim (rem_1077 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1090 X1 X2 X3 H).
   intro H. elim (rem_1080  H).
   intro H. elim (rem_1084  H).
   intro H. elim (rem_1083  H).
   intro H. elim (rem_1079  H).
  intros X1. intro H. elim (rem_1069 X1 H).
   intro H. elim (rem_1089  H).
  intros X1 X2 X3. intro H. elim (rem_1078 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1075 X1 X2 X3 H).
   intro H. elim (rem_1082  H).
   intro H. elim (rem_1073  H).
Defined.

Remark rem_1805 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___def_27 X1 -> auto_knows_current X1). tauto. exact (rem_1804 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1).
Defined.

Remark rem_1806 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X2:term, auto___def_28 X2 -> auto_knows_current X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. exact (rem_1311).
Defined.

Remark rem_1807 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2.
  cut (auto___def_28 X2 -> auto_knows_current X2). tauto. exact (rem_1806 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X2).
Defined.

Remark rem_1808 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1805 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1807 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1809 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_27 X1 -> auto___def_28 X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1808 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current A1 A2. tauto.
Defined.

Remark rem_1810 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> (forall X:term, auto___def_26 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_26 (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1316 X1 X2 H);  intros.
  apply (rem_1809 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1811 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  intros epsilon_mknows_old_pknows_current. fix epsilon_m__def_26_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1341  H).
   intro H. elim (rem_1338  H).
  intros X1 X2;  exact (rem_1810 epsilon_mknows_old_pknows_current epsilon_m__def_26_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1335 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1342 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_1331 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1325 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1337 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1323 X1 X2 H).
  intros X1. intro H. elim (rem_1326 X1 H).
   intro H. elim (rem_1321  H).
  intros X1 X2. intro H. elim (rem_1319 X1 X2 H).
  intros X1. intro H. elim (rem_1336 X1 H).
   intro H. elim (rem_1320  H).
  intros X1 X2 X3. intro H. elim (rem_1327 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1340 X1 X2 X3 H).
   intro H. elim (rem_1330  H).
   intro H. elim (rem_1334  H).
   intro H. elim (rem_1333  H).
   intro H. elim (rem_1329  H).
  intros X1. intro H. elim (rem_1318 X1 H).
   intro H. elim (rem_1339  H).
  intros X1 X2 X3. intro H. elim (rem_1328 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1324 X1 X2 X3 H).
   intro H. elim (rem_1332  H).
   intro H. elim (rem_1322  H).
Defined.

Remark rem_1812 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_1811 epsilon_mknows_old_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1813 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_26 X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  case (rem_1812 epsilon_mknows_old_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current A1. tauto.
Defined.

Remark rem_1814 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_current (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  case (rem_31 epsilon_mknows_old_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current A1. intros. apply trans_knows_current_h_3;  tauto.
 clear  epsilon_mknows_old_pknows_current A1. tauto.
Defined.

Remark rem_1815 : forall X1:term, auto_knows_old (h X1) -> or_3
    (auto___def_44 X1)    (auto___def_26 X1)    (auto_knows_old X1).
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_1816 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old (h X1) -> auto_knows_current (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intro H. intros.
  elim (rem_1815 X1 H);  intros.
  apply (rem_1726 epsilon_mknows_old_pknows_current X1);  tauto.
  apply (rem_1813 epsilon_mknows_old_pknows_current X1);  tauto.
  apply (rem_1814 epsilon_mknows_old_pknows_current X1);  tauto.
Defined.

Remark rem_1817 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_current respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current.  case (rem_35 epsilon_mknows_old_pknows_current). clear  epsilon_mknows_old_pknows_current. intros. apply trans_knows_current_respond_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current. tauto.
Defined.

Remark rem_1818 : auto_knows_old respond_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1819 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_old respond_id -> auto_knows_current respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intro H. intros.
  elim (rem_1818 H);  intros.
  apply (rem_1817 epsilon_mknows_old_pknows_current);  tauto.
Defined.

Remark rem_1820 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_103 X1. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current. exact (rem_305).
Defined.

Remark rem_1821 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_103 X1). tauto. exact (rem_1820 epsilon_mknows_old_pknows_current X1).
Defined.

Remark rem_1822 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_13 X2. (* Cut history. *)
Proof.  intros epsilon_mknows_old_pknows_current. exact (rem_343).
Defined.

Remark rem_1823 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_13 X2). tauto. exact (rem_1822 epsilon_mknows_old_pknows_current X2).
Defined.

Remark rem_1824 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_1821 epsilon_mknows_old_pknows_current X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_1823 epsilon_mknows_old_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1825 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto_knows_current (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1824 epsilon_mknows_old_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current A1 A2. intros. apply trans_knows_current_f2_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1 A2. tauto.
Defined.

Remark rem_1826 : forall X1 X2:term, auto_knows_old (f2 X1 X2) -> or_1
    (auto___def_38 X1 /\ auto___type_3 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1827 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old (f2 X1 X2) -> auto_knows_current (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1826 X1 X2 H);  intros.
  apply (rem_1825 epsilon_mknows_old_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1828 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_current success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current.  case (rem_35 epsilon_mknows_old_pknows_current). clear  epsilon_mknows_old_pknows_current. intros. apply trans_knows_current_success_1;  tauto.
 clear  epsilon_mknows_old_pknows_current. tauto.
Defined.

Remark rem_1829 : auto_knows_old success -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1830 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_old success -> auto_knows_current success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intro H. intros.
  elim (rem_1829 H);  intros.
  apply (rem_1828 epsilon_mknows_old_pknows_current);  tauto.
Defined.

Remark rem_1831 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_current request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current.  case (rem_35 epsilon_mknows_old_pknows_current). clear  epsilon_mknows_old_pknows_current. intros. apply trans_knows_current_request_id_1;  tauto.
 clear  epsilon_mknows_old_pknows_current. tauto.
Defined.

Remark rem_1832 : auto_knows_old request_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1833 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> auto_knows_old request_id -> auto_knows_current request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intro H. intros.
  elim (rem_1832 H);  intros.
  apply (rem_1831 epsilon_mknows_old_pknows_current);  tauto.
Defined.

Remark rem_1834 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1835 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_1834 epsilon_mknows_old_pknows_current X1).
Defined.

Remark rem_1836 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1837 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_1836 epsilon_mknows_old_pknows_current X2).
Defined.

Remark rem_1838 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_1835 epsilon_mknows_old_pknows_current X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_1837 epsilon_mknows_old_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1839 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1838 epsilon_mknows_old_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current A1 A2. intros. apply trans_knows_current_crypt_3;  tauto.
 clear  epsilon_mknows_old_pknows_current A1 A2. tauto.
Defined.

Remark rem_1840 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (rem_30 epsilon_mknows_old_pknows_current X1).
Defined.

Remark rem_1841 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_current X2. (* Use induction hypothesis. *)
Proof.
   intro Hrec. intros X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (Hrec X2).
Defined.

Remark rem_1842 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_current X2). tauto. exact (rem_1841 epsilon_mknows_old_pknows_current X2).
Defined.

Remark rem_1843 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_1840 epsilon_mknows_old_pknows_current X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_1842 epsilon_mknows_old_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1844 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1843 epsilon_mknows_old_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current A1 A2. intros. apply trans_knows_current_crypt_2;  tauto.
 clear  epsilon_mknows_old_pknows_current A1 A2. tauto.
Defined.

Remark rem_1845 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old (crypt X1 X2) -> auto_knows_current (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_6 X1 X2 H);  intros.
  apply (rem_1839 epsilon_mknows_old_pknows_current X1 X2);  tauto.
  apply (rem_1844 epsilon_mknows_old_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1846 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1847 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_1846 epsilon_mknows_old_pknows_current X1);  assumption.
  tauto.
Defined.

Remark rem_1848 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_agent X1 -> auto_knows_current (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intros A1.
  case (rem_1847 epsilon_mknows_old_pknows_current X1 A1). clear  epsilon_mknows_old_pknows_current A1. intros. apply trans_knows_current_nai_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1. tauto.
Defined.

Remark rem_1849 : forall X1:term, auto_knows_old (nai X1) -> or_1
    (auto_agent X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1850 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto_knows_old (nai X1) -> auto_knows_current (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1. intro H. intros.
  elim (rem_1849 X1 H);  intros.
  apply (rem_1848 epsilon_mknows_old_pknows_current X1);  tauto.
Defined.

Remark rem_1851 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1852 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_1851 epsilon_mknows_old_pknows_current X1).
Defined.

Remark rem_1853 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1854 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_1853 epsilon_mknows_old_pknows_current X2).
Defined.

Remark rem_1855 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1856 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_1855 epsilon_mknows_old_pknows_current X3).
Defined.

Remark rem_1857 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_1852 epsilon_mknows_old_pknows_current X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_1854 epsilon_mknows_old_pknows_current X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_1856 epsilon_mknows_old_pknows_current X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1858 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1857 epsilon_mknows_old_pknows_current X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current A1 A2 A3. intros. apply trans_knows_current_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1 A2 A3. tauto.
Defined.

Remark rem_1859 : forall X1 X2 X3:term, auto_knows_old (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1860 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto_knows_old (nonces_old X1 X2 X3) -> auto_knows_current (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3. intro H. intros.
  elim (rem_1859 X1 X2 X3 H);  intros.
  apply (rem_1858 epsilon_mknows_old_pknows_current X1 X2 X3);  tauto.
Defined.

Remark rem_1861 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_1843 epsilon_mknows_old_pknows_current X1 X2 A1 A2). clear  epsilon_mknows_old_pknows_current A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1 A2. tauto.
Defined.

Remark rem_1862 : forall X1 X2:term, auto_knows_old (cons X1 X2) -> or_1
    (auto_knows_old X1 /\ auto_knows_old X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1863 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2:term, auto_knows_old (cons X1 X2) -> auto_knows_current (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_1862 X1 X2 H);  intros.
  apply (rem_1861 epsilon_mknows_old_pknows_current X1 X2);  tauto.
Defined.

Remark rem_1864 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1865 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_1864 epsilon_mknows_old_pknows_current X1).
Defined.

Remark rem_1866 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1867 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_1866 epsilon_mknows_old_pknows_current X2).
Defined.

Remark rem_1868 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1869 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_1868 epsilon_mknows_old_pknows_current X3).
Defined.

Remark rem_1870 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_1865 epsilon_mknows_old_pknows_current X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_1867 epsilon_mknows_old_pknows_current X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_1869 epsilon_mknows_old_pknows_current X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1871 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto_knows_current (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1870 epsilon_mknows_old_pknows_current X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_pknows_current A1 A2 A3. intros. apply trans_knows_current_f1_1;  tauto.
 clear  epsilon_mknows_old_pknows_current A1 A2 A3. tauto.
Defined.

Remark rem_1872 : forall X1 X2 X3:term, auto_knows_old (f1 X1 X2 X3) -> or_1
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_1873 : (forall X:term, auto_knows_old X -> auto_knows_current X)
    -> forall X1 X2 X3:term, auto_knows_old (f1 X1 X2 X3) -> auto_knows_current (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_pknows_current. intros X1 X2 X3. intro H. intros.
  elim (rem_1872 X1 X2 X3 H);  intros.
  apply (rem_1871 epsilon_mknows_old_pknows_current X1 X2 X3);  tauto.
Defined.

Remark rem_1874 : forall X1 X2:term, auto_knows_old (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1875 : auto_knows_old i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1876 : auto_knows_old sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1877 : forall X1 X2:term, auto_knows_old (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1878 : forall X1 X2 X3:term, auto_knows_old (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1879 : forall X1 X2:term, auto_knows_old (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1880 : forall X1 X2 X3:term, auto_knows_old (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1881 : forall X1 X2 X3:term, auto_knows_old (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1882 : auto_knows_old prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1883 : auto_knows_old pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1884 : forall X1 X2:term, auto_knows_old (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1885 : auto_knows_old bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1886 : auto_knows_old server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1887 : auto_knows_old alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_1888 : forall X1:term, auto_knows_old X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_mknows_old_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_1887  H).
   intro H. elim (rem_1885  H).
  intros X1 X2;  exact (rem_1863 epsilon_mknows_old_pknows_current X1 X2).
  intros X1 X2;  exact (rem_1845 epsilon_mknows_old_pknows_current X1 X2).
  intros X1 X2 X3;  exact (rem_1873 epsilon_mknows_old_pknows_current X1 X2 X3).
  intros X1 X2;  exact (rem_1827 epsilon_mknows_old_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_1879 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1884 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1877 X1 X2 H).
  intros X1;  exact (rem_1816 epsilon_mknows_old_pknows_current X1).
   intro H. elim (rem_1875  H).
  intros X1 X2. intro H. elim (rem_1874 X1 X2 H).
  intros X1;  exact (rem_1850 epsilon_mknows_old_pknows_current X1).
  exact (rem_38 epsilon_mknows_old_pknows_current ).
  intros X1 X2 X3. intro H. elim (rem_1880 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_1860 epsilon_mknows_old_pknows_current X1 X2 X3).
   intro H. elim (rem_1882  H).
   intro H. elim (rem_1883  H).
  exact (rem_1833 epsilon_mknows_old_pknows_current ).
  exact (rem_1819 epsilon_mknows_old_pknows_current ).
  intros X1;  exact (rem_34 epsilon_mknows_old_pknows_current X1).
   intro H. elim (rem_1886  H).
  intros X1 X2 X3. intro H. elim (rem_1881 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1878 X1 X2 X3 H).
  exact (rem_1830 epsilon_mknows_old_pknows_current ).
   intro H. elim (rem_1876  H).
Qed.

Remark rem_1889 : forall _big_m:term, auto_knows_old _big_m -> auto_knows_current _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_old X1 -> auto_knows_current X1). tauto. exact (rem_1888 X1).
Qed.

Remark rem_1890 : forall X1 X2:term, auto_knows_old X2 -> auto_knows_old X1 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_3 X1).
Qed.

Remark rem_1891 : forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_1892 : forall X1 X2:term, auto_knows_old X2 -> auto_knows_old X1 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_1891 X2).
Qed.

Remark rem_1893 : forall X1 X2:term, auto_knows_old X2 -> auto_knows_old X1 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_1890 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_1892 X1 X2);  assumption.
  tauto.
Qed.

Remark rem_1894 : forall X1 X2:term, auto_knows_old X2 -> auto_knows_old X1 -> auto_knows_old (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros X1 X2. intros A1 A2.
  case (rem_1893 X1 X2 A1 A2). clear  A1 A2. intros. apply trans_knows_old_crypt_2;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_1895 : forall _big_k _big_m:term, auto_knows_old _big_m -> auto_knows_old _big_k -> auto_knows_old (crypt _big_m _big_k). (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_old X2 -> auto_knows_old X1 -> auto_knows_old (crypt X1 X2)). tauto. exact (rem_1894 X1 X2).
Qed.

Remark rem_1896 : forall X1:term, auto___def_17 (key prv X1) -> auto_knows_old (key pub X1) -> False. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_18 prv X1 H);  intros.
Qed.

Remark rem_1897 : forall X2:term, auto___def_17 (key prv X2) -> auto_knows_old (key pub X2) -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto___def_17 (key prv X1) -> auto_knows_old (key pub X1) -> False). tauto. exact (rem_1896 X1).
Qed.

Remark rem_1898 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 (key prv X2) -> auto_knows_old (key pub X2) -> auto_knows_old X1. (* Split. *)
Proof.
  intros X1 X2.
  cut (auto___def_17 (key prv X2) -> auto_knows_old (key pub X2) -> False). tauto.
  exact (rem_1897 X2).
Qed.

Remark rem_1899 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old (key prv X2) -> auto_knows_old (key pub X2) -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_3 X1).
Qed.

Remark rem_1900 : forall X1 X2:term, auto_knows_old (crypt X1 (key prv X2)) -> auto_knows_old (key pub X2) -> auto_knows_old X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_6 X1 (key prv X2) H);  intros.
  apply (rem_1898 X1 X2);  tauto.
  apply (rem_1899 X1 X2);  tauto.
Qed.

Remark rem_1901 : forall _big_k _big_m:term, auto_knows_old (crypt _big_m (key prv _big_k)) -> auto_knows_old (key pub _big_k) -> auto_knows_old _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_old (crypt X1 (key prv X2)) -> auto_knows_old (key pub X2) -> auto_knows_old X1). tauto. exact (rem_1900 X1 X2).
Qed.

Remark rem_1902 : (forall X:term, auto___def_36 X -> auto___def_10 X -> False)
    -> forall X1 X2:term, auto___def_10 (f2 X1 X2) -> auto___def_38 X1 -> auto___type_3 X2 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_36_m__def_10. intros X1 X2. intro H. intros.
  elim (rem_855 X1 X2 H);  intros.
Defined.

Remark rem_1903 : (forall X:term, auto___def_36 X -> auto___def_10 X -> False)
    -> forall X1 X2:term, auto___def_36 (f2 X1 X2) -> auto___def_10 (f2 X1 X2) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_36_m__def_10. intros X1 X2. intro H. intros.
  elim (rem_1631 X1 X2 H);  intros.
  apply (rem_1902 epsilon_m__def_36_m__def_10 X1 X2);  tauto.
Defined.

Remark rem_1904 : forall X1:term, auto___def_36 X1 -> auto___def_10 X1 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_36_m__def_10 1.
  intro X. case X.
   intro H. elim (rem_1656  H).
   intro H. elim (rem_1652  H).
  intros X1 X2. intro H. elim (rem_1655 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1649 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_1657 X1 X2 X3 H).
  intros X1 X2;  exact (rem_1903 epsilon_m__def_36_m__def_10 X1 X2).
  intros X1 X2. intro H. elim (rem_1640 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1651 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1638 X1 X2 H).
  intros X1. intro H. elim (rem_1641 X1 H).
   intro H. elim (rem_1636  H).
  intros X1 X2. intro H. elim (rem_1634 X1 X2 H).
  intros X1. intro H. elim (rem_1650 X1 H).
   intro H. elim (rem_1635  H).
  intros X1 X2 X3. intro H. elim (rem_1642 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1654 X1 X2 X3 H).
   intro H. elim (rem_1645  H).
   intro H. elim (rem_1648  H).
   intro H. elim (rem_1647  H).
   intro H. elim (rem_1644  H).
  intros X1. intro H. elim (rem_1633 X1 H).
   intro H. elim (rem_1653  H).
  intros X1 X2 X3. intro H. elim (rem_1643 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1639 X1 X2 X3 H).
   intro H. elim (rem_1646  H).
   intro H. elim (rem_1637  H).
Qed.

Remark rem_1905 : forall X1:term, auto___def_36 X1 -> auto___def_10 X1 -> auto_knows_old X1 -> False. (* Subsumption by simpler clause. *)
Proof.
  intros X1.
  cut (auto___def_36 X1 -> auto___def_10 X1 -> False). tauto. exact (rem_1904 X1).
Qed.

Remark rem_1906 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_36 X3 -> auto___def_42 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_1905 X3)). tauto.
Qed.

Remark rem_1907 : forall X1 X2 X3 X4 X5:term, auto___def_36 X3 -> auto___def_42 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_36 X3 -> auto___def_42 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_1906 X1 X2 X3 X4 X5).
Qed.

Remark rem_1908 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_46 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1665 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_1907 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_1909 : forall X1 X2 X3 X4 X5:term, auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_46 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_46 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_1908 X1 X2 X3 X4 X5).
Qed.

Remark rem_1910 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_46 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1596 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_1909 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_1911 : forall X1 X2 X3 X4 X5:term, auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_46 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_46 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_1910 X1 X2 X3 X4 X5).
Qed.

Remark rem_1912 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1697 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_1911 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_1913 : forall X1 X2 X3 X4 X5:term, auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_1912 X1 X2 X3 X4 X5).
Qed.

Remark rem_1914 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  tauto.
Qed.

Remark rem_1915 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_39 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1914 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_39_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_1916 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_1_p__type_4.  tauto.
Defined.

Remark rem_1917 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_4 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4.  case (rem_1916 epsilon_m__type_1_p__type_4). clear  epsilon_m__type_1_p__type_4. intros. apply trans___type_4_i_1;  tauto.
 clear  epsilon_m__type_1_p__type_4. tauto.
Defined.

Remark rem_1918 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_1 i -> auto___type_4 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4. intro H. intros.
  elim (rem_448 H);  intros.
  apply (rem_1917 epsilon_m__type_1_p__type_4);  tauto.
Defined.

Remark rem_1919 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_4 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4.  case (rem_1916 epsilon_m__type_1_p__type_4). clear  epsilon_m__type_1_p__type_4. intros. apply trans___type_4_bob_1;  tauto.
 clear  epsilon_m__type_1_p__type_4. tauto.
Defined.

Remark rem_1920 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_1 bob -> auto___type_4 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4. intro H. intros.
  elim (rem_451 H);  intros.
  apply (rem_1919 epsilon_m__type_1_p__type_4);  tauto.
Defined.

Remark rem_1921 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_4 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4.  case (rem_1916 epsilon_m__type_1_p__type_4). clear  epsilon_m__type_1_p__type_4. intros. apply trans___type_4_server_1;  tauto.
 clear  epsilon_m__type_1_p__type_4. tauto.
Defined.

Remark rem_1922 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_1 server -> auto___type_4 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4. intro H. intros.
  elim (rem_454 H);  intros.
  apply (rem_1921 epsilon_m__type_1_p__type_4);  tauto.
Defined.

Remark rem_1923 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_4 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4.  case (rem_1916 epsilon_m__type_1_p__type_4). clear  epsilon_m__type_1_p__type_4. intros. apply trans___type_4_alice_1;  tauto.
 clear  epsilon_m__type_1_p__type_4. tauto.
Defined.

Remark rem_1924 : (forall X:term, auto___type_1 X -> auto___type_4 X)
    -> auto___type_1 alice -> auto___type_4 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_4. intro H. intros.
  elim (rem_457 H);  intros.
  apply (rem_1923 epsilon_m__type_1_p__type_4);  tauto.
Defined.

Remark rem_1925 : forall X1:term, auto___type_1 X1 -> auto___type_4 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_1_p__type_4 1.
  intro X. case X.
  exact (rem_1924 epsilon_m__type_1_p__type_4 ).
  exact (rem_1920 epsilon_m__type_1_p__type_4 ).
  intros X1 X2. intro H. elim (rem_479 X1 X2 H).
  intros X1 X2. intro H. elim (rem_475 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_480 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_471 X1 X2 H).
  intros X1 X2. intro H. elim (rem_465 X1 X2 H).
  intros X1 X2. intro H. elim (rem_477 X1 X2 H).
  intros X1 X2. intro H. elim (rem_463 X1 X2 H).
  intros X1. intro H. elim (rem_466 X1 H).
  exact (rem_1918 epsilon_m__type_1_p__type_4 ).
  intros X1 X2. intro H. elim (rem_460 X1 X2 H).
  intros X1. intro H. elim (rem_476 X1 H).
   intro H. elim (rem_461  H).
  intros X1 X2 X3. intro H. elim (rem_467 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_478 X1 X2 X3 H).
   intro H. elim (rem_470  H).
   intro H. elim (rem_474  H).
   intro H. elim (rem_473  H).
   intro H. elim (rem_469  H).
  intros X1. intro H. elim (rem_459 X1 H).
  exact (rem_1922 epsilon_m__type_1_p__type_4 ).
  intros X1 X2 X3. intro H. elim (rem_468 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_464 X1 X2 X3 H).
   intro H. elim (rem_472  H).
   intro H. elim (rem_462  H).
Qed.

Remark rem_1926 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___type_4 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___type_1 X1 -> auto___type_4 X1). tauto. exact (rem_1925 X1).
Qed.

Remark rem_1927 : forall X2:term, auto_agent X2 -> auto___type_5 X2. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_5 1.
  intro X. case X.
  exact (rem_834 epsilon_magent_p__type_5 ).
  exact (rem_830 epsilon_magent_p__type_5 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_828 epsilon_magent_p__type_5 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_832 epsilon_magent_p__type_5 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_1928 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___type_5 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_agent X2 -> auto___type_5 X2). tauto. exact (rem_1927 X2).
Qed.

Remark rem_1929 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_42 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1914 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_42_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_1930 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___type_5 X2 /\ auto___def_42 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_5 X2). 2:apply (rem_1928 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_42 nil). 2:apply (rem_1929 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_1931 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_41 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1930 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_41_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_1932 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___type_4 X1 /\ auto___def_41 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_4 X1). 2:apply (rem_1926 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_41 (cons X2 nil)). 2:apply (rem_1931 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_1933 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_40 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1932 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_40_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_1934 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___def_39 sym /\ auto___def_40 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_39 sym). 2:apply (rem_1915 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_40 (cons X1 (cons X2 nil))). 2:apply (rem_1933 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_1935 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_38 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1934 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_38_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_1936 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1937 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_3. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_1936 epsilon_m__def_10_p__type_3 X1).
Defined.

Remark rem_1938 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1939 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_3. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_1938 epsilon_m__def_10_p__type_3 X2).
Defined.

Remark rem_1940 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1941 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_3. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_1940 epsilon_m__def_10_p__type_3 X3).
Defined.

Remark rem_1942 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_10_p__type_3. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_1937 epsilon_m__def_10_p__type_3 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_1939 epsilon_m__def_10_p__type_3 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_1941 epsilon_m__def_10_p__type_3 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_1943 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_3 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_10_p__type_3. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1942 epsilon_m__def_10_p__type_3 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_10_p__type_3 A1 A2 A3. intros. apply trans___type_3_nonces_old_1;  tauto.
 clear  epsilon_m__def_10_p__type_3 A1 A2 A3. tauto.
Defined.

Remark rem_1944 : (forall X:term, auto___def_10 X -> auto___type_3 X)
    -> forall X1 X2 X3:term, auto___def_10 (nonces_old X1 X2 X3) -> auto___type_3 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_10_p__type_3. intros X1 X2 X3. intro H. intros.
  elim (rem_840 X1 X2 X3 H);  intros.
  apply (rem_1943 epsilon_m__def_10_p__type_3 X1 X2 X3);  tauto.
Defined.

Remark rem_1945 : forall X3:term, auto___def_10 X3 -> auto___type_3 X3. (* Induct. *)
Proof.
  fix epsilon_m__def_10_p__type_3 1.
  intro X. case X.
   intro H. elim (rem_865  H).
   intro H. elim (rem_862  H).
  intros X1 X2. intro H. elim (rem_864 X1 X2 H).
  intros X1 X2. intro H. elim (rem_859 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_866 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_861 X1 X2 H).
  intros X1 X2. intro H. elim (rem_847 X1 X2 H).
  intros X1. intro H. elim (rem_850 X1 H).
   intro H. elim (rem_845  H).
  intros X1 X2. intro H. elim (rem_843 X1 X2 H).
  intros X1. intro H. elim (rem_860 X1 H).
   intro H. elim (rem_844  H).
  intros X1 X2 X3. intro H. elim (rem_851 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_1944 epsilon_m__def_10_p__type_3 X1 X2 X3).
   intro H. elim (rem_854  H).
   intro H. elim (rem_858  H).
   intro H. elim (rem_857  H).
   intro H. elim (rem_853  H).
  intros X1. intro H. elim (rem_842 X1 H).
   intro H. elim (rem_863  H).
  intros X1 X2 X3. intro H. elim (rem_852 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_848 X1 X2 X3 H).
   intro H. elim (rem_856  H).
   intro H. elim (rem_846  H).
Qed.

Remark rem_1946 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___type_3 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___type_3 X3). tauto. exact (rem_1945 X3).
Qed.

Remark rem_1947 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___def_38 (key sym (cons X1 (cons X2 nil))) /\ auto___type_3 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_38 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_1935 X1 X2 X3 X4 X5);  assumption.
  cut (auto___type_3 X3). 2:apply (rem_1946 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_1948 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1947 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_old_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_1949 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1950 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_1949 epsilon_m__type_2_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_1951 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_6 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  case (rem_1950 epsilon_m__type_2_p__type_6 X1 A1). clear  epsilon_m__type_2_p__type_6 A1. intros. apply trans___type_6_s_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1. tauto.
Defined.

Remark rem_1952 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___type_2 (s X1) -> auto___type_6 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intro H. intros.
  elim (rem_54 X1 H);  intros.
  apply (rem_1951 epsilon_m__type_2_p__type_6 X1);  tauto.
Defined.

Remark rem_1953 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6.  tauto.
Defined.

Remark rem_1954 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_6 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6.  case (rem_1953 epsilon_m__type_2_p__type_6). clear  epsilon_m__type_2_p__type_6. intros. apply trans___type_6_nil_1;  tauto.
 clear  epsilon_m__type_2_p__type_6. tauto.
Defined.

Remark rem_1955 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_2 nil -> auto___type_6 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intro H. intros.
  elim (rem_58 H);  intros.
  apply (rem_1954 epsilon_m__type_2_p__type_6);  tauto.
Defined.

Remark rem_1956 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1957 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  cut (auto___def_44 X1). 2:apply (rem_1956 epsilon_m__type_2_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_1958 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  case (rem_1957 epsilon_m__type_2_p__type_6 X1 A1). clear  epsilon_m__type_2_p__type_6 A1. intros. apply trans___type_6_h_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1. tauto.
Defined.

Remark rem_1959 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1960 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  cut (auto___def_26 X1). 2:apply (rem_1959 epsilon_m__type_2_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_1961 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  case (rem_1960 epsilon_m__type_2_p__type_6 X1 A1). clear  epsilon_m__type_2_p__type_6 A1. intros. apply trans___type_6_h_2;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1. tauto.
Defined.

Remark rem_1962 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  case (rem_1950 epsilon_m__type_2_p__type_6 X1 A1). clear  epsilon_m__type_2_p__type_6 A1. intros. apply trans___type_6_h_3;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1. tauto.
Defined.

Remark rem_1963 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___type_2 (h X1) -> auto___type_6 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intro H. intros.
  elim (rem_67 X1 H);  intros.
  apply (rem_1958 epsilon_m__type_2_p__type_6 X1);  tauto.
  apply (rem_1961 epsilon_m__type_2_p__type_6 X1);  tauto.
  apply (rem_1962 epsilon_m__type_2_p__type_6 X1);  tauto.
Defined.

Remark rem_1964 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_6 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6.  case (rem_1953 epsilon_m__type_2_p__type_6). clear  epsilon_m__type_2_p__type_6. intros. apply trans___type_6_respond_id_1;  tauto.
 clear  epsilon_m__type_2_p__type_6. tauto.
Defined.

Remark rem_1965 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_2 respond_id -> auto___type_6 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intro H. intros.
  elim (rem_70 H);  intros.
  apply (rem_1964 epsilon_m__type_2_p__type_6);  tauto.
Defined.

Remark rem_1966 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_38 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1967 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_38 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_38 X1). tauto. exact (rem_1966 epsilon_m__type_2_p__type_6 X1).
Defined.

Remark rem_1968 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_3 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1969 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_3 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_3 X2). tauto. exact (rem_1968 epsilon_m__type_2_p__type_6 X2).
Defined.

Remark rem_1970 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_38 X1 /\ auto___type_3 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto___def_38 X1). 2:apply (rem_1967 epsilon_m__type_2_p__type_6 X1 X2);  assumption.
  cut (auto___type_3 X2). 2:apply (rem_1969 epsilon_m__type_2_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1971 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_6 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_1970 epsilon_m__type_2_p__type_6 X1 X2 A1 A2). clear  epsilon_m__type_2_p__type_6 A1 A2. intros. apply trans___type_6_f2_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1 A2. tauto.
Defined.

Remark rem_1972 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___type_2 (f2 X1 X2) -> auto___type_6 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_348 X1 X2 H);  intros.
  apply (rem_1971 epsilon_m__type_2_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_1973 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_6 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6.  case (rem_1953 epsilon_m__type_2_p__type_6). clear  epsilon_m__type_2_p__type_6. intros. apply trans___type_6_success_1;  tauto.
 clear  epsilon_m__type_2_p__type_6. tauto.
Defined.

Remark rem_1974 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_2 success -> auto___type_6 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intro H. intros.
  elim (rem_351 H);  intros.
  apply (rem_1973 epsilon_m__type_2_p__type_6);  tauto.
Defined.

Remark rem_1975 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_6 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6.  case (rem_1953 epsilon_m__type_2_p__type_6). clear  epsilon_m__type_2_p__type_6. intros. apply trans___type_6_request_id_1;  tauto.
 clear  epsilon_m__type_2_p__type_6. tauto.
Defined.

Remark rem_1976 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> auto___type_2 request_id -> auto___type_6 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intro H. intros.
  elim (rem_354 H);  intros.
  apply (rem_1975 epsilon_m__type_2_p__type_6);  tauto.
Defined.

Remark rem_1977 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1978 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_1977 epsilon_m__type_2_p__type_6 X1).
Defined.

Remark rem_1979 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1980 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_1979 epsilon_m__type_2_p__type_6 X2).
Defined.

Remark rem_1981 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_1978 epsilon_m__type_2_p__type_6 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_1980 epsilon_m__type_2_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1982 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_6 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_1981 epsilon_m__type_2_p__type_6 X1 X2 A1 A2). clear  epsilon_m__type_2_p__type_6 A1 A2. intros. apply trans___type_6_crypt_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1 A2. tauto.
Defined.

Remark rem_1983 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_1949 epsilon_m__type_2_p__type_6 X1).
Defined.

Remark rem_1984 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1985 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_1984 epsilon_m__type_2_p__type_6 X2).
Defined.

Remark rem_1986 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_1983 epsilon_m__type_2_p__type_6 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_1985 epsilon_m__type_2_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_1987 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_1986 epsilon_m__type_2_p__type_6 X1 X2 A1 A2). clear  epsilon_m__type_2_p__type_6 A1 A2. intros. apply trans___type_6_crypt_2;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1 A2. tauto.
Defined.

Remark rem_1988 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___type_2 (crypt X1 X2) -> auto___type_6 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_367 X1 X2 H);  intros.
  apply (rem_1982 epsilon_m__type_2_p__type_6 X1 X2);  tauto.
  apply (rem_1987 epsilon_m__type_2_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_1989 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1990 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_1989 epsilon_m__type_2_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_1991 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto___type_6 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intros A1.
  case (rem_1990 epsilon_m__type_2_p__type_6 X1 A1). clear  epsilon_m__type_2_p__type_6 A1. intros. apply trans___type_6_nai_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1. tauto.
Defined.

Remark rem_1992 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___type_2 (nai X1) -> auto___type_6 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1. intro H. intros.
  elim (rem_372 X1 H);  intros.
  apply (rem_1991 epsilon_m__type_2_p__type_6 X1);  tauto.
Defined.

Remark rem_1993 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1994 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_1993 epsilon_m__type_2_p__type_6 X1).
Defined.

Remark rem_1995 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1996 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_1995 epsilon_m__type_2_p__type_6 X2).
Defined.

Remark rem_1997 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_1998 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_1997 epsilon_m__type_2_p__type_6 X3).
Defined.

Remark rem_1999 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_1994 epsilon_m__type_2_p__type_6 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_1996 epsilon_m__type_2_p__type_6 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_1998 epsilon_m__type_2_p__type_6 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2000 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_6 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_1999 epsilon_m__type_2_p__type_6 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_2_p__type_6 A1 A2 A3. intros. apply trans___type_6_nonces_old_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1 A2 A3. tauto.
Defined.

Remark rem_2001 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___type_2 (nonces_old X1 X2 X3) -> auto___type_6 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3. intro H. intros.
  elim (rem_382 X1 X2 X3 H);  intros.
  apply (rem_2000 epsilon_m__type_2_p__type_6 X1 X2 X3);  tauto.
Defined.

Remark rem_2002 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_1986 epsilon_m__type_2_p__type_6 X1 X2 A1 A2). clear  epsilon_m__type_2_p__type_6 A1 A2. intros. apply trans___type_6_cons_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1 A2. tauto.
Defined.

Remark rem_2003 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2:term, auto___type_2 (cons X1 X2) -> auto___type_6 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_385 X1 X2 H);  intros.
  apply (rem_2002 epsilon_m__type_2_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_2004 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2005 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_2004 epsilon_m__type_2_p__type_6 X1).
Defined.

Remark rem_2006 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2007 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_2006 epsilon_m__type_2_p__type_6 X2).
Defined.

Remark rem_2008 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2009 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_2008 epsilon_m__type_2_p__type_6 X3).
Defined.

Remark rem_2010 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_2005 epsilon_m__type_2_p__type_6 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_2007 epsilon_m__type_2_p__type_6 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_2009 epsilon_m__type_2_p__type_6 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2011 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_6 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2010 epsilon_m__type_2_p__type_6 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_2_p__type_6 A1 A2 A3. intros. apply trans___type_6_f1_1;  tauto.
 clear  epsilon_m__type_2_p__type_6 A1 A2 A3. tauto.
Defined.

Remark rem_2012 : (forall X:term, auto___type_2 X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___type_2 (f1 X1 X2 X3) -> auto___type_6 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_2_p__type_6. intros X1 X2 X3. intro H. intros.
  elim (rem_395 X1 X2 X3 H);  intros.
  apply (rem_2011 epsilon_m__type_2_p__type_6 X1 X2 X3);  tauto.
Defined.

Remark rem_2013 : forall X4:term, auto___type_2 X4 -> auto___type_6 X4. (* Induct. *)
Proof.
  fix epsilon_m__type_2_p__type_6 1.
  intro X. case X.
   intro H. elim (rem_410  H).
   intro H. elim (rem_408  H).
  intros X1 X2;  exact (rem_2003 epsilon_m__type_2_p__type_6 X1 X2).
  intros X1 X2;  exact (rem_1988 epsilon_m__type_2_p__type_6 X1 X2).
  intros X1 X2 X3;  exact (rem_2012 epsilon_m__type_2_p__type_6 X1 X2 X3).
  intros X1 X2;  exact (rem_1972 epsilon_m__type_2_p__type_6 X1 X2).
  intros X1 X2. intro H. elim (rem_402 X1 X2 H).
  intros X1 X2. intro H. elim (rem_407 X1 X2 H).
  intros X1 X2. intro H. elim (rem_400 X1 X2 H).
  intros X1;  exact (rem_1963 epsilon_m__type_2_p__type_6 X1).
   intro H. elim (rem_398  H).
  intros X1 X2. intro H. elim (rem_397 X1 X2 H).
  intros X1;  exact (rem_1992 epsilon_m__type_2_p__type_6 X1).
  exact (rem_1955 epsilon_m__type_2_p__type_6 ).
  intros X1 X2 X3. intro H. elim (rem_403 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_2001 epsilon_m__type_2_p__type_6 X1 X2 X3).
   intro H. elim (rem_405  H).
   intro H. elim (rem_406  H).
  exact (rem_1976 epsilon_m__type_2_p__type_6 ).
  exact (rem_1965 epsilon_m__type_2_p__type_6 ).
  intros X1;  exact (rem_1952 epsilon_m__type_2_p__type_6 X1).
   intro H. elim (rem_409  H).
  intros X1 X2 X3. intro H. elim (rem_404 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_401 X1 X2 X3 H).
  exact (rem_1974 epsilon_m__type_2_p__type_6 ).
   intro H. elim (rem_399  H).
Qed.

Remark rem_2014 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___type_6 X4. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___type_2 X4 -> auto___type_6 X4). tauto. exact (rem_2013 X4).
Qed.

Remark rem_2015 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_49 (f4 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1947 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_49_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2016 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_51 (f3 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1947 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_51_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2017 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___def_51 (f3 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_42 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_51 (f3 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2016 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_42 nil). 2:apply (rem_1929 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2018 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_50 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2017 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_50_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2019 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___def_49 (f4 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_50 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_49 (f4 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2015 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_50 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_2018 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2020 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_48 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2019 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_48_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2021 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___type_6 X4 /\ auto___def_48 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_6 X4). 2:apply (rem_2014 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_48 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_2020 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2022 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2021 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_47_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2023 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_2022 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2024 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2023 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_45_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2025 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_36 (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1947 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_36_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2026 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___def_36 (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_42 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_36 (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2025 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_42 nil). 2:apply (rem_1929 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2027 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_46 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2026 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_46_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2028 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) /\ auto___def_46 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))))). 2:apply (rem_2024 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_46 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_2027 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2029 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2028 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_44_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2030 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_2029 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2031 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2030 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_old_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2032 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_1914 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_old_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2033 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) /\ auto_knows_old nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_2031 X1 X2 X3 X4 X5);  assumption.
  cut (auto_knows_old nil). 2:apply (rem_2032 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2034 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2033 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2035 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> (auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_1948 X1 X2 X3 X4 X5);  assumption.
  cut (auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). 2:apply (rem_2034 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2036 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2035 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2037 : forall X1 X2 X3 X4 X5:term, auto___type_2 X4 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_30 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_2 X4 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2036 X1 X2 X3 X4 X5).
Qed.

Remark rem_2038 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_29 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1036 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2037 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2039 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_29 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_29 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_34 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2038 X1 X2 X3 X4 X5).
Qed.

Remark rem_2040 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_28 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_29 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1284 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_2039 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2041 : forall X1 X2 X3 X4 X5:term, auto___def_29 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_28 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_28 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_29 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2040 X1 X2 X3 X4 X5).
Qed.

Remark rem_2042 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_27 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_28 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1067 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_2041 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2043 : forall X1 X2 X3 X4 X5:term, auto___def_27 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_28 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_27 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_28 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2042 X1 X2 X3 X4 X5).
Qed.

Remark rem_2044 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_26 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1316 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_2043 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2045 : forall X1 X2 X3 X4 X5:term, auto___def_26 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_26 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2044 X1 X2 X3 X4 X5).
Qed.

Remark rem_2046 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_36 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_42 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_45 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_1651 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
Qed.

Remark rem_2047 : forall X1 X2 X3 X4:term, auto___def_36 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_42 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_10 X3 -> auto___def_45 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_36 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_42 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_45 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2046 X1 X2 X3 X4).
Qed.

Remark rem_2048 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_45 X4 -> auto___def_46 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2. intro H. intros.
  elim (rem_1665 (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) H);  intros.
  apply (rem_2047 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2049 : forall X1 X2 X3 X4:term, auto___def_45 X4 -> auto___def_46 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_45 X4 -> auto___def_46 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2048 X1 X2 X3 X4).
Qed.

Remark rem_2050 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_44 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_1697 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2049 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2051 : forall X1 X2 X3 X4:term, auto___def_44 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_44 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2050 X1 X2 X3 X4).
Qed.

Remark rem_2052 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_10 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_27 X4 -> auto___def_34 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_861 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
Qed.

Remark rem_2053 : forall X1 X2 X3 X4:term, auto___def_10 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_34 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_10 X3 -> auto___def_27 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_10 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_27 X4 -> auto___def_34 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2052 X1 X2 X3 X4).
Qed.

Remark rem_2054 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_27 X4 -> auto___def_28 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2. intro H. intros.
  elim (rem_1284 (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) H);  intros.
  apply (rem_2053 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2055 : forall X1 X2 X3 X4:term, auto___def_27 X4 -> auto___def_28 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_27 X4 -> auto___def_28 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2054 X1 X2 X3 X4).
Qed.

Remark rem_2056 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_26 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_1316 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2055 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2057 : forall X1 X2 X3 X4:term, auto___def_26 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_26 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2056 X1 X2 X3 X4).
Qed.

Remark rem_2058 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  tauto.
Qed.

Remark rem_2059 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_39 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2058 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_39_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2060 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_4 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___type_1 X1 -> auto___type_4 X1). tauto. exact (rem_1925 X1).
Qed.

Remark rem_2061 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_5 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto_agent X2 -> auto___type_5 X2). tauto. exact (rem_1927 X2).
Qed.

Remark rem_2062 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_42 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2058 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_42_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2063 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_5 X2 /\ auto___def_42 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_5 X2). 2:apply (rem_2061 X1 X2 X3 X4);  assumption.
  cut (auto___def_42 nil). 2:apply (rem_2062 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2064 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_41 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2063 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_41_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2065 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_4 X1 /\ auto___def_41 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_4 X1). 2:apply (rem_2060 X1 X2 X3 X4);  assumption.
  cut (auto___def_41 (cons X2 nil)). 2:apply (rem_2064 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2066 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_40 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2065 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_40_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2067 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_39 sym /\ auto___def_40 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_39 sym). 2:apply (rem_2059 X1 X2 X3 X4);  assumption.
  cut (auto___def_40 (cons X1 (cons X2 nil))). 2:apply (rem_2066 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2068 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_38 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2067 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_38_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2069 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_3 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_3 X3). tauto. exact (rem_1945 X3).
Qed.

Remark rem_2070 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_38 (key sym (cons X1 (cons X2 nil))) /\ auto___type_3 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_38 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_2068 X1 X2 X3 X4);  assumption.
  cut (auto___type_3 X3). 2:apply (rem_2069 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2071 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2070 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_old_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2072 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2073 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_2072 epsilon_mknows_old_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_2074 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_6 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  case (rem_2073 epsilon_mknows_old_p__type_6 X1 A1). clear  epsilon_mknows_old_p__type_6 A1. intros. apply trans___type_6_s_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1. tauto.
Defined.

Remark rem_2075 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old (s X1) -> auto___type_6 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intro H. intros.
  elim (rem_33 X1 H);  intros.
  apply (rem_2074 epsilon_mknows_old_p__type_6 X1);  tauto.
Defined.

Remark rem_2076 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6.  tauto.
Defined.

Remark rem_2077 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto___type_6 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6.  case (rem_2076 epsilon_mknows_old_p__type_6). clear  epsilon_mknows_old_p__type_6. intros. apply trans___type_6_nil_1;  tauto.
 clear  epsilon_mknows_old_p__type_6. tauto.
Defined.

Remark rem_2078 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto_knows_old nil -> auto___type_6 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intro H. intros.
  elim (rem_37 H);  intros.
  apply (rem_2077 epsilon_mknows_old_p__type_6);  tauto.
Defined.

Remark rem_2079 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2080 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  cut (auto___def_44 X1). 2:apply (rem_2079 epsilon_mknows_old_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_2081 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_44 X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  case (rem_2080 epsilon_mknows_old_p__type_6 X1 A1). clear  epsilon_mknows_old_p__type_6 A1. intros. apply trans___type_6_h_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1. tauto.
Defined.

Remark rem_2082 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2083 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  cut (auto___def_26 X1). 2:apply (rem_2082 epsilon_mknows_old_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_2084 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_26 X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  case (rem_2083 epsilon_mknows_old_p__type_6 X1 A1). clear  epsilon_mknows_old_p__type_6 A1. intros. apply trans___type_6_h_2;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1. tauto.
Defined.

Remark rem_2085 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_6 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  case (rem_2073 epsilon_mknows_old_p__type_6 X1 A1). clear  epsilon_mknows_old_p__type_6 A1. intros. apply trans___type_6_h_3;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1. tauto.
Defined.

Remark rem_2086 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old (h X1) -> auto___type_6 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intro H. intros.
  elim (rem_1815 X1 H);  intros.
  apply (rem_2081 epsilon_mknows_old_p__type_6 X1);  tauto.
  apply (rem_2084 epsilon_mknows_old_p__type_6 X1);  tauto.
  apply (rem_2085 epsilon_mknows_old_p__type_6 X1);  tauto.
Defined.

Remark rem_2087 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto___type_6 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6.  case (rem_2076 epsilon_mknows_old_p__type_6). clear  epsilon_mknows_old_p__type_6. intros. apply trans___type_6_respond_id_1;  tauto.
 clear  epsilon_mknows_old_p__type_6. tauto.
Defined.

Remark rem_2088 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto_knows_old respond_id -> auto___type_6 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intro H. intros.
  elim (rem_1818 H);  intros.
  apply (rem_2087 epsilon_mknows_old_p__type_6);  tauto.
Defined.

Remark rem_2089 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_38 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2090 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_38 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_38 X1). tauto. exact (rem_2089 epsilon_mknows_old_p__type_6 X1).
Defined.

Remark rem_2091 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_3 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2092 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_3 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_3 X2). tauto. exact (rem_2091 epsilon_mknows_old_p__type_6 X2).
Defined.

Remark rem_2093 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_38 X1 /\ auto___type_3 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto___def_38 X1). 2:apply (rem_2090 epsilon_mknows_old_p__type_6 X1 X2);  assumption.
  cut (auto___type_3 X2). 2:apply (rem_2092 epsilon_mknows_old_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2094 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_6 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_2093 epsilon_mknows_old_p__type_6 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_6 A1 A2. intros. apply trans___type_6_f2_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1 A2. tauto.
Defined.

Remark rem_2095 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old (f2 X1 X2) -> auto___type_6 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_1826 X1 X2 H);  intros.
  apply (rem_2094 epsilon_mknows_old_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_2096 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto___type_6 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6.  case (rem_2076 epsilon_mknows_old_p__type_6). clear  epsilon_mknows_old_p__type_6. intros. apply trans___type_6_success_1;  tauto.
 clear  epsilon_mknows_old_p__type_6. tauto.
Defined.

Remark rem_2097 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto_knows_old success -> auto___type_6 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intro H. intros.
  elim (rem_1829 H);  intros.
  apply (rem_2096 epsilon_mknows_old_p__type_6);  tauto.
Defined.

Remark rem_2098 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto___type_6 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6.  case (rem_2076 epsilon_mknows_old_p__type_6). clear  epsilon_mknows_old_p__type_6. intros. apply trans___type_6_request_id_1;  tauto.
 clear  epsilon_mknows_old_p__type_6. tauto.
Defined.

Remark rem_2099 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> auto_knows_old request_id -> auto___type_6 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intro H. intros.
  elim (rem_1832 H);  intros.
  apply (rem_2098 epsilon_mknows_old_p__type_6);  tauto.
Defined.

Remark rem_2100 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2101 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_2100 epsilon_mknows_old_p__type_6 X1).
Defined.

Remark rem_2102 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2103 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_2102 epsilon_mknows_old_p__type_6 X2).
Defined.

Remark rem_2104 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_2101 epsilon_mknows_old_p__type_6 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_2103 epsilon_mknows_old_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2105 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_6 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_2104 epsilon_mknows_old_p__type_6 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_6 A1 A2. intros. apply trans___type_6_crypt_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1 A2. tauto.
Defined.

Remark rem_2106 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_2072 epsilon_mknows_old_p__type_6 X1).
Defined.

Remark rem_2107 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2108 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_2107 epsilon_mknows_old_p__type_6 X2).
Defined.

Remark rem_2109 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_2106 epsilon_mknows_old_p__type_6 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_2108 epsilon_mknows_old_p__type_6 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2110 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_2109 epsilon_mknows_old_p__type_6 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_6 A1 A2. intros. apply trans___type_6_crypt_2;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1 A2. tauto.
Defined.

Remark rem_2111 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old (crypt X1 X2) -> auto___type_6 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_6 X1 X2 H);  intros.
  apply (rem_2105 epsilon_mknows_old_p__type_6 X1 X2);  tauto.
  apply (rem_2110 epsilon_mknows_old_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_2112 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2113 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_2112 epsilon_mknows_old_p__type_6 X1);  assumption.
  tauto.
Defined.

Remark rem_2114 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_agent X1 -> auto___type_6 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intros A1.
  case (rem_2113 epsilon_mknows_old_p__type_6 X1 A1). clear  epsilon_mknows_old_p__type_6 A1. intros. apply trans___type_6_nai_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1. tauto.
Defined.

Remark rem_2115 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto_knows_old (nai X1) -> auto___type_6 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1. intro H. intros.
  elim (rem_1849 X1 H);  intros.
  apply (rem_2114 epsilon_mknows_old_p__type_6 X1);  tauto.
Defined.

Remark rem_2116 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2117 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_2116 epsilon_mknows_old_p__type_6 X1).
Defined.

Remark rem_2118 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2119 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2118 epsilon_mknows_old_p__type_6 X2).
Defined.

Remark rem_2120 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2121 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2120 epsilon_mknows_old_p__type_6 X3).
Defined.

Remark rem_2122 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_2117 epsilon_mknows_old_p__type_6 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2119 epsilon_mknows_old_p__type_6 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2121 epsilon_mknows_old_p__type_6 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2123 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_6 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2122 epsilon_mknows_old_p__type_6 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_p__type_6 A1 A2 A3. intros. apply trans___type_6_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1 A2 A3. tauto.
Defined.

Remark rem_2124 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto_knows_old (nonces_old X1 X2 X3) -> auto___type_6 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3. intro H. intros.
  elim (rem_1859 X1 X2 X3 H);  intros.
  apply (rem_2123 epsilon_mknows_old_p__type_6 X1 X2 X3);  tauto.
Defined.

Remark rem_2125 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_6 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intros A1 A2.
  case (rem_2109 epsilon_mknows_old_p__type_6 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_6 A1 A2. intros. apply trans___type_6_cons_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1 A2. tauto.
Defined.

Remark rem_2126 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2:term, auto_knows_old (cons X1 X2) -> auto___type_6 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2. intro H. intros.
  elim (rem_1862 X1 X2 H);  intros.
  apply (rem_2125 epsilon_mknows_old_p__type_6 X1 X2);  tauto.
Defined.

Remark rem_2127 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2128 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_2127 epsilon_mknows_old_p__type_6 X1).
Defined.

Remark rem_2129 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2130 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_2129 epsilon_mknows_old_p__type_6 X2).
Defined.

Remark rem_2131 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2132 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_2131 epsilon_mknows_old_p__type_6 X3).
Defined.

Remark rem_2133 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_2128 epsilon_mknows_old_p__type_6 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_2130 epsilon_mknows_old_p__type_6 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_2132 epsilon_mknows_old_p__type_6 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2134 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_6 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2133 epsilon_mknows_old_p__type_6 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_p__type_6 A1 A2 A3. intros. apply trans___type_6_f1_1;  tauto.
 clear  epsilon_mknows_old_p__type_6 A1 A2 A3. tauto.
Defined.

Remark rem_2135 : (forall X:term, auto_knows_old X -> auto___type_6 X)
    -> forall X1 X2 X3:term, auto_knows_old (f1 X1 X2 X3) -> auto___type_6 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_6. intros X1 X2 X3. intro H. intros.
  elim (rem_1872 X1 X2 X3 H);  intros.
  apply (rem_2134 epsilon_mknows_old_p__type_6 X1 X2 X3);  tauto.
Defined.

Remark rem_2136 : forall X4:term, auto_knows_old X4 -> auto___type_6 X4. (* Induct. *)
Proof.
  fix epsilon_mknows_old_p__type_6 1.
  intro X. case X.
   intro H. elim (rem_1887  H).
   intro H. elim (rem_1885  H).
  intros X1 X2;  exact (rem_2126 epsilon_mknows_old_p__type_6 X1 X2).
  intros X1 X2;  exact (rem_2111 epsilon_mknows_old_p__type_6 X1 X2).
  intros X1 X2 X3;  exact (rem_2135 epsilon_mknows_old_p__type_6 X1 X2 X3).
  intros X1 X2;  exact (rem_2095 epsilon_mknows_old_p__type_6 X1 X2).
  intros X1 X2. intro H. elim (rem_1879 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1884 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1877 X1 X2 H).
  intros X1;  exact (rem_2086 epsilon_mknows_old_p__type_6 X1).
   intro H. elim (rem_1875  H).
  intros X1 X2. intro H. elim (rem_1874 X1 X2 H).
  intros X1;  exact (rem_2115 epsilon_mknows_old_p__type_6 X1).
  exact (rem_2078 epsilon_mknows_old_p__type_6 ).
  intros X1 X2 X3. intro H. elim (rem_1880 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_2124 epsilon_mknows_old_p__type_6 X1 X2 X3).
   intro H. elim (rem_1882  H).
   intro H. elim (rem_1883  H).
  exact (rem_2099 epsilon_mknows_old_p__type_6 ).
  exact (rem_2088 epsilon_mknows_old_p__type_6 ).
  intros X1;  exact (rem_2075 epsilon_mknows_old_p__type_6 X1).
   intro H. elim (rem_1886  H).
  intros X1 X2 X3. intro H. elim (rem_1881 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1878 X1 X2 X3 H).
  exact (rem_2097 epsilon_mknows_old_p__type_6 ).
   intro H. elim (rem_1876  H).
Qed.

Remark rem_2137 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_6 X4. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto_knows_old X4 -> auto___type_6 X4). tauto. exact (rem_2136 X4).
Qed.

Remark rem_2138 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_49 (f4 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2070 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_49_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2139 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_51 (f3 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2070 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_51_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2140 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_51 (f3 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_42 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_51 (f3 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2139 X1 X2 X3 X4);  assumption.
  cut (auto___def_42 nil). 2:apply (rem_2062 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2141 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_50 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2140 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_50_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2142 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_49 (f4 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_50 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_49 (f4 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2138 X1 X2 X3 X4);  assumption.
  cut (auto___def_50 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_2141 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2143 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_48 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2142 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_48_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2144 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_6 X4 /\ auto___def_48 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_6 X4). 2:apply (rem_2137 X1 X2 X3 X4);  assumption.
  cut (auto___def_48 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_2143 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2145 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2144 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_47_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2146 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_47 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_2145 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2147 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2146 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_45_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2148 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_36 (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2070 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_36_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2149 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_36 (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_42 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_36 (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2148 X1 X2 X3 X4);  assumption.
  cut (auto___def_42 nil). 2:apply (rem_2062 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2150 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_46 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2149 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_46_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2151 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) /\ auto___def_46 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_45 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))))). 2:apply (rem_2147 X1 X2 X3 X4);  assumption.
  cut (auto___def_46 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_2150 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2152 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2151 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_44_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2153 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_44 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_2152 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2154 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2153 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_old_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2155 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_old nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2058 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_old_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2156 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) /\ auto_knows_old nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_2154 X1 X2 X3 X4);  assumption.
  cut (auto_knows_old nil). 2:apply (rem_2155 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2157 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2156 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2158 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2071 X1 X2 X3 X4);  assumption.
  cut (auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). 2:apply (rem_2157 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2159 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2158 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2160 : forall X1 X2 X3 X4:term, auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2159 X1 X2 X3 X4).
Qed.

Remark rem_2161 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2 H3 H4. intro H. intros.
  elim (rem_1862 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2160 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2162 : forall X1 X2 X3 X4:term, auto_knows_old (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2161 X1 X2 X3 X4).
Qed.

Remark rem_2163 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2 H3 H4. intro H. intros.
  elim (rem_1815 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_2051 X1 X2 X3 X4);  tauto.
  apply (rem_2057 X1 X2 X3 X4);  tauto.
  apply (rem_2162 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2164 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2163 X1 X2 X3 X4).
Qed.

Remark rem_2165 : forall X1 X2 X3 X4:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2164 X1 X2 X3 X4).
Qed.

Remark rem_2166 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_2165 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2167 : forall X1 X2 X3 X4:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2166 X1 X2 X3 X4).
Qed.

Remark rem_2168 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_2167 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2169 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2168 X1 X2 X3 X4).
Qed.

Remark rem_2170 : forall X1 X2 X3 X4:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2169 X1 X2 X3 X4).
Qed.

Remark rem_2171 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_2170 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2172 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2171 X1 X2 X3 X4).
Qed.

Remark rem_2173 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2172 X1 X2 X3 X4 X5).
Qed.

Remark rem_2174 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1872 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_2173 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2175 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2174 X1 X2 X3 X4 X5).
Qed.

Remark rem_2176 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2175 X1 X2 X3 X4 X5).
Qed.

Remark rem_2177 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_2176 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2178 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2177 X1 X2 X3 X4 X5).
Qed.

Remark rem_2179 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_2178 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2180 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2179 X1 X2 X3 X4 X5).
Qed.

Remark rem_2181 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2180 X1 X2 X3 X4 X5).
Qed.

Remark rem_2182 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_2181 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2183 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_10 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2182 X1 X2 X3 X4 X5).
Qed.

Remark rem_2184 : forall X1 X2:term, auto___def_17 (f5 X1 X2) -> or_1
    (auto___def_18 X1 /\ auto___def_10 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2185 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2184 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
  apply (rem_2183 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2186 : forall X1 X2 X3 X4 X5:term, auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2185 X1 X2 X3 X4 X5).
Qed.

Remark rem_2187 : forall X1:term, auto_knows_old X1 -> auto___def_16 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_5). 2:apply seval_1_model_auto_knows_old. 2:assumption.
  cut ((seval_1 X1)=val_1_4). 2:apply seval_1_model_auto___def_16. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_2188 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2187 X5)). tauto.
Qed.

Remark rem_2189 : forall X1 X2 X3 X4 X5:term, auto_knows_old X5 -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2188 X1 X2 X3 X4 X5).
Qed.

Remark rem_2190 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_6 X5 (f5 (key sym (cons X1 (cons X2 nil))) X3) H);  intros.
  apply (rem_2186 X1 X2 X3 X4 X5);  tauto.
  apply (rem_2189 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2191 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2190 X1 X2 X3 X4 X5).
Qed.

Remark rem_2192 : forall X1 X2 X3 X4 X5:term, auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2191 X1 X2 X3 X4 X5).
Qed.

Remark rem_2193 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1862 (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil H);  intros.
  apply (rem_2192 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2194 : forall X1 X2 X3 X4 X5:term, auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2193 X1 X2 X3 X4 X5).
Qed.

Remark rem_2195 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1862 (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) H);  intros.
  apply (rem_2194 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2196 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2195 X1 X2 X3 X4 X5).
Qed.

Remark rem_2197 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2196 X1 X2 X3 X4 X5).
Qed.

Remark rem_2198 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1862 (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil H);  intros.
  apply (rem_2197 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2199 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2198 X1 X2 X3 X4 X5).
Qed.

Remark rem_2200 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1862 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_2199 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2201 : forall X1 X2 X3 X4 X5:term, auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto_knows_old (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2200 X1 X2 X3 X4 X5).
Qed.

Remark rem_2202 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1862 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_2201 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2203 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2202 X1 X2 X3 X4 X5).
Qed.

Remark rem_2204 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1815 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) H);  intros.
  apply (rem_1913 X1 X2 X3 X4 X5);  tauto.
  apply (rem_2045 X1 X2 X3 X4 X5);  tauto.
  apply (rem_2203 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2205 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2204 X1 X2 X3 X4 X5).
Qed.

Remark rem_2206 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2205 X1 X2 X3 X4 X5).
Qed.

Remark rem_2207 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_2206 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2208 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2207 X1 X2 X3 X4 X5).
Qed.

Remark rem_2209 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_2208 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2210 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2209 X1 X2 X3 X4 X5).
Qed.

Remark rem_2211 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2210 X1 X2 X3 X4 X5).
Qed.

Remark rem_2212 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_2211 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2213 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2212 X1 X2 X3 X4 X5).
Qed.

Remark rem_2214 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_1872 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_2213 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2215 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2214 X1 X2 X3 X4 X5).
Qed.

Remark rem_2216 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2215 X1 X2 X3 X4 X5).
Qed.

Remark rem_2217 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_2216 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2218 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2217 X1 X2 X3 X4 X5).
Qed.

Remark rem_2219 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_2218 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2220 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2219 X1 X2 X3 X4 X5).
Qed.

Remark rem_2221 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2220 X1 X2 X3 X4 X5).
Qed.

Remark rem_2222 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_2221 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2223 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2222 X1 X2 X3 X4 X5).
Qed.

Remark rem_2224 : forall X1 X2 X3 X4 X5:term, auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2184 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
  apply (rem_2223 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2225 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2187 X5)). tauto.
Qed.

Remark rem_2226 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2225 X1 X2 X3 X4 X5).
Qed.

Remark rem_2227 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1872 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_2226 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2228 : forall X1 X2 X3 X4 X5:term, auto_knows_old X5 -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old X5 -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2227 X1 X2 X3 X4 X5).
Qed.

Remark rem_2229 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_6 X5 (f5 (key sym (cons X1 (cons X2 nil))) X3) H);  intros.
  apply (rem_2224 X1 X2 X3 X4 X5);  tauto.
  apply (rem_2228 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2230 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2229 X1 X2 X3 X4 X5).
Qed.

Remark rem_2231 : forall X1 X2 X3 X4 X5:term, auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old nil -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2230 X1 X2 X3 X4 X5).
Qed.

Remark rem_2232 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil H);  intros.
  apply (rem_2231 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2233 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2232 X1 X2 X3 X4 X5).
Qed.

Remark rem_2234 : forall X1 X2 X3 X4 X5:term, auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old nil -> auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_old nil -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2233 X1 X2 X3 X4 X5).
Qed.

Remark rem_2235 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil H);  intros.
  apply (rem_2234 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2236 : forall X1 X2 X3 X4 X5:term, auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2235 X1 X2 X3 X4 X5).
Qed.

Remark rem_2237 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) H);  intros.
  apply (rem_2236 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2238 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old X3 -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2237 X1 X2 X3 X4 X5).
Qed.

Remark rem_2239 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil)) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) H);  intros.
  apply (rem_2238 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2240 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_1862 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil)) H);  intros.
  apply (rem_2239 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2241 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_2240 X1 X2 X3 X4 X5).
Qed.

Remark rem_2242 : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X4 X3 X2 X1 X5.
  cut (auto_knows_old (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2241 X1 X2 X3 X4 X5).
Qed.

Remark rem_2243 : forall X1:term, auto_knows_current X1 -> auto___def_86 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_5). 2:apply seval_1_model_auto_knows_current. 2:assumption.
  cut ((seval_1 X1)=val_1_8). 2:apply seval_1_model_auto___def_86. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_2244 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 (key sym X2) -> auto_knows_current (key sym X2) -> auto_knows_current X1. (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2. intros.
  assert (HH:=(rem_2243 (key sym X2))). tauto.
Qed.

Remark rem_2245 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current (key sym X2) -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_9 X1).
Qed.

Remark rem_2246 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current (key sym X2) -> auto_knows_current (key sym X2) -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current (key sym X2) -> auto_knows_current X1). tauto. exact (rem_2245 X1 X2).
Qed.

Remark rem_2247 : forall X1:term, auto_knows_current X1 -> auto___def_17 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_5). 2:apply seval_1_model_auto_knows_current. 2:assumption.
  cut ((seval_1 X1)=val_1_8). 2:apply seval_1_model_auto___def_17. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_2248 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 (key sym X2) -> auto_knows_current (key sym X2) -> auto_knows_current X1. (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2. intros.
  assert (HH:=(rem_2247 (key sym X2))). tauto.
Qed.

Remark rem_2249 : forall X1 X2:term, auto_knows_current (crypt X1 (key sym X2)) -> auto_knows_current (key sym X2) -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_22 X1 (key sym X2) H);  intros.
  apply (rem_2244 X1 X2);  tauto.
  apply (rem_2246 X1 X2);  tauto.
  apply (rem_2248 X1 X2);  tauto.
Qed.

Remark rem_2250 : forall _big_m X:term, auto_knows_current (crypt _big_m (key sym X)) -> auto_knows_current (key sym X) -> auto_knows_current _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_current (crypt X1 (key sym X2)) -> auto_knows_current (key sym X2) -> auto_knows_current X1). tauto. exact (rem_2249 X1 X2).
Qed.

Remark rem_2251 : forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_3 X1);  assumption.
  tauto.
Qed.

Remark rem_2252 : forall X1:term, auto_knows_old X1 -> auto_knows_old (s X1). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1.
  case (rem_2251 X1 A1). clear  A1. intros. apply trans_knows_old_s_1;  tauto.
 clear  A1. tauto.
Qed.

Remark rem_2253 : forall _big_m:term, auto_knows_old _big_m -> auto_knows_old (s _big_m). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_old X1 -> auto_knows_old (s X1)). tauto. exact (rem_2252 X1).
Qed.

Remark rem_2254 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2255 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_2254 epsilon_mknows_current_p__def_78 X1);  assumption.
  tauto.
Defined.

Remark rem_2256 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current X1 -> auto___def_78 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  case (rem_2255 epsilon_mknows_current_p__def_78 X1 A1). clear  epsilon_mknows_current_p__def_78 A1. intros. apply trans___def_78_s_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1. tauto.
Defined.

Remark rem_2257 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current (s X1) -> auto___def_78 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intro H. intros.
  elim (rem_27 X1 H);  intros.
  apply (rem_2256 epsilon_mknows_current_p__def_78 X1);  tauto.
Defined.

Remark rem_2258 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78.  tauto.
Defined.

Remark rem_2259 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto___def_78 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78.  case (rem_2258 epsilon_mknows_current_p__def_78). clear  epsilon_mknows_current_p__def_78. intros. apply trans___def_78_nil_1;  tauto.
 clear  epsilon_mknows_current_p__def_78. tauto.
Defined.

Remark rem_2260 : auto_knows_current nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2261 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto_knows_current nil -> auto___def_78 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intro H. intros.
  elim (rem_2260 H);  intros.
  apply (rem_2259 epsilon_mknows_current_p__def_78);  tauto.
Defined.

Remark rem_2262 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_56 X1 -> auto___def_56 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2263 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_56 X1 -> auto___def_56 X1). tauto. exact (rem_2262 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2264 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto___def_57 X2 -> auto___def_57 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2265 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_57 X2). tauto. exact (rem_2264 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2266 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_2263 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_2265 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2267 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_78 (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2266 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_f3_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2268 : forall X1 X2:term, auto_knows_current (f3 X1 X2) -> or_1
    (auto___def_56 X1 /\ auto___def_57 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2269 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current (f3 X1 X2) -> auto___def_78 (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intro H. intros.
  elim (rem_2268 X1 X2 H);  intros.
  apply (rem_2267 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
Defined.

Remark rem_2270 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2271 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_2270 epsilon_mknows_current_p__def_78 X1);  assumption.
  tauto.
Defined.

Remark rem_2272 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_78 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  case (rem_2271 epsilon_mknows_current_p__def_78 X1 A1). clear  epsilon_mknows_current_p__def_78 A1. intros. apply trans___def_78_h_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1. tauto.
Defined.

Remark rem_2273 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2274 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  cut (auto___def_91 X1). 2:apply (rem_2273 epsilon_mknows_current_p__def_78 X1);  assumption.
  tauto.
Defined.

Remark rem_2275 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_78 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  case (rem_2274 epsilon_mknows_current_p__def_78 X1 A1). clear  epsilon_mknows_current_p__def_78 A1. intros. apply trans___def_78_h_2;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1. tauto.
Defined.

Remark rem_2276 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current X1 -> auto___def_78 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  case (rem_2255 epsilon_mknows_current_p__def_78 X1 A1). clear  epsilon_mknows_current_p__def_78 A1. intros. apply trans___def_78_h_3;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1. tauto.
Defined.

Remark rem_2277 : forall X1:term, auto_knows_current (h X1) -> or_3
    (auto___def_109 X1)    (auto___def_91 X1)    (auto_knows_current X1).
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_2278 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current (h X1) -> auto___def_78 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intro H. intros.
  elim (rem_2277 X1 H);  intros.
  apply (rem_2272 epsilon_mknows_current_p__def_78 X1);  tauto.
  apply (rem_2275 epsilon_mknows_current_p__def_78 X1);  tauto.
  apply (rem_2276 epsilon_mknows_current_p__def_78 X1);  tauto.
Defined.

Remark rem_2279 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_78 X1 -> auto___def_78 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2280 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_78 X1 -> auto___def_78 X1). tauto. exact (rem_2279 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2281 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2282 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2281 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2283 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2284 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2283 epsilon_mknows_current_p__def_78 X3).
Defined.

Remark rem_2285 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_78 X1). 2:apply (rem_2280 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2282 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2284 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2286 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2285 epsilon_mknows_current_p__def_78 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__def_78 A1 A2 A3. intros. apply trans___def_78_nonces_current_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2 A3. tauto.
Defined.

Remark rem_2287 : forall X1 X2 X3:term, auto_knows_current (nonces_current X1 X2 X3) -> or_1
    (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2288 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto_knows_current (nonces_current X1 X2 X3) -> auto___def_78 (nonces_current X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intro H. intros.
  elim (rem_2287 X1 X2 X3 H);  intros.
  apply (rem_2286 epsilon_mknows_current_p__def_78 X1 X2 X3);  tauto.
Defined.

Remark rem_2289 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto___def_78 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78.  case (rem_2258 epsilon_mknows_current_p__def_78). clear  epsilon_mknows_current_p__def_78. intros. apply trans___def_78_respond_id_1;  tauto.
 clear  epsilon_mknows_current_p__def_78. tauto.
Defined.

Remark rem_2290 : auto_knows_current respond_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2291 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto_knows_current respond_id -> auto___def_78 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intro H. intros.
  elim (rem_2290 H);  intros.
  apply (rem_2289 epsilon_mknows_current_p__def_78);  tauto.
Defined.

Remark rem_2292 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_103 X1 -> auto___def_103 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2293 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_103 X1 -> auto___def_103 X1). tauto. exact (rem_2292 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2294 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto___type_13 X2 -> auto___type_13 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2295 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___type_13 X2 -> auto___type_13 X2). tauto. exact (rem_2294 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2296 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_2293 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_2295 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2297 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_78 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2296 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_f2_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2298 : forall X1 X2:term, auto_knows_current (f2 X1 X2) -> or_1
    (auto___def_103 X1 /\ auto___type_13 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2299 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current (f2 X1 X2) -> auto___def_78 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intro H. intros.
  elim (rem_2298 X1 X2 H);  intros.
  apply (rem_2297 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
Defined.

Remark rem_2300 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto___def_78 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78.  case (rem_2258 epsilon_mknows_current_p__def_78). clear  epsilon_mknows_current_p__def_78. intros. apply trans___def_78_success_1;  tauto.
 clear  epsilon_mknows_current_p__def_78. tauto.
Defined.

Remark rem_2301 : auto_knows_current success -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2302 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto_knows_current success -> auto___def_78 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intro H. intros.
  elim (rem_2301 H);  intros.
  apply (rem_2300 epsilon_mknows_current_p__def_78);  tauto.
Defined.

Remark rem_2303 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto___def_78 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78.  case (rem_2258 epsilon_mknows_current_p__def_78). clear  epsilon_mknows_current_p__def_78. intros. apply trans___def_78_request_id_1;  tauto.
 clear  epsilon_mknows_current_p__def_78. tauto.
Defined.

Remark rem_2304 : auto_knows_current request_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2305 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> auto_knows_current request_id -> auto___def_78 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intro H. intros.
  elim (rem_2304 H);  intros.
  apply (rem_2303 epsilon_mknows_current_p__def_78);  tauto.
Defined.

Remark rem_2306 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_85 X1 -> auto___def_85 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2307 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_85 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_85 X1 -> auto___def_85 X1). tauto. exact (rem_2306 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2308 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto___def_86 X2 -> auto___def_86 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2309 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_86 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_86 X2 -> auto___def_86 X2). tauto. exact (rem_2308 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2310 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> (auto___def_85 X1 /\ auto___def_86 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  cut (auto___def_85 X1). 2:apply (rem_2307 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  cut (auto___def_86 X2). 2:apply (rem_2309 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2311 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_78 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2310 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_crypt_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2312 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_2254 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2313 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto_knows_current X2 -> auto_knows_current X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2314 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto_knows_current X2 -> auto_knows_current X2). tauto. exact (rem_2313 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2315 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_2312 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_2314 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2316 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___def_78 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2315 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_crypt_2;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2317 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2318 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_2317 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2319 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2320 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_2319 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2321 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_2318 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_2320 epsilon_mknows_current_p__def_78 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2322 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_78 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2321 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_crypt_3;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2323 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current (crypt X1 X2) -> auto___def_78 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intro H. intros.
  elim (rem_22 X1 X2 H);  intros.
  apply (rem_2311 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
  apply (rem_2316 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
  apply (rem_2322 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
Defined.

Remark rem_2324 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2325 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_2324 epsilon_mknows_current_p__def_78 X1);  assumption.
  tauto.
Defined.

Remark rem_2326 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_agent X1 -> auto___def_78 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intros A1.
  case (rem_2325 epsilon_mknows_current_p__def_78 X1 A1). clear  epsilon_mknows_current_p__def_78 A1. intros. apply trans___def_78_nai_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1. tauto.
Defined.

Remark rem_2327 : forall X1:term, auto_knows_current (nai X1) -> or_1
    (auto_agent X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2328 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto_knows_current (nai X1) -> auto___def_78 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1. intro H. intros.
  elim (rem_2327 X1 H);  intros.
  apply (rem_2326 epsilon_mknows_current_p__def_78 X1);  tauto.
Defined.

Remark rem_2329 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_78 (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2266 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_f4_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2330 : forall X1 X2:term, auto_knows_current (f4 X1 X2) -> or_1
    (auto___def_56 X1 /\ auto___def_57 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2331 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current (f4 X1 X2) -> auto___def_78 (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intro H. intros.
  elim (rem_2330 X1 X2 H);  intros.
  apply (rem_2329 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
Defined.

Remark rem_2332 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2333 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_2332 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2334 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2281 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2335 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2283 epsilon_mknows_current_p__def_78 X3).
Defined.

Remark rem_2336 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_2333 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2334 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2335 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2337 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2336 epsilon_mknows_current_p__def_78 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__def_78 A1 A2 A3. intros. apply trans___def_78_nonces_old_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2 A3. tauto.
Defined.

Remark rem_2338 : forall X1 X2 X3:term, auto_knows_current (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2339 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto_knows_current (nonces_old X1 X2 X3) -> auto___def_78 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intro H. intros.
  elim (rem_2338 X1 X2 X3 H);  intros.
  apply (rem_2337 epsilon_mknows_current_p__def_78 X1 X2 X3);  tauto.
Defined.

Remark rem_2340 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___def_78 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intros A1 A2.
  case (rem_2315 epsilon_mknows_current_p__def_78 X1 X2 A1 A2). clear  epsilon_mknows_current_p__def_78 A1 A2. intros. apply trans___def_78_cons_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2. tauto.
Defined.

Remark rem_2341 : forall X1 X2:term, auto_knows_current (cons X1 X2) -> or_1
    (auto_knows_current X1 /\ auto_knows_current X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2342 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2:term, auto_knows_current (cons X1 X2) -> auto___def_78 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2. intro H. intros.
  elim (rem_2341 X1 X2 H);  intros.
  apply (rem_2340 epsilon_mknows_current_p__def_78 X1 X2);  tauto.
Defined.

Remark rem_2343 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2344 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_2343 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2345 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2346 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_2345 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2347 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2348 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_2347 epsilon_mknows_current_p__def_78 X3).
Defined.

Remark rem_2349 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_2344 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_2346 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_2348 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2350 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_78 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2349 epsilon_mknows_current_p__def_78 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__def_78 A1 A2 A3. intros. apply trans___def_78_f1_1;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2 A3. tauto.
Defined.

Remark rem_2351 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1:term, auto___def_87 X1 -> auto___def_87 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2352 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_87 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_87 X1 -> auto___def_87 X1). tauto. exact (rem_2351 epsilon_mknows_current_p__def_78 X1).
Defined.

Remark rem_2353 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X2:term, auto___def_85 X2 -> auto___def_85 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2354 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_85 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_85 X2 -> auto___def_85 X2). tauto. exact (rem_2353 epsilon_mknows_current_p__def_78 X2).
Defined.

Remark rem_2355 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X3:term, auto___def_79 X3 -> auto___def_79 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2356 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_79 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3.
  cut (auto___def_79 X3 -> auto___def_79 X3). tauto. exact (rem_2355 epsilon_mknows_current_p__def_78 X3).
Defined.

Remark rem_2357 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> (auto___def_87 X1 /\ auto___def_85 X2 /\ auto___def_79 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_87 X1). 2:apply (rem_2352 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto___def_85 X2). 2:apply (rem_2354 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  cut (auto___def_79 X3). 2:apply (rem_2356 epsilon_mknows_current_p__def_78 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2358 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_78 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2357 epsilon_mknows_current_p__def_78 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__def_78 A1 A2 A3. intros. apply trans___def_78_f1_2;  tauto.
 clear  epsilon_mknows_current_p__def_78 A1 A2 A3. tauto.
Defined.

Remark rem_2359 : forall X1 X2 X3:term, auto_knows_current (f1 X1 X2 X3) -> or_2
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
    (auto___def_87 X1 /\ auto___def_85 X2 /\ auto___def_79 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_2_intro_1; tauto.
  intros. apply or_2_intro_2; tauto.
Qed.

Remark rem_2360 : (forall X:term, auto_knows_current X -> auto___def_78 X)
    -> forall X1 X2 X3:term, auto_knows_current (f1 X1 X2 X3) -> auto___def_78 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__def_78. intros X1 X2 X3. intro H. intros.
  elim (rem_2359 X1 X2 X3 H);  intros.
  apply (rem_2350 epsilon_mknows_current_p__def_78 X1 X2 X3);  tauto.
  apply (rem_2358 epsilon_mknows_current_p__def_78 X1 X2 X3);  tauto.
Defined.

Remark rem_2361 : forall X1 X2:term, auto_knows_current (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2362 : auto_knows_current i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2363 : auto_knows_current sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2364 : forall X1 X2:term, auto_knows_current (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2365 : forall X1 X2 X3:term, auto_knows_current (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2366 : forall X1 X2 X3:term, auto_knows_current (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2367 : auto_knows_current prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2368 : auto_knows_current pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2369 : auto_knows_current bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2370 : auto_knows_current server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2371 : auto_knows_current alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2372 : forall X1:term, auto_knows_current X1 -> auto___def_78 X1. (* Induct. *)
Proof.
  fix epsilon_mknows_current_p__def_78 1.
  intro X. case X.
   intro H. elim (rem_2371  H).
   intro H. elim (rem_2369  H).
  intros X1 X2;  exact (rem_2342 epsilon_mknows_current_p__def_78 X1 X2).
  intros X1 X2;  exact (rem_2323 epsilon_mknows_current_p__def_78 X1 X2).
  intros X1 X2 X3;  exact (rem_2360 epsilon_mknows_current_p__def_78 X1 X2 X3).
  intros X1 X2;  exact (rem_2299 epsilon_mknows_current_p__def_78 X1 X2).
  intros X1 X2;  exact (rem_2269 epsilon_mknows_current_p__def_78 X1 X2).
  intros X1 X2;  exact (rem_2331 epsilon_mknows_current_p__def_78 X1 X2).
  intros X1 X2. intro H. elim (rem_2364 X1 X2 H).
  intros X1;  exact (rem_2278 epsilon_mknows_current_p__def_78 X1).
   intro H. elim (rem_2362  H).
  intros X1 X2. intro H. elim (rem_2361 X1 X2 H).
  intros X1;  exact (rem_2328 epsilon_mknows_current_p__def_78 X1).
  exact (rem_2261 epsilon_mknows_current_p__def_78 ).
  intros X1 X2 X3;  exact (rem_2288 epsilon_mknows_current_p__def_78 X1 X2 X3).
  intros X1 X2 X3;  exact (rem_2339 epsilon_mknows_current_p__def_78 X1 X2 X3).
   intro H. elim (rem_2367  H).
   intro H. elim (rem_2368  H).
  exact (rem_2305 epsilon_mknows_current_p__def_78 ).
  exact (rem_2291 epsilon_mknows_current_p__def_78 ).
  intros X1;  exact (rem_2257 epsilon_mknows_current_p__def_78 X1).
   intro H. elim (rem_2370  H).
  intros X1 X2 X3. intro H. elim (rem_2366 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2365 X1 X2 X3 H).
  exact (rem_2302 epsilon_mknows_current_p__def_78 ).
   intro H. elim (rem_2363  H).
Qed.

Remark rem_2373 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_78 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current X1 -> auto___def_78 X1). tauto. exact (rem_2372 X1).
Qed.

Remark rem_2374 : forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_2375 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2374 X2).
Qed.

Remark rem_2376 : forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_2377 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2376 X3).
Qed.

Remark rem_2378 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_78 X1). 2:apply (rem_2373 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2375 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2377 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2379 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2378 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_nonces_current_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2380 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_85 (session_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2378 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_85_session_current_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2381 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  tauto.
Qed.

Remark rem_2382 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_19 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2381 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_19_sym_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2383 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_magent_p__type_1.  tauto.
Defined.

Remark rem_2384 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto___type_1 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_1.  case (rem_2383 epsilon_magent_p__type_1). clear  epsilon_magent_p__type_1. intros. apply trans___type_1_i_1;  tauto.
 clear  epsilon_magent_p__type_1. tauto.
Defined.

Remark rem_2385 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto_agent i -> auto___type_1 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_1. intro H. intros.
  elim (rem_486 H);  intros.
  apply (rem_2384 epsilon_magent_p__type_1);  tauto.
Defined.

Remark rem_2386 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto___type_1 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_1.  case (rem_2383 epsilon_magent_p__type_1). clear  epsilon_magent_p__type_1. intros. apply trans___type_1_bob_1;  tauto.
 clear  epsilon_magent_p__type_1. tauto.
Defined.

Remark rem_2387 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto_agent bob -> auto___type_1 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_1. intro H. intros.
  elim (rem_489 H);  intros.
  apply (rem_2386 epsilon_magent_p__type_1);  tauto.
Defined.

Remark rem_2388 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto___type_1 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_1.  case (rem_2383 epsilon_magent_p__type_1). clear  epsilon_magent_p__type_1. intros. apply trans___type_1_server_1;  tauto.
 clear  epsilon_magent_p__type_1. tauto.
Defined.

Remark rem_2389 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto_agent server -> auto___type_1 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_1. intro H. intros.
  elim (rem_492 H);  intros.
  apply (rem_2388 epsilon_magent_p__type_1);  tauto.
Defined.

Remark rem_2390 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto___type_1 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_1.  case (rem_2383 epsilon_magent_p__type_1). clear  epsilon_magent_p__type_1. intros. apply trans___type_1_alice_1;  tauto.
 clear  epsilon_magent_p__type_1. tauto.
Defined.

Remark rem_2391 : (forall X:term, auto_agent X -> auto___type_1 X)
    -> auto_agent alice -> auto___type_1 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_1. intro H. intros.
  elim (rem_495 H);  intros.
  apply (rem_2390 epsilon_magent_p__type_1);  tauto.
Defined.

Remark rem_2392 : forall X2:term, auto_agent X2 -> auto___type_1 X2. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_1 1.
  intro X. case X.
  exact (rem_2391 epsilon_magent_p__type_1 ).
  exact (rem_2387 epsilon_magent_p__type_1 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_2385 epsilon_magent_p__type_1 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_2389 epsilon_magent_p__type_1 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_2393 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___type_1 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X2 -> auto___type_1 X2). tauto. exact (rem_2392 X2).
Qed.

Remark rem_2394 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_22 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2381 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_22_nil_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2395 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto_agent X3 /\ auto___def_22 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_agent X3). 2:apply (rem_2377 X1 X2 X3);  assumption.
  cut (auto___def_22 nil). 2:apply (rem_2394 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2396 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_21 (cons X3 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2395 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_21_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2397 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___type_1 X2 /\ auto___def_21 (cons X3 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___type_1 X2). 2:apply (rem_2393 X1 X2 X3);  assumption.
  cut (auto___def_21 (cons X3 nil)). 2:apply (rem_2396 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2398 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_20 (cons X2 (cons X3 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2397 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_20_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2399 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_19 sym /\ auto___def_20 (cons X2 (cons X3 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_19 sym). 2:apply (rem_2382 X1 X2 X3);  assumption.
  cut (auto___def_20 (cons X2 (cons X3 nil))). 2:apply (rem_2398 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2400 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_87 (key sym (cons X2 (cons X3 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2399 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_87_key_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2401 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_79 (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2378 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_79_nonces_current_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2402 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_87 (key sym (cons X2 (cons X3 nil))) /\ auto___def_79 (nonces_current X1 X2 X3)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_87 (key sym (cons X2 (cons X3 nil)))). 2:apply (rem_2400 X1 X2 X3);  assumption.
  cut (auto___def_79 (nonces_current X1 X2 X3)). 2:apply (rem_2401 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2403 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_86 (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2402 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_86_f5_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2404 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_85 (session_current X1 X2 X3) /\ auto___def_86 (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_85 (session_current X1 X2 X3)). 2:apply (rem_2380 X1 X2 X3);  assumption.
  cut (auto___def_86 (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))). 2:apply (rem_2403 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2405 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2404 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_crypt_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2406 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_87 (key sym (cons X2 (cons X3 nil))) /\ auto___def_85 (session_current X1 X2 X3) /\ auto___def_79 (nonces_current X1 X2 X3)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_87 (key sym (cons X2 (cons X3 nil)))). 2:apply (rem_2400 X1 X2 X3);  assumption.
  cut (auto___def_85 (session_current X1 X2 X3)). 2:apply (rem_2380 X1 X2 X3);  assumption.
  cut (auto___def_79 (nonces_current X1 X2 X3)). 2:apply (rem_2401 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2407 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2406 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_f1_2;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2408 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2381 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_nil_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2409 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto_knows_current (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) /\ auto_knows_current nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_current (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3))). 2:apply (rem_2407 X1 X2 X3);  assumption.
  cut (auto_knows_current nil). 2:apply (rem_2408 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2410 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2409 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2411 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto_knows_current (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) /\ auto_knows_current (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_current (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)))). 2:apply (rem_2405 X1 X2 X3);  assumption.
  cut (auto_knows_current (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)). 2:apply (rem_2410 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2412 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2411 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2413 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2414 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_2413 epsilon_mknows_current_p__type_12 X1);  assumption.
  tauto.
Defined.

Remark rem_2415 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current X1 -> auto___type_12 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  case (rem_2414 epsilon_mknows_current_p__type_12 X1 A1). clear  epsilon_mknows_current_p__type_12 A1. intros. apply trans___type_12_s_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1. tauto.
Defined.

Remark rem_2416 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current (s X1) -> auto___type_12 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intro H. intros.
  elim (rem_27 X1 H);  intros.
  apply (rem_2415 epsilon_mknows_current_p__type_12 X1);  tauto.
Defined.

Remark rem_2417 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12.  tauto.
Defined.

Remark rem_2418 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto___type_12 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12.  case (rem_2417 epsilon_mknows_current_p__type_12). clear  epsilon_mknows_current_p__type_12. intros. apply trans___type_12_nil_1;  tauto.
 clear  epsilon_mknows_current_p__type_12. tauto.
Defined.

Remark rem_2419 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto_knows_current nil -> auto___type_12 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intro H. intros.
  elim (rem_2260 H);  intros.
  apply (rem_2418 epsilon_mknows_current_p__type_12);  tauto.
Defined.

Remark rem_2420 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_56 X1 -> auto___def_56 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2421 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_56 X1 -> auto___def_56 X1). tauto. exact (rem_2420 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2422 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto___def_57 X2 -> auto___def_57 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2423 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_57 X2). tauto. exact (rem_2422 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2424 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_2421 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_2423 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2425 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_12 (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2424 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_f3_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2426 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current (f3 X1 X2) -> auto___type_12 (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intro H. intros.
  elim (rem_2268 X1 X2 H);  intros.
  apply (rem_2425 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
Defined.

Remark rem_2427 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2428 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_2427 epsilon_mknows_current_p__type_12 X1);  assumption.
  tauto.
Defined.

Remark rem_2429 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_109 X1 -> auto___type_12 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  case (rem_2428 epsilon_mknows_current_p__type_12 X1 A1). clear  epsilon_mknows_current_p__type_12 A1. intros. apply trans___type_12_h_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1. tauto.
Defined.

Remark rem_2430 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2431 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  cut (auto___def_91 X1). 2:apply (rem_2430 epsilon_mknows_current_p__type_12 X1);  assumption.
  tauto.
Defined.

Remark rem_2432 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_91 X1 -> auto___type_12 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  case (rem_2431 epsilon_mknows_current_p__type_12 X1 A1). clear  epsilon_mknows_current_p__type_12 A1. intros. apply trans___type_12_h_2;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1. tauto.
Defined.

Remark rem_2433 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current X1 -> auto___type_12 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  case (rem_2414 epsilon_mknows_current_p__type_12 X1 A1). clear  epsilon_mknows_current_p__type_12 A1. intros. apply trans___type_12_h_3;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1. tauto.
Defined.

Remark rem_2434 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current (h X1) -> auto___type_12 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intro H. intros.
  elim (rem_2277 X1 H);  intros.
  apply (rem_2429 epsilon_mknows_current_p__type_12 X1);  tauto.
  apply (rem_2432 epsilon_mknows_current_p__type_12 X1);  tauto.
  apply (rem_2433 epsilon_mknows_current_p__type_12 X1);  tauto.
Defined.

Remark rem_2435 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_78 X1 -> auto___def_78 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2436 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_78 X1 -> auto___def_78 X1). tauto. exact (rem_2435 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2437 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2438 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2437 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2439 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2440 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2439 epsilon_mknows_current_p__type_12 X3).
Defined.

Remark rem_2441 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_78 X1). 2:apply (rem_2436 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2438 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2440 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2442 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_12 (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2441 epsilon_mknows_current_p__type_12 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_12 A1 A2 A3. intros. apply trans___type_12_nonces_current_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2 A3. tauto.
Defined.

Remark rem_2443 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto_knows_current (nonces_current X1 X2 X3) -> auto___type_12 (nonces_current X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intro H. intros.
  elim (rem_2287 X1 X2 X3 H);  intros.
  apply (rem_2442 epsilon_mknows_current_p__type_12 X1 X2 X3);  tauto.
Defined.

Remark rem_2444 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto___type_12 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12.  case (rem_2417 epsilon_mknows_current_p__type_12). clear  epsilon_mknows_current_p__type_12. intros. apply trans___type_12_respond_id_1;  tauto.
 clear  epsilon_mknows_current_p__type_12. tauto.
Defined.

Remark rem_2445 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto_knows_current respond_id -> auto___type_12 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intro H. intros.
  elim (rem_2290 H);  intros.
  apply (rem_2444 epsilon_mknows_current_p__type_12);  tauto.
Defined.

Remark rem_2446 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_103 X1 -> auto___def_103 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2447 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_103 X1 -> auto___def_103 X1). tauto. exact (rem_2446 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2448 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto___type_13 X2 -> auto___type_13 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2449 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___type_13 X2 -> auto___type_13 X2). tauto. exact (rem_2448 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2450 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_2447 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_2449 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2451 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_12 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2450 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_f2_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2452 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current (f2 X1 X2) -> auto___type_12 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intro H. intros.
  elim (rem_2298 X1 X2 H);  intros.
  apply (rem_2451 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
Defined.

Remark rem_2453 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto___type_12 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12.  case (rem_2417 epsilon_mknows_current_p__type_12). clear  epsilon_mknows_current_p__type_12. intros. apply trans___type_12_success_1;  tauto.
 clear  epsilon_mknows_current_p__type_12. tauto.
Defined.

Remark rem_2454 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto_knows_current success -> auto___type_12 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intro H. intros.
  elim (rem_2301 H);  intros.
  apply (rem_2453 epsilon_mknows_current_p__type_12);  tauto.
Defined.

Remark rem_2455 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto___type_12 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12.  case (rem_2417 epsilon_mknows_current_p__type_12). clear  epsilon_mknows_current_p__type_12. intros. apply trans___type_12_request_id_1;  tauto.
 clear  epsilon_mknows_current_p__type_12. tauto.
Defined.

Remark rem_2456 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> auto_knows_current request_id -> auto___type_12 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intro H. intros.
  elim (rem_2304 H);  intros.
  apply (rem_2455 epsilon_mknows_current_p__type_12);  tauto.
Defined.

Remark rem_2457 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_85 X1 -> auto___def_85 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2458 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_85 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_85 X1 -> auto___def_85 X1). tauto. exact (rem_2457 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2459 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto___def_86 X2 -> auto___def_86 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2460 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_86 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_86 X2 -> auto___def_86 X2). tauto. exact (rem_2459 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2461 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> (auto___def_85 X1 /\ auto___def_86 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  cut (auto___def_85 X1). 2:apply (rem_2458 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  cut (auto___def_86 X2). 2:apply (rem_2460 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2462 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___type_12 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2461 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_crypt_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2463 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_2413 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2464 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto_knows_current X2 -> auto_knows_current X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2465 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto_knows_current X2 -> auto_knows_current X2). tauto. exact (rem_2464 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2466 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_2463 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_2465 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2467 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_12 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2466 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_crypt_2;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2468 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2469 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_2468 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2470 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2471 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_2470 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2472 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_2469 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_2471 epsilon_mknows_current_p__type_12 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2473 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_12 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2472 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_crypt_3;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2474 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current (crypt X1 X2) -> auto___type_12 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intro H. intros.
  elim (rem_22 X1 X2 H);  intros.
  apply (rem_2462 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
  apply (rem_2467 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
  apply (rem_2473 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
Defined.

Remark rem_2475 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2476 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_2475 epsilon_mknows_current_p__type_12 X1);  assumption.
  tauto.
Defined.

Remark rem_2477 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_agent X1 -> auto___type_12 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intros A1.
  case (rem_2476 epsilon_mknows_current_p__type_12 X1 A1). clear  epsilon_mknows_current_p__type_12 A1. intros. apply trans___type_12_nai_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1. tauto.
Defined.

Remark rem_2478 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto_knows_current (nai X1) -> auto___type_12 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1. intro H. intros.
  elim (rem_2327 X1 H);  intros.
  apply (rem_2477 epsilon_mknows_current_p__type_12 X1);  tauto.
Defined.

Remark rem_2479 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_12 (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2424 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_f4_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2480 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current (f4 X1 X2) -> auto___type_12 (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intro H. intros.
  elim (rem_2330 X1 X2 H);  intros.
  apply (rem_2479 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
Defined.

Remark rem_2481 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2482 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_2481 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2483 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2437 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2484 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2439 epsilon_mknows_current_p__type_12 X3).
Defined.

Remark rem_2485 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_2482 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2483 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2484 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2486 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_12 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2485 epsilon_mknows_current_p__type_12 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_12 A1 A2 A3. intros. apply trans___type_12_nonces_old_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2 A3. tauto.
Defined.

Remark rem_2487 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto_knows_current (nonces_old X1 X2 X3) -> auto___type_12 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intro H. intros.
  elim (rem_2338 X1 X2 X3 H);  intros.
  apply (rem_2486 epsilon_mknows_current_p__type_12 X1 X2 X3);  tauto.
Defined.

Remark rem_2488 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_12 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intros A1 A2.
  case (rem_2466 epsilon_mknows_current_p__type_12 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_12 A1 A2. intros. apply trans___type_12_cons_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2. tauto.
Defined.

Remark rem_2489 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2:term, auto_knows_current (cons X1 X2) -> auto___type_12 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2. intro H. intros.
  elim (rem_2341 X1 X2 H);  intros.
  apply (rem_2488 epsilon_mknows_current_p__type_12 X1 X2);  tauto.
Defined.

Remark rem_2490 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2491 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_2490 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2492 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2493 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_2492 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2494 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2495 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_2494 epsilon_mknows_current_p__type_12 X3).
Defined.

Remark rem_2496 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_2491 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_2493 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_2495 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2497 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_12 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2496 epsilon_mknows_current_p__type_12 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_12 A1 A2 A3. intros. apply trans___type_12_f1_1;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2 A3. tauto.
Defined.

Remark rem_2498 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1:term, auto___def_87 X1 -> auto___def_87 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2499 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_87 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_87 X1 -> auto___def_87 X1). tauto. exact (rem_2498 epsilon_mknows_current_p__type_12 X1).
Defined.

Remark rem_2500 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X2:term, auto___def_85 X2 -> auto___def_85 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2501 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_85 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_85 X2 -> auto___def_85 X2). tauto. exact (rem_2500 epsilon_mknows_current_p__type_12 X2).
Defined.

Remark rem_2502 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X3:term, auto___def_79 X3 -> auto___def_79 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2503 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_79 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3.
  cut (auto___def_79 X3 -> auto___def_79 X3). tauto. exact (rem_2502 epsilon_mknows_current_p__type_12 X3).
Defined.

Remark rem_2504 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> (auto___def_87 X1 /\ auto___def_85 X2 /\ auto___def_79 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_87 X1). 2:apply (rem_2499 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto___def_85 X2). 2:apply (rem_2501 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  cut (auto___def_79 X3). 2:apply (rem_2503 epsilon_mknows_current_p__type_12 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2505 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___type_12 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2504 epsilon_mknows_current_p__type_12 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_12 A1 A2 A3. intros. apply trans___type_12_f1_2;  tauto.
 clear  epsilon_mknows_current_p__type_12 A1 A2 A3. tauto.
Defined.

Remark rem_2506 : (forall X:term, auto_knows_current X -> auto___type_12 X)
    -> forall X1 X2 X3:term, auto_knows_current (f1 X1 X2 X3) -> auto___type_12 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_12. intros X1 X2 X3. intro H. intros.
  elim (rem_2359 X1 X2 X3 H);  intros.
  apply (rem_2497 epsilon_mknows_current_p__type_12 X1 X2 X3);  tauto.
  apply (rem_2505 epsilon_mknows_current_p__type_12 X1 X2 X3);  tauto.
Defined.

Remark rem_2507 : forall X1:term, auto_knows_current X1 -> auto___type_12 X1. (* Induct. *)
Proof.
  fix epsilon_mknows_current_p__type_12 1.
  intro X. case X.
   intro H. elim (rem_2371  H).
   intro H. elim (rem_2369  H).
  intros X1 X2;  exact (rem_2489 epsilon_mknows_current_p__type_12 X1 X2).
  intros X1 X2;  exact (rem_2474 epsilon_mknows_current_p__type_12 X1 X2).
  intros X1 X2 X3;  exact (rem_2506 epsilon_mknows_current_p__type_12 X1 X2 X3).
  intros X1 X2;  exact (rem_2452 epsilon_mknows_current_p__type_12 X1 X2).
  intros X1 X2;  exact (rem_2426 epsilon_mknows_current_p__type_12 X1 X2).
  intros X1 X2;  exact (rem_2480 epsilon_mknows_current_p__type_12 X1 X2).
  intros X1 X2. intro H. elim (rem_2364 X1 X2 H).
  intros X1;  exact (rem_2434 epsilon_mknows_current_p__type_12 X1).
   intro H. elim (rem_2362  H).
  intros X1 X2. intro H. elim (rem_2361 X1 X2 H).
  intros X1;  exact (rem_2478 epsilon_mknows_current_p__type_12 X1).
  exact (rem_2419 epsilon_mknows_current_p__type_12 ).
  intros X1 X2 X3;  exact (rem_2443 epsilon_mknows_current_p__type_12 X1 X2 X3).
  intros X1 X2 X3;  exact (rem_2487 epsilon_mknows_current_p__type_12 X1 X2 X3).
   intro H. elim (rem_2367  H).
   intro H. elim (rem_2368  H).
  exact (rem_2456 epsilon_mknows_current_p__type_12 ).
  exact (rem_2445 epsilon_mknows_current_p__type_12 ).
  intros X1;  exact (rem_2416 epsilon_mknows_current_p__type_12 X1).
   intro H. elim (rem_2370  H).
  intros X1 X2 X3. intro H. elim (rem_2366 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2365 X1 X2 X3 H).
  exact (rem_2454 epsilon_mknows_current_p__type_12 ).
   intro H. elim (rem_2363  H).
Qed.

Remark rem_2508 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___type_12 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current X1 -> auto___type_12 X1). tauto. exact (rem_2507 X1).
Qed.

Remark rem_2509 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_96 (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2402 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_96_f4_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2510 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_98 (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2402 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_98_f3_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2511 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_89 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2381 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_89_nil_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2512 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_98 (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) /\ auto___def_89 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_98 (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))). 2:apply (rem_2510 X1 X2 X3);  assumption.
  cut (auto___def_89 nil). 2:apply (rem_2511 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2513 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_97 (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2512 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_97_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2514 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_96 (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) /\ auto___def_97 (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_96 (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))). 2:apply (rem_2509 X1 X2 X3);  assumption.
  cut (auto___def_97 (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)). 2:apply (rem_2513 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2515 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_95 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2514 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_95_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2516 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___type_12 X1 /\ auto___def_95 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___type_12 X1). 2:apply (rem_2508 X1 X2 X3);  assumption.
  cut (auto___def_95 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil))). 2:apply (rem_2515 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2517 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_94 (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2516 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_94_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2518 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_94 (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_94 (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))). 2:apply (rem_2517 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2519 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_92 (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2518 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_92_h_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2520 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_83 (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2404 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_83_crypt_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2521 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_88 (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2406 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_88_f1_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2522 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_88 (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) /\ auto___def_89 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_88 (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3))). 2:apply (rem_2521 X1 X2 X3);  assumption.
  cut (auto___def_89 nil). 2:apply (rem_2511 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2523 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_84 (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2522 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_84_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2524 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_83 (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) /\ auto___def_84 (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_83 (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)))). 2:apply (rem_2520 X1 X2 X3);  assumption.
  cut (auto___def_84 (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)). 2:apply (rem_2523 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2525 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_81 (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2524 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_81_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2526 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_81 (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) /\ auto___def_89 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_81 (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil))). 2:apply (rem_2525 X1 X2 X3);  assumption.
  cut (auto___def_89 nil). 2:apply (rem_2511 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2527 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_99 (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2526 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_99_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2528 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_79 (nonces_current X1 X2 X3) /\ auto___def_99 (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_79 (nonces_current X1 X2 X3)). 2:apply (rem_2401 X1 X2 X3);  assumption.
  cut (auto___def_99 (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)). 2:apply (rem_2527 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2529 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_93 (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2528 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_93_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2530 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto___def_92 (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) /\ auto___def_93 (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_92 (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil))))). 2:apply (rem_2519 X1 X2 X3);  assumption.
  cut (auto___def_93 (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil))). 2:apply (rem_2529 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2531 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_91 (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2530 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_91_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2532 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto___def_91 (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_91 (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))). 2:apply (rem_2531 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2533 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2532 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_h_2;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2534 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto_knows_current (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) /\ auto_knows_current nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_current (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil))))). 2:apply (rem_2533 X1 X2 X3);  assumption.
  cut (auto_knows_current nil). 2:apply (rem_2408 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2535 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2534 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2536 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto_knows_current (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) /\ auto_knows_current (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_current (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil))). 2:apply (rem_2412 X1 X2 X3);  assumption.
  cut (auto_knows_current (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)). 2:apply (rem_2535 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2537 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2536 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2538 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> (auto_knows_current (nonces_current X1 X2 X3) /\ auto_knows_current (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_current (nonces_current X1 X2 X3)). 2:apply (rem_2379 X1 X2 X3);  assumption.
  cut (auto_knows_current (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). 2:apply (rem_2537 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_2539 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_2538 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_2540 : forall X1 X2 X3:term, auto_knows_current X1 -> auto_knows_current nil -> auto_agent X2 -> auto_agent X3 -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X3 -> auto_knows_current X1 -> auto_knows_current nil -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)))). tauto. exact (rem_2539 X1 X2 X3).
Qed.

Remark rem_2541 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current (cons X1 nil) -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1 H2. intro H. intros.
  elim (rem_2341 X1 nil H);  intros.
  apply (rem_2540 X1 X2 X3);  tauto.
Qed.

Remark rem_2542 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_current (cons X1 nil) -> auto_knows_current respond_id -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X3 -> auto_knows_current (cons X1 nil) -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)))). tauto.
  exact (rem_2541 X1 X2 X3).
Qed.

Remark rem_2543 : forall X1 X2 X3:term, auto_knows_current respond_id -> auto_knows_current (cons X1 nil) -> auto_agent X3 -> auto_agent X2 -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X3 -> auto_knows_current (cons X1 nil) -> auto_knows_current respond_id -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)))). tauto. exact (rem_2542 X1 X2 X3).
Qed.

Remark rem_2544 : forall X1 X2 X3:term, auto_agent X3 -> auto_agent X2 -> auto_knows_current (cons respond_id (cons X1 nil)) -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil))). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1 H2. intro H. intros.
  elim (rem_2341 respond_id (cons X1 nil) H);  intros.
  apply (rem_2543 X1 X2 X3);  tauto.
Qed.

Remark rem_2545 : forall _big_nAI _big_p _big_s:term, auto_agent _big_s -> auto_agent _big_p -> auto_knows_current (cons respond_id (cons _big_nAI nil)) -> auto_knows_current (cons (nonces_current _big_nAI _big_s _big_p) (cons (cons (crypt (session_current _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_current _big_nAI _big_s _big_p) (nonces_current _big_nAI _big_s _big_p)) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (nonces_current _big_nAI _big_s _big_p) (cons (cons (crypt (session_current _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_current _big_nAI _big_s _big_p) (nonces_current _big_nAI _big_s _big_p)) nil)) nil)))) nil))). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto_agent X3 -> auto_agent X2 -> auto_knows_current (cons respond_id (cons X1 nil)) -> auto_knows_current (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3)) nil)))) (cons (nonces_current X1 X2 X3) (cons (cons (crypt (session_current X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_current X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_current X1 X2 X3) (nonces_current X1 X2 X3)) nil)) nil)))) nil)))). tauto. exact (rem_2544 X1 X2 X3).
Qed.

Remark rem_2546 : forall X1:term, auto___def_17 (key pub X1) -> auto_knows_old (key prv X1) -> False. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_18 pub X1 H);  intros.
Qed.

Remark rem_2547 : forall X2:term, auto___def_17 (key pub X2) -> auto_knows_old (key prv X2) -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto___def_17 (key pub X1) -> auto_knows_old (key prv X1) -> False). tauto. exact (rem_2546 X1).
Qed.

Remark rem_2548 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 (key pub X2) -> auto_knows_old (key prv X2) -> auto_knows_old X1. (* Split. *)
Proof.
  intros X1 X2.
  cut (auto___def_17 (key pub X2) -> auto_knows_old (key prv X2) -> False). tauto.
  exact (rem_2547 X2).
Qed.

Remark rem_2549 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old (key pub X2) -> auto_knows_old (key prv X2) -> auto_knows_old X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old (key prv X2) -> auto_knows_old (key pub X2) -> auto_knows_old X1). tauto. exact (rem_1899 X1 X2).
Qed.

Remark rem_2550 : forall X1 X2:term, auto_knows_old (crypt X1 (key pub X2)) -> auto_knows_old (key prv X2) -> auto_knows_old X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_6 X1 (key pub X2) H);  intros.
  apply (rem_2548 X1 X2);  tauto.
  apply (rem_2549 X1 X2);  tauto.
Qed.

Remark rem_2551 : forall _big_k _big_m:term, auto_knows_old (crypt _big_m (key pub _big_k)) -> auto_knows_old (key prv _big_k) -> auto_knows_old _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_old (crypt X1 (key pub X2)) -> auto_knows_old (key prv X2) -> auto_knows_old X1). tauto. exact (rem_2550 X1 X2).
Qed.

Remark rem_2552 : True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
   tauto.
Qed.

Remark rem_2553 : auto_knows_current request_id. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_knows_current_request_id_1;  tauto.
 tauto.
Qed.

Remark rem_2554 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1 A2.
  tauto.
Qed.

Remark rem_2555 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> auto_knows_current respond_id. (* Deduce positive atom. *)
Proof.
  intros X1. intros A1 A2.
  case (rem_2554 X1 A1 A2). clear  A1 A2. intros. apply trans_knows_current_respond_id_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_2556 : forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_2557 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> auto_agent X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1.
  cut (auto_agent X1 -> auto_agent X1). tauto. exact (rem_2556 X1).
Qed.

Remark rem_2558 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1 A2.
  cut (auto_agent X1). 2:apply (rem_2557 X1);  assumption.
  tauto.
Qed.

Remark rem_2559 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> auto_knows_current (nai X1). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1 A2.
  case (rem_2558 X1 A1 A2). clear  A1 A2. intros. apply trans_knows_current_nai_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_2560 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> (auto_knows_current respond_id /\ auto_knows_current (nai X1)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1 A2.
  cut (auto_knows_current respond_id). 2:apply (rem_2555 X1);  assumption.
  cut (auto_knows_current (nai X1)). 2:apply (rem_2559 X1);  assumption.
  tauto.
Qed.

Remark rem_2561 : forall X1:term, auto_agent X1 -> auto_knows_current request_id -> auto_knows_current (cons respond_id (nai X1)). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1 A2.
  case (rem_2560 X1 A1 A2). clear  A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_2562 : forall _big_p:term, auto_agent _big_p -> auto_knows_current request_id -> auto_knows_current (cons respond_id (nai _big_p)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_agent X1 -> auto_knows_current request_id -> auto_knows_current (cons respond_id (nai X1))). tauto. exact (rem_2561 X1).
Qed.

Remark rem_2563 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X1:term, auto___def_56 X1 -> auto___def_56 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2564 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_54_pknows_current. intros X1 X2.
  cut (auto___def_56 X1 -> auto___def_56 X1). tauto. exact (rem_2563 epsilon_m__def_54_pknows_current X1).
Defined.

Remark rem_2565 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X2:term, auto___def_57 X2 -> auto___def_57 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2566 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_54_pknows_current. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_57 X2). tauto. exact (rem_2565 epsilon_m__def_54_pknows_current X2).
Defined.

Remark rem_2567 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_54_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_2564 epsilon_m__def_54_pknows_current X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_2566 epsilon_m__def_54_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2568 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto_knows_current (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_54_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_2567 epsilon_m__def_54_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_54_pknows_current A1 A2. intros. apply trans_knows_current_f4_1;  tauto.
 clear  epsilon_m__def_54_pknows_current A1 A2. tauto.
Defined.

Remark rem_2569 : forall X1 X2:term, auto___def_54 (f4 X1 X2) -> or_1
    (auto___def_56 X1 /\ auto___def_57 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2570 : (forall X:term, auto___def_54 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_54 (f4 X1 X2) -> auto_knows_current (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_54_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_2569 X1 X2 H);  intros.
  apply (rem_2568 epsilon_m__def_54_pknows_current X1 X2);  tauto.
Defined.

Remark rem_2571 : forall X1:term, auto___def_54 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2572 : forall X1 X2:term, auto___def_54 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2573 : auto___def_54 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2574 : auto___def_54 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2575 : auto___def_54 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2576 : forall X1 X2:term, auto___def_54 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2577 : forall X1 X2 X3:term, auto___def_54 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2578 : forall X1 X2:term, auto___def_54 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2579 : forall X1:term, auto___def_54 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2580 : forall X1 X2 X3:term, auto___def_54 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2581 : forall X1 X2 X3:term, auto___def_54 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2582 : auto___def_54 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2583 : auto___def_54 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2584 : forall X1 X2:term, auto___def_54 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2585 : auto___def_54 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2586 : auto___def_54 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2587 : auto___def_54 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2588 : forall X1 X2:term, auto___def_54 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2589 : forall X1:term, auto___def_54 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2590 : auto___def_54 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2591 : auto___def_54 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2592 : forall X1 X2 X3:term, auto___def_54 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2593 : forall X1 X2:term, auto___def_54 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2594 : auto___def_54 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2595 : forall X1 X2 X3:term, auto___def_54 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2596 : forall X1:term, auto___def_54 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_54_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_2594  H).
   intro H. elim (rem_2590  H).
  intros X1 X2. intro H. elim (rem_2593 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2588 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_2595 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_2584 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2578 X1 X2 H).
  intros X1 X2;  exact (rem_2570 epsilon_m__def_54_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_2576 X1 X2 H).
  intros X1. intro H. elim (rem_2579 X1 H).
   intro H. elim (rem_2574  H).
  intros X1 X2. intro H. elim (rem_2572 X1 X2 H).
  intros X1. intro H. elim (rem_2589 X1 H).
   intro H. elim (rem_2573  H).
  intros X1 X2 X3. intro H. elim (rem_2580 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2592 X1 X2 X3 H).
   intro H. elim (rem_2583  H).
   intro H. elim (rem_2587  H).
   intro H. elim (rem_2586  H).
   intro H. elim (rem_2582  H).
  intros X1. intro H. elim (rem_2571 X1 H).
   intro H. elim (rem_2591  H).
  intros X1 X2 X3. intro H. elim (rem_2581 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2577 X1 X2 X3 H).
   intro H. elim (rem_2585  H).
   intro H. elim (rem_2575  H).
Qed.

Remark rem_2597 : forall X1 X2 X3:term, auto___def_54 X1 -> auto___def_55 X2 -> auto___type_7 X3 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___def_54 X1 -> auto_knows_current X1). tauto. exact (rem_2596 X1).
Qed.

Remark rem_2598 : forall X1 X2 X3:term, auto___type_7 X2 -> auto___def_54 X1 -> auto___def_55 X3 -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto___def_54 X1 -> auto___def_55 X2 -> auto___type_7 X3 -> auto_knows_current X1). tauto. exact (rem_2597 X1 X2 X3).
Qed.

Remark rem_2599 : forall X1 X2 X3:term, auto_server_keys_old X1 X2 X3 -> or_1
    (auto___type_7 X1 /\ auto___def_54 X2 /\ auto___def_55 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2600 : forall X1 X2 X3:term, auto_server_keys_old X2 X1 X3 -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_2599 X2 X1 X3 H);  intros.
  apply (rem_2598 X1 X2 X3);  tauto.
Qed.

Remark rem_2601 : forall _big_cK _big_iK _big_s:term, auto_server_keys_old _big_s _big_iK _big_cK -> auto_knows_current _big_iK. (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X1 X2.
  cut (auto_server_keys_old X2 X1 X3 -> auto_knows_current X1). tauto. exact (rem_2600 X1 X2 X3).
Qed.

Remark rem_2602 : forall X1:term, auto___def_86 (key pub X1) -> auto_knows_current (key prv X1) -> False. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_13 pub X1 H);  intros.
Qed.

Remark rem_2603 : forall X2:term, auto___def_86 (key pub X2) -> auto_knows_current (key prv X2) -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto___def_86 (key pub X1) -> auto_knows_current (key prv X1) -> False). tauto. exact (rem_2602 X1).
Qed.

Remark rem_2604 : forall X1 X2:term, auto___def_85 X1 -> auto___def_86 (key pub X2) -> auto_knows_current (key prv X2) -> auto_knows_current X1. (* Split. *)
Proof.
  intros X1 X2.
  cut (auto___def_86 (key pub X2) -> auto_knows_current (key prv X2) -> False). tauto.
  exact (rem_2603 X2).
Qed.

Remark rem_2605 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current (key pub X2) -> auto_knows_current (key prv X2) -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current (key prv X2) -> auto_knows_current (key pub X2) -> auto_knows_current X1). tauto. exact (rem_17 X1 X2).
Qed.

Remark rem_2606 : forall X1:term, auto___def_17 (key pub X1) -> auto_knows_current (key prv X1) -> False. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_18 pub X1 H);  intros.
Qed.

Remark rem_2607 : forall X2:term, auto___def_17 (key pub X2) -> auto_knows_current (key prv X2) -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto___def_17 (key pub X1) -> auto_knows_current (key prv X1) -> False). tauto. exact (rem_2606 X1).
Qed.

Remark rem_2608 : forall X1 X2:term, auto___def_16 X1 -> auto___def_17 (key pub X2) -> auto_knows_current (key prv X2) -> auto_knows_current X1. (* Split. *)
Proof.
  intros X1 X2.
  cut (auto___def_17 (key pub X2) -> auto_knows_current (key prv X2) -> False). tauto.
  exact (rem_2607 X2).
Qed.

Remark rem_2609 : forall X1 X2:term, auto_knows_current (crypt X1 (key pub X2)) -> auto_knows_current (key prv X2) -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_22 X1 (key pub X2) H);  intros.
  apply (rem_2604 X1 X2);  tauto.
  apply (rem_2605 X1 X2);  tauto.
  apply (rem_2608 X1 X2);  tauto.
Qed.

Remark rem_2610 : forall _big_k _big_m:term, auto_knows_current (crypt _big_m (key pub _big_k)) -> auto_knows_current (key prv _big_k) -> auto_knows_current _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_current (crypt X1 (key pub X2)) -> auto_knows_current (key prv X2) -> auto_knows_current X1). tauto. exact (rem_2609 X1 X2).
Qed.

Remark rem_2611 : forall X1:term, auto___def_85 X1 -> auto___def_16 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_7). 2:apply seval_1_model_auto___def_85. 2:assumption.
  cut ((seval_1 X1)=val_1_4). 2:apply seval_1_model_auto___def_16. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_2612 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2611 X5)). tauto.
Qed.

Remark rem_2613 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2612 X1 X2 X3 X4 X5).
Qed.

Remark rem_2614 : forall X1 X2:term, auto___def_79 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2615 : (forall X:term, auto___def_101 X -> auto___def_79 X -> False)
    -> forall X1 X2:term, auto___def_79 (f2 X1 X2) -> auto___def_103 X1 -> auto___type_13 X2 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_101_m__def_79. intros X1 X2. intro H. intros.
  elim (rem_2614 X1 X2 H);  intros.
Defined.

Remark rem_2616 : forall X1 X2:term, auto___def_101 (f2 X1 X2) -> or_1
    (auto___def_103 X1 /\ auto___type_13 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2617 : (forall X:term, auto___def_101 X -> auto___def_79 X -> False)
    -> forall X1 X2:term, auto___def_101 (f2 X1 X2) -> auto___def_79 (f2 X1 X2) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_101_m__def_79. intros X1 X2. intro H. intros.
  elim (rem_2616 X1 X2 H);  intros.
  apply (rem_2615 epsilon_m__def_101_m__def_79 X1 X2);  tauto.
Defined.

Remark rem_2618 : forall X1:term, auto___def_101 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2619 : forall X1 X2:term, auto___def_101 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2620 : auto___def_101 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2621 : auto___def_101 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2622 : auto___def_101 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2623 : forall X1 X2:term, auto___def_101 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2624 : forall X1 X2 X3:term, auto___def_101 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2625 : forall X1 X2:term, auto___def_101 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2626 : forall X1:term, auto___def_101 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2627 : forall X1 X2 X3:term, auto___def_101 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2628 : forall X1 X2 X3:term, auto___def_101 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2629 : auto___def_101 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2630 : auto___def_101 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2631 : auto___def_101 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2632 : auto___def_101 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2633 : auto___def_101 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2634 : forall X1 X2:term, auto___def_101 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2635 : forall X1:term, auto___def_101 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2636 : forall X1 X2:term, auto___def_101 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2637 : auto___def_101 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2638 : auto___def_101 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2639 : forall X1 X2 X3:term, auto___def_101 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2640 : forall X1 X2:term, auto___def_101 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2641 : auto___def_101 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2642 : forall X1 X2 X3:term, auto___def_101 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2643 : forall X1:term, auto___def_101 X1 -> auto___def_79 X1 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_101_m__def_79 1.
  intro X. case X.
   intro H. elim (rem_2641  H).
   intro H. elim (rem_2637  H).
  intros X1 X2. intro H. elim (rem_2640 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2634 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_2642 X1 X2 X3 H).
  intros X1 X2;  exact (rem_2617 epsilon_m__def_101_m__def_79 X1 X2).
  intros X1 X2. intro H. elim (rem_2625 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2636 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2623 X1 X2 H).
  intros X1. intro H. elim (rem_2626 X1 H).
   intro H. elim (rem_2621  H).
  intros X1 X2. intro H. elim (rem_2619 X1 X2 H).
  intros X1. intro H. elim (rem_2635 X1 H).
   intro H. elim (rem_2620  H).
  intros X1 X2 X3. intro H. elim (rem_2627 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2639 X1 X2 X3 H).
   intro H. elim (rem_2630  H).
   intro H. elim (rem_2633  H).
   intro H. elim (rem_2632  H).
   intro H. elim (rem_2629  H).
  intros X1. intro H. elim (rem_2618 X1 H).
   intro H. elim (rem_2638  H).
  intros X1 X2 X3. intro H. elim (rem_2628 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2624 X1 X2 X3 H).
   intro H. elim (rem_2631  H).
   intro H. elim (rem_2622  H).
Qed.

Remark rem_2644 : forall X1:term, auto___def_101 X1 -> auto___def_79 X1 -> auto_knows_current X1 -> False. (* Subsumption by simpler clause. *)
Proof.
  intros X1.
  cut (auto___def_101 X1 -> auto___def_79 X1 -> False). tauto. exact (rem_2643 X1).
Qed.

Remark rem_2645 : forall X1 X2 X3 X4 X5:term, auto___def_101 X3 -> auto___def_107 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2644 X3)). tauto.
Qed.

Remark rem_2646 : forall X1 X2:term, auto___def_111 (cons X1 X2) -> or_1
    (auto___def_101 X1 /\ auto___def_107 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2647 : forall X1 X2 X3 X4 X5:term, auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_2646 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_2645 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2648 : forall X1 X2 X3 X4 X5:term, auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2647 X1 X2 X3 X4 X5).
Qed.

Remark rem_2649 : forall X1:term, auto___def_110 (h X1) -> or_1
    (auto___def_112 X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2650 : forall X1 X2 X3 X4 X5:term, auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_2649 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_2648 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2651 : forall X1 X2:term, auto___def_109 (cons X1 X2) -> or_1
    (auto___def_110 X1 /\ auto___def_111 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2652 : forall X1 X2 X3 X4 X5:term, auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_2651 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_2650 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2653 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  tauto.
Qed.

Remark rem_2654 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_104 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2653 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_104_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2655 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_1_p__type_14.  tauto.
Defined.

Remark rem_2656 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_14 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14.  case (rem_2655 epsilon_m__type_1_p__type_14). clear  epsilon_m__type_1_p__type_14. intros. apply trans___type_14_i_1;  tauto.
 clear  epsilon_m__type_1_p__type_14. tauto.
Defined.

Remark rem_2657 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_1 i -> auto___type_14 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14. intro H. intros.
  elim (rem_448 H);  intros.
  apply (rem_2656 epsilon_m__type_1_p__type_14);  tauto.
Defined.

Remark rem_2658 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_14 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14.  case (rem_2655 epsilon_m__type_1_p__type_14). clear  epsilon_m__type_1_p__type_14. intros. apply trans___type_14_bob_1;  tauto.
 clear  epsilon_m__type_1_p__type_14. tauto.
Defined.

Remark rem_2659 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_1 bob -> auto___type_14 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14. intro H. intros.
  elim (rem_451 H);  intros.
  apply (rem_2658 epsilon_m__type_1_p__type_14);  tauto.
Defined.

Remark rem_2660 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_14 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14.  case (rem_2655 epsilon_m__type_1_p__type_14). clear  epsilon_m__type_1_p__type_14. intros. apply trans___type_14_server_1;  tauto.
 clear  epsilon_m__type_1_p__type_14. tauto.
Defined.

Remark rem_2661 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_1 server -> auto___type_14 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14. intro H. intros.
  elim (rem_454 H);  intros.
  apply (rem_2660 epsilon_m__type_1_p__type_14);  tauto.
Defined.

Remark rem_2662 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_14 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14.  case (rem_2655 epsilon_m__type_1_p__type_14). clear  epsilon_m__type_1_p__type_14. intros. apply trans___type_14_alice_1;  tauto.
 clear  epsilon_m__type_1_p__type_14. tauto.
Defined.

Remark rem_2663 : (forall X:term, auto___type_1 X -> auto___type_14 X)
    -> auto___type_1 alice -> auto___type_14 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_14. intro H. intros.
  elim (rem_457 H);  intros.
  apply (rem_2662 epsilon_m__type_1_p__type_14);  tauto.
Defined.

Remark rem_2664 : forall X1:term, auto___type_1 X1 -> auto___type_14 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_1_p__type_14 1.
  intro X. case X.
  exact (rem_2663 epsilon_m__type_1_p__type_14 ).
  exact (rem_2659 epsilon_m__type_1_p__type_14 ).
  intros X1 X2. intro H. elim (rem_479 X1 X2 H).
  intros X1 X2. intro H. elim (rem_475 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_480 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_471 X1 X2 H).
  intros X1 X2. intro H. elim (rem_465 X1 X2 H).
  intros X1 X2. intro H. elim (rem_477 X1 X2 H).
  intros X1 X2. intro H. elim (rem_463 X1 X2 H).
  intros X1. intro H. elim (rem_466 X1 H).
  exact (rem_2657 epsilon_m__type_1_p__type_14 ).
  intros X1 X2. intro H. elim (rem_460 X1 X2 H).
  intros X1. intro H. elim (rem_476 X1 H).
   intro H. elim (rem_461  H).
  intros X1 X2 X3. intro H. elim (rem_467 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_478 X1 X2 X3 H).
   intro H. elim (rem_470  H).
   intro H. elim (rem_474  H).
   intro H. elim (rem_473  H).
   intro H. elim (rem_469  H).
  intros X1. intro H. elim (rem_459 X1 H).
  exact (rem_2661 epsilon_m__type_1_p__type_14 ).
  intros X1 X2 X3. intro H. elim (rem_468 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_464 X1 X2 X3 H).
   intro H. elim (rem_472  H).
   intro H. elim (rem_462  H).
Qed.

Remark rem_2665 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___type_14 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___type_1 X1 -> auto___type_14 X1). tauto. exact (rem_2664 X1).
Qed.

Remark rem_2666 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_magent_p__type_15.  tauto.
Defined.

Remark rem_2667 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto___type_15 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_15.  case (rem_2666 epsilon_magent_p__type_15). clear  epsilon_magent_p__type_15. intros. apply trans___type_15_i_1;  tauto.
 clear  epsilon_magent_p__type_15. tauto.
Defined.

Remark rem_2668 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto_agent i -> auto___type_15 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_15. intro H. intros.
  elim (rem_486 H);  intros.
  apply (rem_2667 epsilon_magent_p__type_15);  tauto.
Defined.

Remark rem_2669 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto___type_15 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_15.  case (rem_2666 epsilon_magent_p__type_15). clear  epsilon_magent_p__type_15. intros. apply trans___type_15_bob_1;  tauto.
 clear  epsilon_magent_p__type_15. tauto.
Defined.

Remark rem_2670 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto_agent bob -> auto___type_15 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_15. intro H. intros.
  elim (rem_489 H);  intros.
  apply (rem_2669 epsilon_magent_p__type_15);  tauto.
Defined.

Remark rem_2671 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto___type_15 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_15.  case (rem_2666 epsilon_magent_p__type_15). clear  epsilon_magent_p__type_15. intros. apply trans___type_15_server_1;  tauto.
 clear  epsilon_magent_p__type_15. tauto.
Defined.

Remark rem_2672 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto_agent server -> auto___type_15 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_15. intro H. intros.
  elim (rem_492 H);  intros.
  apply (rem_2671 epsilon_magent_p__type_15);  tauto.
Defined.

Remark rem_2673 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto___type_15 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_15.  case (rem_2666 epsilon_magent_p__type_15). clear  epsilon_magent_p__type_15. intros. apply trans___type_15_alice_1;  tauto.
 clear  epsilon_magent_p__type_15. tauto.
Defined.

Remark rem_2674 : (forall X:term, auto_agent X -> auto___type_15 X)
    -> auto_agent alice -> auto___type_15 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_15. intro H. intros.
  elim (rem_495 H);  intros.
  apply (rem_2673 epsilon_magent_p__type_15);  tauto.
Defined.

Remark rem_2675 : forall X2:term, auto_agent X2 -> auto___type_15 X2. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_15 1.
  intro X. case X.
  exact (rem_2674 epsilon_magent_p__type_15 ).
  exact (rem_2670 epsilon_magent_p__type_15 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_2668 epsilon_magent_p__type_15 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_2672 epsilon_magent_p__type_15 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_2676 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___type_15 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_agent X2 -> auto___type_15 X2). tauto. exact (rem_2675 X2).
Qed.

Remark rem_2677 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_107 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2653 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_107_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2678 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___type_15 X2 /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_15 X2). 2:apply (rem_2676 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_2677 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2679 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_106 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2678 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_106_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2680 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___type_14 X1 /\ auto___def_106 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_14 X1). 2:apply (rem_2665 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_106 (cons X2 nil)). 2:apply (rem_2679 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2681 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_105 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2680 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_105_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2682 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___def_104 sym /\ auto___def_105 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_104 sym). 2:apply (rem_2654 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_105 (cons X1 (cons X2 nil))). 2:apply (rem_2681 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2683 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_103 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2682 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_103_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2684 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1:term, auto___def_78 X1 -> auto___def_78 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2685 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_79_p__type_13. intros X1 X2 X3.
  cut (auto___def_78 X1 -> auto___def_78 X1). tauto. exact (rem_2684 epsilon_m__def_79_p__type_13 X1).
Defined.

Remark rem_2686 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2687 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_79_p__type_13. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2686 epsilon_m__def_79_p__type_13 X2).
Defined.

Remark rem_2688 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2689 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_79_p__type_13. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2688 epsilon_m__def_79_p__type_13 X3).
Defined.

Remark rem_2690 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_79_p__type_13. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_78 X1). 2:apply (rem_2685 epsilon_m__def_79_p__type_13 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2687 epsilon_m__def_79_p__type_13 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2689 epsilon_m__def_79_p__type_13 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2691 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_13 (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_79_p__type_13. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2690 epsilon_m__def_79_p__type_13 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_79_p__type_13 A1 A2 A3. intros. apply trans___type_13_nonces_current_1;  tauto.
 clear  epsilon_m__def_79_p__type_13 A1 A2 A3. tauto.
Defined.

Remark rem_2692 : forall X1 X2 X3:term, auto___def_79 (nonces_current X1 X2 X3) -> or_1
    (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2693 : (forall X:term, auto___def_79 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_79 (nonces_current X1 X2 X3) -> auto___type_13 (nonces_current X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_79_p__type_13. intros X1 X2 X3. intro H. intros.
  elim (rem_2692 X1 X2 X3 H);  intros.
  apply (rem_2691 epsilon_m__def_79_p__type_13 X1 X2 X3);  tauto.
Defined.

Remark rem_2694 : forall X1:term, auto___def_79 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2695 : forall X1 X2:term, auto___def_79 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2696 : auto___def_79 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2697 : auto___def_79 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2698 : auto___def_79 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2699 : forall X1 X2:term, auto___def_79 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2700 : forall X1 X2 X3:term, auto___def_79 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2701 : forall X1 X2:term, auto___def_79 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2702 : forall X1:term, auto___def_79 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2703 : forall X1 X2 X3:term, auto___def_79 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2704 : auto___def_79 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2705 : auto___def_79 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2706 : auto___def_79 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2707 : auto___def_79 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2708 : auto___def_79 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2709 : forall X1 X2:term, auto___def_79 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2710 : forall X1:term, auto___def_79 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2711 : forall X1 X2:term, auto___def_79 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2712 : auto___def_79 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2713 : auto___def_79 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2714 : forall X1 X2 X3:term, auto___def_79 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2715 : forall X1 X2:term, auto___def_79 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2716 : auto___def_79 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2717 : forall X1 X2 X3:term, auto___def_79 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2718 : forall X3:term, auto___def_79 X3 -> auto___type_13 X3. (* Induct. *)
Proof.
  fix epsilon_m__def_79_p__type_13 1.
  intro X. case X.
   intro H. elim (rem_2716  H).
   intro H. elim (rem_2712  H).
  intros X1 X2. intro H. elim (rem_2715 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2709 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_2717 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_2614 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2701 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2711 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2699 X1 X2 H).
  intros X1. intro H. elim (rem_2702 X1 H).
   intro H. elim (rem_2697  H).
  intros X1 X2. intro H. elim (rem_2695 X1 X2 H).
  intros X1. intro H. elim (rem_2710 X1 H).
   intro H. elim (rem_2696  H).
  intros X1 X2 X3;  exact (rem_2693 epsilon_m__def_79_p__type_13 X1 X2 X3).
  intros X1 X2 X3. intro H. elim (rem_2714 X1 X2 X3 H).
   intro H. elim (rem_2705  H).
   intro H. elim (rem_2708  H).
   intro H. elim (rem_2707  H).
   intro H. elim (rem_2704  H).
  intros X1. intro H. elim (rem_2694 X1 H).
   intro H. elim (rem_2713  H).
  intros X1 X2 X3. intro H. elim (rem_2703 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2700 X1 X2 X3 H).
   intro H. elim (rem_2706  H).
   intro H. elim (rem_2698  H).
Qed.

Remark rem_2719 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___type_13 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___type_13 X3). tauto. exact (rem_2718 X3).
Qed.

Remark rem_2720 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___def_103 (key sym (cons X1 (cons X2 nil))) /\ auto___type_13 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_103 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_2683 X1 X2 X3 X4 X5);  assumption.
  cut (auto___type_13 X3). 2:apply (rem_2719 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2721 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2720 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_current_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2722 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2723 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_2722 epsilon_m__type_12_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2724 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto___type_16 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  case (rem_2723 epsilon_m__type_12_p__type_16 X1 A1). clear  epsilon_m__type_12_p__type_16 A1. intros. apply trans___type_16_s_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1. tauto.
Defined.

Remark rem_2725 : forall X1:term, auto___type_12 (s X1) -> or_1
    (auto_knows_current X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2726 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___type_12 (s X1) -> auto___type_16 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intro H. intros.
  elim (rem_2725 X1 H);  intros.
  apply (rem_2724 epsilon_m__type_12_p__type_16 X1);  tauto.
Defined.

Remark rem_2727 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16.  tauto.
Defined.

Remark rem_2728 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_16 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16.  case (rem_2727 epsilon_m__type_12_p__type_16). clear  epsilon_m__type_12_p__type_16. intros. apply trans___type_16_nil_1;  tauto.
 clear  epsilon_m__type_12_p__type_16. tauto.
Defined.

Remark rem_2729 : auto___type_12 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2730 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_12 nil -> auto___type_16 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intro H. intros.
  elim (rem_2729 H);  intros.
  apply (rem_2728 epsilon_m__type_12_p__type_16);  tauto.
Defined.

Remark rem_2731 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_56 X1 -> auto___def_56 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2732 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_56 X1 -> auto___def_56 X1). tauto. exact (rem_2731 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2733 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto___def_57 X2 -> auto___def_57 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2734 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_57 X2). tauto. exact (rem_2733 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2735 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_2732 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_2734 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2736 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_16 (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2735 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_f3_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2737 : forall X1 X2:term, auto___type_12 (f3 X1 X2) -> or_1
    (auto___def_56 X1 /\ auto___def_57 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2738 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___type_12 (f3 X1 X2) -> auto___type_16 (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2737 X1 X2 H);  intros.
  apply (rem_2736 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2739 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2740 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_2739 epsilon_m__type_12_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2741 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_109 X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  case (rem_2740 epsilon_m__type_12_p__type_16 X1 A1). clear  epsilon_m__type_12_p__type_16 A1. intros. apply trans___type_16_h_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1. tauto.
Defined.

Remark rem_2742 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2743 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  cut (auto___def_91 X1). 2:apply (rem_2742 epsilon_m__type_12_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2744 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_91 X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  case (rem_2743 epsilon_m__type_12_p__type_16 X1 A1). clear  epsilon_m__type_12_p__type_16 A1. intros. apply trans___type_16_h_2;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1. tauto.
Defined.

Remark rem_2745 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  case (rem_2723 epsilon_m__type_12_p__type_16 X1 A1). clear  epsilon_m__type_12_p__type_16 A1. intros. apply trans___type_16_h_3;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1. tauto.
Defined.

Remark rem_2746 : forall X1:term, auto___type_12 (h X1) -> or_3
    (auto___def_109 X1)    (auto___def_91 X1)    (auto_knows_current X1).
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_2747 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___type_12 (h X1) -> auto___type_16 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intro H. intros.
  elim (rem_2746 X1 H);  intros.
  apply (rem_2741 epsilon_m__type_12_p__type_16 X1);  tauto.
  apply (rem_2744 epsilon_m__type_12_p__type_16 X1);  tauto.
  apply (rem_2745 epsilon_m__type_12_p__type_16 X1);  tauto.
Defined.

Remark rem_2748 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_78 X1 -> auto___def_78 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2749 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_78 X1 -> auto___def_78 X1). tauto. exact (rem_2748 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2750 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2751 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2750 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2752 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2753 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2752 epsilon_m__type_12_p__type_16 X3).
Defined.

Remark rem_2754 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_78 X1). 2:apply (rem_2749 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2751 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2753 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2755 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2754 epsilon_m__type_12_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_12_p__type_16 A1 A2 A3. intros. apply trans___type_16_nonces_current_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2756 : forall X1 X2 X3:term, auto___type_12 (nonces_current X1 X2 X3) -> or_1
    (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2757 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___type_12 (nonces_current X1 X2 X3) -> auto___type_16 (nonces_current X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intro H. intros.
  elim (rem_2756 X1 X2 X3 H);  intros.
  apply (rem_2755 epsilon_m__type_12_p__type_16 X1 X2 X3);  tauto.
Defined.

Remark rem_2758 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_16 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16.  case (rem_2727 epsilon_m__type_12_p__type_16). clear  epsilon_m__type_12_p__type_16. intros. apply trans___type_16_respond_id_1;  tauto.
 clear  epsilon_m__type_12_p__type_16. tauto.
Defined.

Remark rem_2759 : auto___type_12 respond_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2760 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_12 respond_id -> auto___type_16 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intro H. intros.
  elim (rem_2759 H);  intros.
  apply (rem_2758 epsilon_m__type_12_p__type_16);  tauto.
Defined.

Remark rem_2761 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_103 X1 -> auto___def_103 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2762 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_103 X1 -> auto___def_103 X1). tauto. exact (rem_2761 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2763 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto___type_13 X2 -> auto___type_13 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2764 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___type_13 X2 -> auto___type_13 X2). tauto. exact (rem_2763 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2765 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_2762 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_2764 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2766 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_16 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2765 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_f2_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2767 : forall X1 X2:term, auto___type_12 (f2 X1 X2) -> or_1
    (auto___def_103 X1 /\ auto___type_13 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2768 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___type_12 (f2 X1 X2) -> auto___type_16 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2767 X1 X2 H);  intros.
  apply (rem_2766 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2769 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_16 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16.  case (rem_2727 epsilon_m__type_12_p__type_16). clear  epsilon_m__type_12_p__type_16. intros. apply trans___type_16_success_1;  tauto.
 clear  epsilon_m__type_12_p__type_16. tauto.
Defined.

Remark rem_2770 : auto___type_12 success -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2771 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_12 success -> auto___type_16 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intro H. intros.
  elim (rem_2770 H);  intros.
  apply (rem_2769 epsilon_m__type_12_p__type_16);  tauto.
Defined.

Remark rem_2772 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_16 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16.  case (rem_2727 epsilon_m__type_12_p__type_16). clear  epsilon_m__type_12_p__type_16. intros. apply trans___type_16_request_id_1;  tauto.
 clear  epsilon_m__type_12_p__type_16. tauto.
Defined.

Remark rem_2773 : auto___type_12 request_id -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2774 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> auto___type_12 request_id -> auto___type_16 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intro H. intros.
  elim (rem_2773 H);  intros.
  apply (rem_2772 epsilon_m__type_12_p__type_16);  tauto.
Defined.

Remark rem_2775 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_85 X1 -> auto___def_85 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2776 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_85 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_85 X1 -> auto___def_85 X1). tauto. exact (rem_2775 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2777 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto___def_86 X2 -> auto___def_86 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2778 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_86 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_86 X2 -> auto___def_86 X2). tauto. exact (rem_2777 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2779 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> (auto___def_85 X1 /\ auto___def_86 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_85 X1). 2:apply (rem_2776 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  cut (auto___def_86 X2). 2:apply (rem_2778 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2780 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2779 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_crypt_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2781 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_2722 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2782 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto_knows_current X2 -> auto_knows_current X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2783 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto_knows_current X2 -> auto_knows_current X2). tauto. exact (rem_2782 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2784 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_2781 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_2783 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2785 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2784 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_crypt_2;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2786 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2787 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_2786 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2788 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2789 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_2788 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2790 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_2787 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_2789 epsilon_m__type_12_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2791 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2790 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_crypt_3;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2792 : forall X1 X2:term, auto___type_12 (crypt X1 X2) -> or_3
    (auto___def_85 X1 /\ auto___def_86 X2)
    (auto_knows_current X1 /\ auto_knows_current X2)
    (auto___def_16 X1 /\ auto___def_17 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_3_intro_1; tauto.
  intros. apply or_3_intro_2; tauto.
  intros. apply or_3_intro_3; tauto.
Qed.

Remark rem_2793 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___type_12 (crypt X1 X2) -> auto___type_16 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2792 X1 X2 H);  intros.
  apply (rem_2780 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
  apply (rem_2785 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
  apply (rem_2791 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2794 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2795 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_2794 epsilon_m__type_12_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2796 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto_agent X1 -> auto___type_16 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intros A1.
  case (rem_2795 epsilon_m__type_12_p__type_16 X1 A1). clear  epsilon_m__type_12_p__type_16 A1. intros. apply trans___type_16_nai_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1. tauto.
Defined.

Remark rem_2797 : forall X1:term, auto___type_12 (nai X1) -> or_1
    (auto_agent X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2798 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___type_12 (nai X1) -> auto___type_16 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1. intro H. intros.
  elim (rem_2797 X1 H);  intros.
  apply (rem_2796 epsilon_m__type_12_p__type_16 X1);  tauto.
Defined.

Remark rem_2799 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_16 (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2735 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_f4_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2800 : forall X1 X2:term, auto___type_12 (f4 X1 X2) -> or_1
    (auto___def_56 X1 /\ auto___def_57 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2801 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___type_12 (f4 X1 X2) -> auto___type_16 (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2800 X1 X2 H);  intros.
  apply (rem_2799 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2802 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2803 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_2802 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2804 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2750 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2805 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2752 epsilon_m__type_12_p__type_16 X3).
Defined.

Remark rem_2806 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_2803 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2804 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2805 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2807 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2806 epsilon_m__type_12_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_12_p__type_16 A1 A2 A3. intros. apply trans___type_16_nonces_old_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2808 : forall X1 X2 X3:term, auto___type_12 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2809 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___type_12 (nonces_old X1 X2 X3) -> auto___type_16 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intro H. intros.
  elim (rem_2808 X1 X2 X3 H);  intros.
  apply (rem_2807 epsilon_m__type_12_p__type_16 X1 X2 X3);  tauto.
Defined.

Remark rem_2810 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_16 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2784 epsilon_m__type_12_p__type_16 X1 X2 A1 A2). clear  epsilon_m__type_12_p__type_16 A1 A2. intros. apply trans___type_16_cons_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2811 : forall X1 X2:term, auto___type_12 (cons X1 X2) -> or_1
    (auto_knows_current X1 /\ auto_knows_current X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2812 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2:term, auto___type_12 (cons X1 X2) -> auto___type_16 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2811 X1 X2 H);  intros.
  apply (rem_2810 epsilon_m__type_12_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2813 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2814 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_2813 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2815 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2816 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_2815 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2817 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2818 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_2817 epsilon_m__type_12_p__type_16 X3).
Defined.

Remark rem_2819 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_2814 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_2816 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_2818 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2820 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_16 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2819 epsilon_m__type_12_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_12_p__type_16 A1 A2 A3. intros. apply trans___type_16_f1_1;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2821 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1:term, auto___def_87 X1 -> auto___def_87 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2822 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_87 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_87 X1 -> auto___def_87 X1). tauto. exact (rem_2821 epsilon_m__type_12_p__type_16 X1).
Defined.

Remark rem_2823 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X2:term, auto___def_85 X2 -> auto___def_85 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2824 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_85 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_85 X2 -> auto___def_85 X2). tauto. exact (rem_2823 epsilon_m__type_12_p__type_16 X2).
Defined.

Remark rem_2825 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X3:term, auto___def_79 X3 -> auto___def_79 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2826 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_79 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3.
  cut (auto___def_79 X3 -> auto___def_79 X3). tauto. exact (rem_2825 epsilon_m__type_12_p__type_16 X3).
Defined.

Remark rem_2827 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> (auto___def_87 X1 /\ auto___def_85 X2 /\ auto___def_79 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_87 X1). 2:apply (rem_2822 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_85 X2). 2:apply (rem_2824 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_79 X3). 2:apply (rem_2826 epsilon_m__type_12_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2828 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___type_16 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2827 epsilon_m__type_12_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_12_p__type_16 A1 A2 A3. intros. apply trans___type_16_f1_2;  tauto.
 clear  epsilon_m__type_12_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2829 : forall X1 X2 X3:term, auto___type_12 (f1 X1 X2 X3) -> or_2
    (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3)
    (auto___def_87 X1 /\ auto___def_85 X2 /\ auto___def_79 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_2_intro_1; tauto.
  intros. apply or_2_intro_2; tauto.
Qed.

Remark rem_2830 : (forall X:term, auto___type_12 X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___type_12 (f1 X1 X2 X3) -> auto___type_16 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_12_p__type_16. intros X1 X2 X3. intro H. intros.
  elim (rem_2829 X1 X2 X3 H);  intros.
  apply (rem_2820 epsilon_m__type_12_p__type_16 X1 X2 X3);  tauto.
  apply (rem_2828 epsilon_m__type_12_p__type_16 X1 X2 X3);  tauto.
Defined.

Remark rem_2831 : forall X1 X2:term, auto___type_12 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2832 : auto___type_12 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2833 : auto___type_12 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2834 : forall X1 X2:term, auto___type_12 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2835 : forall X1 X2 X3:term, auto___type_12 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2836 : forall X1 X2 X3:term, auto___type_12 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2837 : auto___type_12 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2838 : auto___type_12 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2839 : auto___type_12 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2840 : auto___type_12 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2841 : auto___type_12 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_2842 : forall X4:term, auto___type_12 X4 -> auto___type_16 X4. (* Induct. *)
Proof.
  fix epsilon_m__type_12_p__type_16 1.
  intro X. case X.
   intro H. elim (rem_2841  H).
   intro H. elim (rem_2839  H).
  intros X1 X2;  exact (rem_2812 epsilon_m__type_12_p__type_16 X1 X2).
  intros X1 X2;  exact (rem_2793 epsilon_m__type_12_p__type_16 X1 X2).
  intros X1 X2 X3;  exact (rem_2830 epsilon_m__type_12_p__type_16 X1 X2 X3).
  intros X1 X2;  exact (rem_2768 epsilon_m__type_12_p__type_16 X1 X2).
  intros X1 X2;  exact (rem_2738 epsilon_m__type_12_p__type_16 X1 X2).
  intros X1 X2;  exact (rem_2801 epsilon_m__type_12_p__type_16 X1 X2).
  intros X1 X2. intro H. elim (rem_2834 X1 X2 H).
  intros X1;  exact (rem_2747 epsilon_m__type_12_p__type_16 X1).
   intro H. elim (rem_2832  H).
  intros X1 X2. intro H. elim (rem_2831 X1 X2 H).
  intros X1;  exact (rem_2798 epsilon_m__type_12_p__type_16 X1).
  exact (rem_2730 epsilon_m__type_12_p__type_16 ).
  intros X1 X2 X3;  exact (rem_2757 epsilon_m__type_12_p__type_16 X1 X2 X3).
  intros X1 X2 X3;  exact (rem_2809 epsilon_m__type_12_p__type_16 X1 X2 X3).
   intro H. elim (rem_2837  H).
   intro H. elim (rem_2838  H).
  exact (rem_2774 epsilon_m__type_12_p__type_16 ).
  exact (rem_2760 epsilon_m__type_12_p__type_16 ).
  intros X1;  exact (rem_2726 epsilon_m__type_12_p__type_16 X1).
   intro H. elim (rem_2840  H).
  intros X1 X2 X3. intro H. elim (rem_2836 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2835 X1 X2 X3 H).
  exact (rem_2771 epsilon_m__type_12_p__type_16 ).
   intro H. elim (rem_2833  H).
Qed.

Remark rem_2843 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___type_16 X4. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___type_12 X4 -> auto___type_16 X4). tauto. exact (rem_2842 X4).
Qed.

Remark rem_2844 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2720 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_114_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2845 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2720 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_116_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2846 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2845 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_2677 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2847 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2846 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_115_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2848 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2844 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_2847 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2849 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2848 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_113_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2850 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___type_16 X4 /\ auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_16 X4). 2:apply (rem_2843 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_2849 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2851 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2850 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_112_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2852 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_2851 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2853 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2852 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_110_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2854 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2720 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_101_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2855 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2854 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_2677 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2856 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2855 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_111_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2857 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) /\ auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))))). 2:apply (rem_2853 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_2856 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2858 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2857 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_109_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2859 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_2858 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2860 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2859 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_current_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2861 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2653 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_current_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2862 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) /\ auto_knows_current nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_2860 X1 X2 X3 X4 X5);  assumption.
  cut (auto_knows_current nil). 2:apply (rem_2861 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2863 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2862 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2864 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> (auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2721 X1 X2 X3 X4 X5);  assumption.
  cut (auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). 2:apply (rem_2863 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_2865 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_2864 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_2866 : forall X1 X2 X3 X4 X5:term, auto___type_12 X4 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_95 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto___type_12 X4 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2865 X1 X2 X3 X4 X5).
Qed.

Remark rem_2867 : forall X1 X2:term, auto___def_94 (cons X1 X2) -> or_1
    (auto___type_12 X1 /\ auto___def_95 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2868 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2867 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2866 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2869 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2868 X1 X2 X3 X4 X5).
Qed.

Remark rem_2870 : forall X1 X2:term, auto___def_93 (cons X1 X2) -> or_1
    (auto___def_79 X1 /\ auto___def_99 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2871 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2870 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_2869 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2872 : forall X1 X2 X3 X4 X5:term, auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2871 X1 X2 X3 X4 X5).
Qed.

Remark rem_2873 : forall X1:term, auto___def_92 (h X1) -> or_1
    (auto___def_94 X1).
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2874 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_92 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2873 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_2872 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2875 : forall X1 X2 X3 X4 X5:term, auto___def_92 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_92 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2874 X1 X2 X3 X4 X5).
Qed.

Remark rem_2876 : forall X1 X2:term, auto___def_91 (cons X1 X2) -> or_1
    (auto___def_92 X1 /\ auto___def_93 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_2877 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_91 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2876 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_2875 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_2878 : forall X1 X2 X3 X4 X5:term, auto___def_91 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_91 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2877 X1 X2 X3 X4 X5).
Qed.

Remark rem_2879 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2611 X5)). tauto.
Qed.

Remark rem_2880 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2879 X1 X2 X3 X4 X5).
Qed.

Remark rem_2881 : forall X1 X2 X3 X4:term, auto___def_101 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_107 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_110 X4 -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intro H. intros.
  elim (rem_2636 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
Qed.

Remark rem_2882 : forall X1 X2 X3 X4:term, auto___def_110 X4 -> auto___def_111 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2646 (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) H);  intros.
  apply (rem_2881 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2883 : forall X1 X2 X3 X4:term, auto___def_109 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intro H. intros.
  elim (rem_2651 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2882 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2884 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___def_79 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_92 X4 -> auto___def_99 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2711 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
Qed.

Remark rem_2885 : forall X1 X2 X3 X4:term, auto___def_79 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_99 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_79 X3 -> auto___def_92 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___def_79 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_92 X4 -> auto___def_99 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2884 X1 X2 X3 X4).
Qed.

Remark rem_2886 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___def_92 X4 -> auto___def_93 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2. intro H. intros.
  elim (rem_2870 (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) H);  intros.
  apply (rem_2885 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2887 : forall X1 X2 X3 X4:term, auto___def_92 X4 -> auto___def_93 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___def_92 X4 -> auto___def_93 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2886 X1 X2 X3 X4).
Qed.

Remark rem_2888 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___def_91 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2876 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_2887 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_2889 : forall X1 X2 X3 X4:term, auto___def_91 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___def_91 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_2888 X1 X2 X3 X4).
Qed.

Remark rem_2890 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  tauto.
Qed.

Remark rem_2891 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_104 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2890 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_104_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2892 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_14 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___type_1 X1 -> auto___type_14 X1). tauto. exact (rem_2664 X1).
Qed.

Remark rem_2893 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_15 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto_agent X2 -> auto___type_15 X2). tauto. exact (rem_2675 X2).
Qed.

Remark rem_2894 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_107 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2890 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_107_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2895 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_15 X2 /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_15 X2). 2:apply (rem_2893 X1 X2 X3 X4);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_2894 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2896 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_106 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2895 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_106_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2897 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_14 X1 /\ auto___def_106 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_14 X1). 2:apply (rem_2892 X1 X2 X3 X4);  assumption.
  cut (auto___def_106 (cons X2 nil)). 2:apply (rem_2896 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2898 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_105 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2897 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_105_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2899 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_104 sym /\ auto___def_105 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_104 sym). 2:apply (rem_2891 X1 X2 X3 X4);  assumption.
  cut (auto___def_105 (cons X1 (cons X2 nil))). 2:apply (rem_2898 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2900 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_103 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2899 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_103_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2901 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_13 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___type_13 X3). tauto. exact (rem_2718 X3).
Qed.

Remark rem_2902 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_103 (key sym (cons X1 (cons X2 nil))) /\ auto___type_13 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_103 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_2900 X1 X2 X3 X4);  assumption.
  cut (auto___type_13 X3). 2:apply (rem_2901 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_2903 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2902 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_2904 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2905 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto_knows_current X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  cut (auto_knows_current X1). 2:apply (rem_2904 epsilon_mknows_current_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2906 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto___type_16 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  case (rem_2905 epsilon_mknows_current_p__type_16 X1 A1). clear  epsilon_mknows_current_p__type_16 A1. intros. apply trans___type_16_s_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1. tauto.
Defined.

Remark rem_2907 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current (s X1) -> auto___type_16 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intro H. intros.
  elim (rem_27 X1 H);  intros.
  apply (rem_2906 epsilon_mknows_current_p__type_16 X1);  tauto.
Defined.

Remark rem_2908 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16.  tauto.
Defined.

Remark rem_2909 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto___type_16 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16.  case (rem_2908 epsilon_mknows_current_p__type_16). clear  epsilon_mknows_current_p__type_16. intros. apply trans___type_16_nil_1;  tauto.
 clear  epsilon_mknows_current_p__type_16. tauto.
Defined.

Remark rem_2910 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto_knows_current nil -> auto___type_16 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intro H. intros.
  elim (rem_2260 H);  intros.
  apply (rem_2909 epsilon_mknows_current_p__type_16);  tauto.
Defined.

Remark rem_2911 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_56 X1 -> auto___def_56 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2912 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_56 X1 -> auto___def_56 X1). tauto. exact (rem_2911 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2913 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto___def_57 X2 -> auto___def_57 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2914 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_57 X2). tauto. exact (rem_2913 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2915 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_2912 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_2914 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2916 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_16 (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2915 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_f3_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2917 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current (f3 X1 X2) -> auto___type_16 (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2268 X1 X2 H);  intros.
  apply (rem_2916 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2918 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2919 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_109 X1 -> auto___def_109 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  cut (auto___def_109 X1). 2:apply (rem_2918 epsilon_mknows_current_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2920 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_109 X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  case (rem_2919 epsilon_mknows_current_p__type_16 X1 A1). clear  epsilon_mknows_current_p__type_16 A1. intros. apply trans___type_16_h_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1. tauto.
Defined.

Remark rem_2921 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2922 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_91 X1 -> auto___def_91 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  cut (auto___def_91 X1). 2:apply (rem_2921 epsilon_mknows_current_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2923 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_91 X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  case (rem_2922 epsilon_mknows_current_p__type_16 X1 A1). clear  epsilon_mknows_current_p__type_16 A1. intros. apply trans___type_16_h_2;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1. tauto.
Defined.

Remark rem_2924 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current X1 -> auto___type_16 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  case (rem_2905 epsilon_mknows_current_p__type_16 X1 A1). clear  epsilon_mknows_current_p__type_16 A1. intros. apply trans___type_16_h_3;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1. tauto.
Defined.

Remark rem_2925 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current (h X1) -> auto___type_16 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intro H. intros.
  elim (rem_2277 X1 H);  intros.
  apply (rem_2920 epsilon_mknows_current_p__type_16 X1);  tauto.
  apply (rem_2923 epsilon_mknows_current_p__type_16 X1);  tauto.
  apply (rem_2924 epsilon_mknows_current_p__type_16 X1);  tauto.
Defined.

Remark rem_2926 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_78 X1 -> auto___def_78 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2927 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_78 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_78 X1 -> auto___def_78 X1). tauto. exact (rem_2926 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2928 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2929 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2928 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2930 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2931 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2930 epsilon_mknows_current_p__type_16 X3).
Defined.

Remark rem_2932 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_78 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_78 X1). 2:apply (rem_2927 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2929 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2931 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2933 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_current X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2932 epsilon_mknows_current_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_16 A1 A2 A3. intros. apply trans___type_16_nonces_current_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2934 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto_knows_current (nonces_current X1 X2 X3) -> auto___type_16 (nonces_current X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intro H. intros.
  elim (rem_2287 X1 X2 X3 H);  intros.
  apply (rem_2933 epsilon_mknows_current_p__type_16 X1 X2 X3);  tauto.
Defined.

Remark rem_2935 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto___type_16 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16.  case (rem_2908 epsilon_mknows_current_p__type_16). clear  epsilon_mknows_current_p__type_16. intros. apply trans___type_16_respond_id_1;  tauto.
 clear  epsilon_mknows_current_p__type_16. tauto.
Defined.

Remark rem_2936 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto_knows_current respond_id -> auto___type_16 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intro H. intros.
  elim (rem_2290 H);  intros.
  apply (rem_2935 epsilon_mknows_current_p__type_16);  tauto.
Defined.

Remark rem_2937 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_103 X1 -> auto___def_103 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2938 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___def_103 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_103 X1 -> auto___def_103 X1). tauto. exact (rem_2937 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2939 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto___type_13 X2 -> auto___type_13 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2940 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_13 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___type_13 X2 -> auto___type_13 X2). tauto. exact (rem_2939 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2941 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> (auto___def_103 X1 /\ auto___type_13 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_103 X1). 2:apply (rem_2938 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  cut (auto___type_13 X2). 2:apply (rem_2940 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2942 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_103 X1 -> auto___type_13 X2 -> auto___type_16 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2941 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_f2_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2943 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current (f2 X1 X2) -> auto___type_16 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2298 X1 X2 H);  intros.
  apply (rem_2942 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2944 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto___type_16 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16.  case (rem_2908 epsilon_mknows_current_p__type_16). clear  epsilon_mknows_current_p__type_16. intros. apply trans___type_16_success_1;  tauto.
 clear  epsilon_mknows_current_p__type_16. tauto.
Defined.

Remark rem_2945 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto_knows_current success -> auto___type_16 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intro H. intros.
  elim (rem_2301 H);  intros.
  apply (rem_2944 epsilon_mknows_current_p__type_16);  tauto.
Defined.

Remark rem_2946 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto___type_16 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16.  case (rem_2908 epsilon_mknows_current_p__type_16). clear  epsilon_mknows_current_p__type_16. intros. apply trans___type_16_request_id_1;  tauto.
 clear  epsilon_mknows_current_p__type_16. tauto.
Defined.

Remark rem_2947 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> auto_knows_current request_id -> auto___type_16 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intro H. intros.
  elim (rem_2304 H);  intros.
  apply (rem_2946 epsilon_mknows_current_p__type_16);  tauto.
Defined.

Remark rem_2948 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_85 X1 -> auto___def_85 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2949 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_85 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_85 X1 -> auto___def_85 X1). tauto. exact (rem_2948 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2950 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto___def_86 X2 -> auto___def_86 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2951 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___def_86 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_86 X2 -> auto___def_86 X2). tauto. exact (rem_2950 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2952 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> (auto___def_85 X1 /\ auto___def_86 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_85 X1). 2:apply (rem_2949 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  cut (auto___def_86 X2). 2:apply (rem_2951 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2953 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_85 X1 -> auto___def_86 X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2952 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_crypt_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2954 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_2904 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2955 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto_knows_current X2 -> auto_knows_current X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2956 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto_knows_current X2 -> auto_knows_current X2). tauto. exact (rem_2955 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2957 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_2954 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_2956 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2958 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2957 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_crypt_2;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2959 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2960 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_2959 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2961 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2962 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_2961 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2963 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_2960 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_2962 epsilon_mknows_current_p__type_16 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_2964 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_16 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2963 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_crypt_3;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2965 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current (crypt X1 X2) -> auto___type_16 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_22 X1 X2 H);  intros.
  apply (rem_2953 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
  apply (rem_2958 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
  apply (rem_2964 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2966 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2967 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_2966 epsilon_mknows_current_p__type_16 X1);  assumption.
  tauto.
Defined.

Remark rem_2968 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_agent X1 -> auto___type_16 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intros A1.
  case (rem_2967 epsilon_mknows_current_p__type_16 X1 A1). clear  epsilon_mknows_current_p__type_16 A1. intros. apply trans___type_16_nai_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1. tauto.
Defined.

Remark rem_2969 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto_knows_current (nai X1) -> auto___type_16 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1. intro H. intros.
  elim (rem_2327 X1 H);  intros.
  apply (rem_2968 epsilon_mknows_current_p__type_16 X1);  tauto.
Defined.

Remark rem_2970 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___type_16 (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2915 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_f4_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2971 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current (f4 X1 X2) -> auto___type_16 (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2330 X1 X2 H);  intros.
  apply (rem_2970 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2972 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2973 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_2972 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2974 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2928 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2975 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2930 epsilon_mknows_current_p__type_16 X3).
Defined.

Remark rem_2976 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_2973 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_2974 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_2975 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2977 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_16 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2976 epsilon_mknows_current_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_16 A1 A2 A3. intros. apply trans___type_16_nonces_old_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2978 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto_knows_current (nonces_old X1 X2 X3) -> auto___type_16 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intro H. intros.
  elim (rem_2338 X1 X2 X3 H);  intros.
  apply (rem_2977 epsilon_mknows_current_p__type_16 X1 X2 X3);  tauto.
Defined.

Remark rem_2979 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto___type_16 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intros A1 A2.
  case (rem_2957 epsilon_mknows_current_p__type_16 X1 X2 A1 A2). clear  epsilon_mknows_current_p__type_16 A1 A2. intros. apply trans___type_16_cons_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2. tauto.
Defined.

Remark rem_2980 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2:term, auto_knows_current (cons X1 X2) -> auto___type_16 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2. intro H. intros.
  elim (rem_2341 X1 X2 H);  intros.
  apply (rem_2979 epsilon_mknows_current_p__type_16 X1 X2);  tauto.
Defined.

Remark rem_2981 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2982 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_2981 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2983 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2984 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_2983 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2985 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2986 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_2985 epsilon_mknows_current_p__type_16 X3).
Defined.

Remark rem_2987 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_2982 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_2984 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_2986 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2988 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_16 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2987 epsilon_mknows_current_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_16 A1 A2 A3. intros. apply trans___type_16_f1_1;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2989 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1:term, auto___def_87 X1 -> auto___def_87 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2990 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_87 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_87 X1 -> auto___def_87 X1). tauto. exact (rem_2989 epsilon_mknows_current_p__type_16 X1).
Defined.

Remark rem_2991 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X2:term, auto___def_85 X2 -> auto___def_85 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2992 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_85 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_85 X2 -> auto___def_85 X2). tauto. exact (rem_2991 epsilon_mknows_current_p__type_16 X2).
Defined.

Remark rem_2993 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X3:term, auto___def_79 X3 -> auto___def_79 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_2994 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___def_79 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3.
  cut (auto___def_79 X3 -> auto___def_79 X3). tauto. exact (rem_2993 epsilon_mknows_current_p__type_16 X3).
Defined.

Remark rem_2995 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> (auto___def_87 X1 /\ auto___def_85 X2 /\ auto___def_79 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_87 X1). 2:apply (rem_2990 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_85 X2). 2:apply (rem_2992 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  cut (auto___def_79 X3). 2:apply (rem_2994 epsilon_mknows_current_p__type_16 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_2996 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto___def_87 X1 -> auto___def_85 X2 -> auto___def_79 X3 -> auto___type_16 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_2995 epsilon_mknows_current_p__type_16 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_current_p__type_16 A1 A2 A3. intros. apply trans___type_16_f1_2;  tauto.
 clear  epsilon_mknows_current_p__type_16 A1 A2 A3. tauto.
Defined.

Remark rem_2997 : (forall X:term, auto_knows_current X -> auto___type_16 X)
    -> forall X1 X2 X3:term, auto_knows_current (f1 X1 X2 X3) -> auto___type_16 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_current_p__type_16. intros X1 X2 X3. intro H. intros.
  elim (rem_2359 X1 X2 X3 H);  intros.
  apply (rem_2988 epsilon_mknows_current_p__type_16 X1 X2 X3);  tauto.
  apply (rem_2996 epsilon_mknows_current_p__type_16 X1 X2 X3);  tauto.
Defined.

Remark rem_2998 : forall X4:term, auto_knows_current X4 -> auto___type_16 X4. (* Induct. *)
Proof.
  fix epsilon_mknows_current_p__type_16 1.
  intro X. case X.
   intro H. elim (rem_2371  H).
   intro H. elim (rem_2369  H).
  intros X1 X2;  exact (rem_2980 epsilon_mknows_current_p__type_16 X1 X2).
  intros X1 X2;  exact (rem_2965 epsilon_mknows_current_p__type_16 X1 X2).
  intros X1 X2 X3;  exact (rem_2997 epsilon_mknows_current_p__type_16 X1 X2 X3).
  intros X1 X2;  exact (rem_2943 epsilon_mknows_current_p__type_16 X1 X2).
  intros X1 X2;  exact (rem_2917 epsilon_mknows_current_p__type_16 X1 X2).
  intros X1 X2;  exact (rem_2971 epsilon_mknows_current_p__type_16 X1 X2).
  intros X1 X2. intro H. elim (rem_2364 X1 X2 H).
  intros X1;  exact (rem_2925 epsilon_mknows_current_p__type_16 X1).
   intro H. elim (rem_2362  H).
  intros X1 X2. intro H. elim (rem_2361 X1 X2 H).
  intros X1;  exact (rem_2969 epsilon_mknows_current_p__type_16 X1).
  exact (rem_2910 epsilon_mknows_current_p__type_16 ).
  intros X1 X2 X3;  exact (rem_2934 epsilon_mknows_current_p__type_16 X1 X2 X3).
  intros X1 X2 X3;  exact (rem_2978 epsilon_mknows_current_p__type_16 X1 X2 X3).
   intro H. elim (rem_2367  H).
   intro H. elim (rem_2368  H).
  exact (rem_2947 epsilon_mknows_current_p__type_16 ).
  exact (rem_2936 epsilon_mknows_current_p__type_16 ).
  intros X1;  exact (rem_2907 epsilon_mknows_current_p__type_16 X1).
   intro H. elim (rem_2370  H).
  intros X1 X2 X3. intro H. elim (rem_2366 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2365 X1 X2 X3 H).
  exact (rem_2945 epsilon_mknows_current_p__type_16 ).
   intro H. elim (rem_2363  H).
Qed.

Remark rem_2999 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_16 X4. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto_knows_current X4 -> auto___type_16 X4). tauto. exact (rem_2998 X4).
Qed.

Remark rem_3000 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2902 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_114_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3001 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2902 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_116_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3002 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3001 X1 X2 X3 X4);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_2894 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3003 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3002 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_115_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3004 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3000 X1 X2 X3 X4);  assumption.
  cut (auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_3003 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3005 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3004 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_113_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3006 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_16 X4 /\ auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_16 X4). 2:apply (rem_2999 X1 X2 X3 X4);  assumption.
  cut (auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_3005 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3007 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3006 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_112_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3008 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_3007 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3009 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3008 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_110_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3010 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2902 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_101_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3011 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3010 X1 X2 X3 X4);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_2894 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3012 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3011 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_111_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3013 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) /\ auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))))). 2:apply (rem_3009 X1 X2 X3 X4);  assumption.
  cut (auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_3012 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3014 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3013 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_109_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3015 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_3014 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3016 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3015 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3017 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_2890 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3018 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) /\ auto_knows_current nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_3016 X1 X2 X3 X4);  assumption.
  cut (auto_knows_current nil). 2:apply (rem_3017 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3019 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3018 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3020 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_2903 X1 X2 X3 X4);  assumption.
  cut (auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). 2:apply (rem_3019 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3021 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3020 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3022 : forall X1 X2 X3 X4:term, auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3021 X1 X2 X3 X4).
Qed.

Remark rem_3023 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2 H3 H4. intro H. intros.
  elim (rem_2341 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_3022 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3024 : forall X1 X2 X3 X4:term, auto_knows_current (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3023 X1 X2 X3 X4).
Qed.

Remark rem_3025 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2 H3 H4. intro H. intros.
  elim (rem_2277 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_2883 X1 X2 X3 X4);  tauto.
  apply (rem_2889 X1 X2 X3 X4);  tauto.
  apply (rem_3024 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3026 : forall X1 X2 X3 X4:term, auto___def_22 nil -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3025 X1 X2 X3 X4).
Qed.

Remark rem_3027 : forall X1 X2 X3 X4:term, auto_agent X2 -> auto___def_22 nil -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_22 nil -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3026 X1 X2 X3 X4).
Qed.

Remark rem_3028 : forall X1 X2 X3 X4:term, auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3027 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3029 : forall X1 X2 X3 X4:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3028 X1 X2 X3 X4).
Qed.

Remark rem_3030 : forall X1 X2 X3 X4:term, auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3029 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3031 : forall X1 X2 X3 X4:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3030 X1 X2 X3 X4).
Qed.

Remark rem_3032 : forall X1 X2:term, auto___def_87 (key X1 X2) -> or_1
    (auto___def_19 X1 /\ auto___def_20 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3033 : forall X1 X2 X3 X4:term, auto___def_79 X3 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_3032 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3031 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3034 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3033 X1 X2 X3 X4).
Qed.

Remark rem_3035 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_85 X5 -> auto___def_79 X3 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3034 X1 X2 X3 X4 X5).
Qed.

Remark rem_3036 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2359 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_2880 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3035 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3037 : forall X1 X2 X3 X4 X5:term, auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3036 X1 X2 X3 X4 X5).
Qed.

Remark rem_3038 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3037 X1 X2 X3 X4 X5).
Qed.

Remark rem_3039 : forall X1 X2 X3 X4 X5:term, auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3038 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3040 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3039 X1 X2 X3 X4 X5).
Qed.

Remark rem_3041 : forall X1 X2 X3 X4 X5:term, auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3040 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3042 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3041 X1 X2 X3 X4 X5).
Qed.

Remark rem_3043 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_3032 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3042 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3044 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_79 X3 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3043 X1 X2 X3 X4 X5).
Qed.

Remark rem_3045 : forall X1 X2:term, auto___def_86 (f5 X1 X2) -> or_1
    (auto___def_87 X1 /\ auto___def_79 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3046 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_3045 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
  apply (rem_3044 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3047 : forall X1 X2 X3 X4 X5:term, auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3046 X1 X2 X3 X4 X5).
Qed.

Remark rem_3048 : forall X1:term, auto_knows_current X1 -> auto___def_85 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_5). 2:apply seval_1_model_auto_knows_current. 2:assumption.
  cut ((seval_1 X1)=val_1_7). 2:apply seval_1_model_auto___def_85. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_3049 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_3048 X5)). tauto.
Qed.

Remark rem_3050 : forall X1 X2 X3 X4 X5:term, auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3049 X1 X2 X3 X4 X5).
Qed.

Remark rem_3051 : forall X1 X2 X3 X4 X5:term, auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2611 X5)). tauto.
Qed.

Remark rem_3052 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_22 X5 (f5 (key sym (cons X1 (cons X2 nil))) X3) H);  intros.
  apply (rem_3047 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3050 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3051 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3053 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3052 X1 X2 X3 X4 X5).
Qed.

Remark rem_3054 : forall X1 X2 X3 X4 X5:term, auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3053 X1 X2 X3 X4 X5).
Qed.

Remark rem_3055 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil H);  intros.
  apply (rem_3054 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3056 : forall X1 X2 X3 X4 X5:term, auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3055 X1 X2 X3 X4 X5).
Qed.

Remark rem_3057 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) H);  intros.
  apply (rem_3056 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3058 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3057 X1 X2 X3 X4 X5).
Qed.

Remark rem_3059 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3058 X1 X2 X3 X4 X5).
Qed.

Remark rem_3060 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil H);  intros.
  apply (rem_3059 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3061 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3060 X1 X2 X3 X4 X5).
Qed.

Remark rem_3062 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_3061 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3063 : forall X1 X2 X3 X4 X5:term, auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3062 X1 X2 X3 X4 X5).
Qed.

Remark rem_3064 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_3063 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3065 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3064 X1 X2 X3 X4 X5).
Qed.

Remark rem_3066 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2277 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) H);  intros.
  apply (rem_2652 X1 X2 X3 X4 X5);  tauto.
  apply (rem_2878 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3065 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3067 : forall X1 X2 X3 X4 X5:term, auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3066 X1 X2 X3 X4 X5).
Qed.

Remark rem_3068 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3067 X1 X2 X3 X4 X5).
Qed.

Remark rem_3069 : forall X1 X2 X3 X4 X5:term, auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3068 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3070 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3069 X1 X2 X3 X4 X5).
Qed.

Remark rem_3071 : forall X1 X2 X3 X4 X5:term, auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3070 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3072 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3071 X1 X2 X3 X4 X5).
Qed.

Remark rem_3073 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_3032 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3072 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3074 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_85 X5 -> auto___def_79 X3 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3073 X1 X2 X3 X4 X5).
Qed.

Remark rem_3075 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2359 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_2613 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3074 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3076 : forall X1 X2 X3 X4 X5:term, auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3075 X1 X2 X3 X4 X5).
Qed.

Remark rem_3077 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_22 nil -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3076 X1 X2 X3 X4 X5).
Qed.

Remark rem_3078 : forall X1 X2 X3 X4 X5:term, auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3077 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3079 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_21 (cons X2 nil) -> auto___def_79 X3 -> auto___def_85 X5 -> auto___type_1 X1 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3078 X1 X2 X3 X4 X5).
Qed.

Remark rem_3080 : forall X1 X2 X3 X4 X5:term, auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3079 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3081 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_79 X3 -> auto___def_85 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3080 X1 X2 X3 X4 X5).
Qed.

Remark rem_3082 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_3032 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3081 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3083 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_79 X3 -> auto___def_85 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3082 X1 X2 X3 X4 X5).
Qed.

Remark rem_3084 : forall X1 X2 X3 X4 X5:term, auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_3045 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
  apply (rem_3083 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3085 : forall X1:term, auto_knows_current X1 -> auto___def_16 X1 -> False. (* Check disjointness. *)
Proof.
  intro X1. intros.
  cut ((seval_1 X1)=val_1_5). 2:apply seval_1_model_auto_knows_current. 2:assumption.
  cut ((seval_1 X1)=val_1_4). 2:apply seval_1_model_auto___def_16. 2:assumption.
  intro HH. rewrite HH. discriminate.
Qed.

Remark rem_3086 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_3085 X5)). tauto.
Qed.

Remark rem_3087 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3086 X1 X2 X3 X4 X5).
Qed.

Remark rem_3088 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_3048 X5)). tauto.
Qed.

Remark rem_3089 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_85 X5 -> auto___def_79 X3 -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3088 X1 X2 X3 X4 X5).
Qed.

Remark rem_3090 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2359 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_3087 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3089 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3091 : forall X1 X2 X3 X4 X5:term, auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3090 X1 X2 X3 X4 X5).
Qed.

Remark rem_3092 : (forall X:term, auto___def_101 X -> auto___def_10 X -> False)
    -> forall X1 X2:term, auto___def_10 (f2 X1 X2) -> auto___def_103 X1 -> auto___type_13 X2 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_101_m__def_10. intros X1 X2. intro H. intros.
  elim (rem_855 X1 X2 H);  intros.
Defined.

Remark rem_3093 : (forall X:term, auto___def_101 X -> auto___def_10 X -> False)
    -> forall X1 X2:term, auto___def_101 (f2 X1 X2) -> auto___def_10 (f2 X1 X2) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_101_m__def_10. intros X1 X2. intro H. intros.
  elim (rem_2616 X1 X2 H);  intros.
  apply (rem_3092 epsilon_m__def_101_m__def_10 X1 X2);  tauto.
Defined.

Remark rem_3094 : forall X1:term, auto___def_101 X1 -> auto___def_10 X1 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_101_m__def_10 1.
  intro X. case X.
   intro H. elim (rem_2641  H).
   intro H. elim (rem_2637  H).
  intros X1 X2. intro H. elim (rem_2640 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2634 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_2642 X1 X2 X3 H).
  intros X1 X2;  exact (rem_3093 epsilon_m__def_101_m__def_10 X1 X2).
  intros X1 X2. intro H. elim (rem_2625 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2636 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2623 X1 X2 H).
  intros X1. intro H. elim (rem_2626 X1 H).
   intro H. elim (rem_2621  H).
  intros X1 X2. intro H. elim (rem_2619 X1 X2 H).
  intros X1. intro H. elim (rem_2635 X1 H).
   intro H. elim (rem_2620  H).
  intros X1 X2 X3. intro H. elim (rem_2627 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2639 X1 X2 X3 H).
   intro H. elim (rem_2630  H).
   intro H. elim (rem_2633  H).
   intro H. elim (rem_2632  H).
   intro H. elim (rem_2629  H).
  intros X1. intro H. elim (rem_2618 X1 H).
   intro H. elim (rem_2638  H).
  intros X1 X2 X3. intro H. elim (rem_2628 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2624 X1 X2 X3 H).
   intro H. elim (rem_2631  H).
   intro H. elim (rem_2622  H).
Qed.

Remark rem_3095 : forall X1:term, auto___def_101 X1 -> auto___def_10 X1 -> auto_knows_current X1 -> False. (* Subsumption by simpler clause. *)
Proof.
  intros X1.
  cut (auto___def_101 X1 -> auto___def_10 X1 -> False). tauto. exact (rem_3094 X1).
Qed.

Remark rem_3096 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_101 X3 -> auto___def_107 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_3095 X3)). tauto.
Qed.

Remark rem_3097 : forall X1 X2 X3 X4 X5:term, auto___def_101 X3 -> auto___def_107 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_10 X3 -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_101 X3 -> auto___def_107 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3096 X1 X2 X3 X4 X5).
Qed.

Remark rem_3098 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2646 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_3097 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3099 : forall X1 X2 X3 X4 X5:term, auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3098 X1 X2 X3 X4 X5).
Qed.

Remark rem_3100 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2649 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_3099 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3101 : forall X1 X2 X3 X4 X5:term, auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_111 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3100 X1 X2 X3 X4 X5).
Qed.

Remark rem_3102 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2651 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_3101 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3103 : forall X1 X2 X3 X4 X5:term, auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3102 X1 X2 X3 X4 X5).
Qed.

Remark rem_3104 : (forall X:term, auto___def_79 X -> auto___def_10 X -> False)
    -> forall X1 X2 X3:term, auto___def_10 (nonces_current X1 X2 X3) -> auto___def_78 X1 -> auto_agent X2 -> auto_agent X3 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_79_m__def_10. intros X1 X2 X3. intro H. intros.
  elim (rem_851 X1 X2 X3 H);  intros.
Defined.

Remark rem_3105 : (forall X:term, auto___def_79 X -> auto___def_10 X -> False)
    -> forall X1 X2 X3:term, auto___def_79 (nonces_current X1 X2 X3) -> auto___def_10 (nonces_current X1 X2 X3) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_79_m__def_10. intros X1 X2 X3. intro H. intros.
  elim (rem_2692 X1 X2 X3 H);  intros.
  apply (rem_3104 epsilon_m__def_79_m__def_10 X1 X2 X3);  tauto.
Defined.

Remark rem_3106 : forall X1:term, auto___def_79 X1 -> auto___def_10 X1 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_79_m__def_10 1.
  intro X. case X.
   intro H. elim (rem_2716  H).
   intro H. elim (rem_2712  H).
  intros X1 X2. intro H. elim (rem_2715 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2709 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_2717 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_2614 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2701 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2711 X1 X2 H).
  intros X1 X2. intro H. elim (rem_2699 X1 X2 H).
  intros X1. intro H. elim (rem_2702 X1 H).
   intro H. elim (rem_2697  H).
  intros X1 X2. intro H. elim (rem_2695 X1 X2 H).
  intros X1. intro H. elim (rem_2710 X1 H).
   intro H. elim (rem_2696  H).
  intros X1 X2 X3;  exact (rem_3105 epsilon_m__def_79_m__def_10 X1 X2 X3).
  intros X1 X2 X3. intro H. elim (rem_2714 X1 X2 X3 H).
   intro H. elim (rem_2705  H).
   intro H. elim (rem_2708  H).
   intro H. elim (rem_2707  H).
   intro H. elim (rem_2704  H).
  intros X1. intro H. elim (rem_2694 X1 H).
   intro H. elim (rem_2713  H).
  intros X1 X2 X3. intro H. elim (rem_2703 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_2700 X1 X2 X3 H).
   intro H. elim (rem_2706  H).
   intro H. elim (rem_2698  H).
Qed.

Remark rem_3107 : forall X1:term, auto___def_79 X1 -> auto___def_10 X1 -> auto_knows_current X1 -> False. (* Subsumption by simpler clause. *)
Proof.
  intros X1.
  cut (auto___def_79 X1 -> auto___def_10 X1 -> False). tauto. exact (rem_3106 X1).
Qed.

Remark rem_3108 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_79 X3 -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_3107 X3)). tauto.
Qed.

Remark rem_3109 : forall X1 X2 X3 X4 X5:term, auto___def_79 X3 -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_79 X3 -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_99 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3108 X1 X2 X3 X4 X5).
Qed.

Remark rem_3110 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2870 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_3109 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3111 : forall X1 X2 X3 X4 X5:term, auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_94 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3110 X1 X2 X3 X4 X5).
Qed.

Remark rem_3112 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_92 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2873 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_3111 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3113 : forall X1 X2 X3 X4 X5:term, auto___def_92 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_92 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto___def_93 (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3112 X1 X2 X3 X4 X5).
Qed.

Remark rem_3114 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_91 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2876 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_3113 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3115 : forall X1 X2 X3 X4 X5:term, auto___def_91 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_91 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3114 X1 X2 X3 X4 X5).
Qed.

Remark rem_3116 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2611 X5)). tauto.
Qed.

Remark rem_3117 : forall X1 X2 X3 X4 X5:term, auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_85 X5 -> auto___def_86 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3116 X1 X2 X3 X4 X5).
Qed.

Remark rem_3118 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_3085 X5)). tauto.
Qed.

Remark rem_3119 : forall X1 X2 X3 X4 X5:term, auto_knows_current X5 -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X5 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3118 X1 X2 X3 X4 X5).
Qed.

Remark rem_3120 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_101 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_107 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_110 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2636 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
Qed.

Remark rem_3121 : forall X1 X2 X3 X4:term, auto___def_101 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_107 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_10 X3 -> auto___def_110 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_101 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_107 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_110 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3120 X1 X2 X3 X4).
Qed.

Remark rem_3122 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_110 X4 -> auto___def_111 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2. intro H. intros.
  elim (rem_2646 (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) H);  intros.
  apply (rem_3121 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3123 : forall X1 X2 X3 X4:term, auto___def_110 X4 -> auto___def_111 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_110 X4 -> auto___def_111 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3122 X1 X2 X3 X4).
Qed.

Remark rem_3124 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_109 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2651 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_3123 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3125 : forall X1 X2 X3 X4:term, auto___def_109 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_109 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3124 X1 X2 X3 X4).
Qed.

Remark rem_3126 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_79 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_92 X4 -> auto___def_99 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2711 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
Qed.

Remark rem_3127 : forall X1 X2 X3 X4:term, auto___def_79 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_99 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___def_10 X3 -> auto___def_92 X4 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_79 (f4 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_92 X4 -> auto___def_99 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3126 X1 X2 X3 X4).
Qed.

Remark rem_3128 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_92 X4 -> auto___def_93 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2. intro H. intros.
  elim (rem_2870 (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil) H);  intros.
  apply (rem_3127 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3129 : forall X1 X2 X3 X4:term, auto___def_92 X4 -> auto___def_93 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_92 X4 -> auto___def_93 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3128 X1 X2 X3 X4).
Qed.

Remark rem_3130 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_91 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_2876 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_3129 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3131 : forall X1 X2 X3 X4:term, auto___def_91 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_91 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3130 X1 X2 X3 X4).
Qed.

Remark rem_3132 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  tauto.
Qed.

Remark rem_3133 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_104 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3132 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_104_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3134 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_14 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___type_1 X1 -> auto___type_14 X1). tauto. exact (rem_2664 X1).
Qed.

Remark rem_3135 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_15 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto_agent X2 -> auto___type_15 X2). tauto. exact (rem_2675 X2).
Qed.

Remark rem_3136 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_107 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3132 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_107_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3137 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_15 X2 /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_15 X2). 2:apply (rem_3135 X1 X2 X3 X4);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_3136 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3138 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_106 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3137 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_106_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3139 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_14 X1 /\ auto___def_106 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_14 X1). 2:apply (rem_3134 X1 X2 X3 X4);  assumption.
  cut (auto___def_106 (cons X2 nil)). 2:apply (rem_3138 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3140 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_105 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3139 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_105_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3141 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_104 sym /\ auto___def_105 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_104 sym). 2:apply (rem_3133 X1 X2 X3 X4);  assumption.
  cut (auto___def_105 (cons X1 (cons X2 nil))). 2:apply (rem_3140 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3142 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_103 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3141 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_103_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3143 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3144 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_13. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_3143 epsilon_m__def_10_p__type_13 X1).
Defined.

Remark rem_3145 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3146 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_13. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_3145 epsilon_m__def_10_p__type_13 X2).
Defined.

Remark rem_3147 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3148 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_13. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_3147 epsilon_m__def_10_p__type_13 X3).
Defined.

Remark rem_3149 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_10_p__type_13. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_3144 epsilon_m__def_10_p__type_13 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_3146 epsilon_m__def_10_p__type_13 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_3148 epsilon_m__def_10_p__type_13 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_3150 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_13 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_10_p__type_13. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_3149 epsilon_m__def_10_p__type_13 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_10_p__type_13 A1 A2 A3. intros. apply trans___type_13_nonces_old_1;  tauto.
 clear  epsilon_m__def_10_p__type_13 A1 A2 A3. tauto.
Defined.

Remark rem_3151 : (forall X:term, auto___def_10 X -> auto___type_13 X)
    -> forall X1 X2 X3:term, auto___def_10 (nonces_old X1 X2 X3) -> auto___type_13 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_10_p__type_13. intros X1 X2 X3. intro H. intros.
  elim (rem_840 X1 X2 X3 H);  intros.
  apply (rem_3150 epsilon_m__def_10_p__type_13 X1 X2 X3);  tauto.
Defined.

Remark rem_3152 : forall X3:term, auto___def_10 X3 -> auto___type_13 X3. (* Induct. *)
Proof.
  fix epsilon_m__def_10_p__type_13 1.
  intro X. case X.
   intro H. elim (rem_865  H).
   intro H. elim (rem_862  H).
  intros X1 X2. intro H. elim (rem_864 X1 X2 H).
  intros X1 X2. intro H. elim (rem_859 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_866 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_861 X1 X2 H).
  intros X1 X2. intro H. elim (rem_847 X1 X2 H).
  intros X1. intro H. elim (rem_850 X1 H).
   intro H. elim (rem_845  H).
  intros X1 X2. intro H. elim (rem_843 X1 X2 H).
  intros X1. intro H. elim (rem_860 X1 H).
   intro H. elim (rem_844  H).
  intros X1 X2 X3. intro H. elim (rem_851 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_3151 epsilon_m__def_10_p__type_13 X1 X2 X3).
   intro H. elim (rem_854  H).
   intro H. elim (rem_858  H).
   intro H. elim (rem_857  H).
   intro H. elim (rem_853  H).
  intros X1. intro H. elim (rem_842 X1 H).
   intro H. elim (rem_863  H).
  intros X1 X2 X3. intro H. elim (rem_852 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_848 X1 X2 X3 H).
   intro H. elim (rem_856  H).
   intro H. elim (rem_846  H).
Qed.

Remark rem_3153 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_13 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_13 X3). tauto. exact (rem_3152 X3).
Qed.

Remark rem_3154 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_103 (key sym (cons X1 (cons X2 nil))) /\ auto___type_13 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_103 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_3142 X1 X2 X3 X4);  assumption.
  cut (auto___type_13 X3). 2:apply (rem_3153 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3155 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3154 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3156 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___type_16 X4. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto_knows_current X4 -> auto___type_16 X4). tauto. exact (rem_2998 X4).
Qed.

Remark rem_3157 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3154 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_114_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3158 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3154 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_116_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3159 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_116 (f3 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3158 X1 X2 X3 X4);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_3136 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3160 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3159 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_115_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3161 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_114 (f4 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3157 X1 X2 X3 X4);  assumption.
  cut (auto___def_115 (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_3160 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3162 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3161 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_113_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3163 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___type_16 X4 /\ auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_16 X4). 2:apply (rem_3156 X1 X2 X3 X4);  assumption.
  cut (auto___def_113 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_3162 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3164 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3163 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_112_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3165 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_112 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_3164 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3166 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3165 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_110_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3167 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3154 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_101_f2_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3168 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto___def_107 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_101 (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3167 X1 X2 X3 X4);  assumption.
  cut (auto___def_107 nil). 2:apply (rem_3136 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3169 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3168 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_111_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3170 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) /\ auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_110 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))))). 2:apply (rem_3166 X1 X2 X3 X4);  assumption.
  cut (auto___def_111 (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). 2:apply (rem_3169 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3171 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3170 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_109_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3172 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_109 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). 2:apply (rem_3171 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3173 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3172 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_h_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3174 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3132 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3175 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) /\ auto_knows_current nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil)))). 2:apply (rem_3173 X1 X2 X3 X4);  assumption.
  cut (auto_knows_current nil). 2:apply (rem_3174 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3176 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3175 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3177 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> (auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3) /\ auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) X3)). 2:apply (rem_3155 X1 X2 X3 X4);  assumption.
  cut (auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). 2:apply (rem_3176 X1 X2 X3 X4);  assumption.
  tauto.
Qed.

Remark rem_3178 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4. intros A1 A2 A3 A4 A5 A6.
  case (rem_3177 X1 X2 X3 X4 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3179 : forall X1 X2 X3 X4:term, auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current X4 -> auto_knows_current (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3178 X1 X2 X3 X4).
Qed.

Remark rem_3180 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2 H3 H4. intro H. intros.
  elim (rem_2341 X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)) H);  intros.
  apply (rem_3179 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3181 : forall X1 X2 X3 X4:term, auto_knows_current (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3180 X1 X2 X3 X4).
Qed.

Remark rem_3182 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1 H2 H3 H4. intro H. intros.
  elim (rem_2277 (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil))) H);  intros.
  apply (rem_3125 X1 X2 X3 X4);  tauto.
  apply (rem_3131 X1 X2 X3 X4);  tauto.
  apply (rem_3181 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3183 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3182 X1 X2 X3 X4).
Qed.

Remark rem_3184 : forall X1 X2 X3 X4:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3183 X1 X2 X3 X4).
Qed.

Remark rem_3185 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3184 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3186 : forall X1 X2 X3 X4:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3185 X1 X2 X3 X4).
Qed.

Remark rem_3187 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3186 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3188 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3187 X1 X2 X3 X4).
Qed.

Remark rem_3189 : forall X1 X2 X3 X4:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4.
  cut (auto___def_10 X3 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3188 X1 X2 X3 X4).
Qed.

Remark rem_3190 : forall X1 X2 X3 X4:term, auto___def_10 X3 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4. intros H1. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3189 X1 X2 X3 X4);  tauto.
Qed.

Remark rem_3191 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3190 X1 X2 X3 X4).
Qed.

Remark rem_3192 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3191 X1 X2 X3 X4 X5).
Qed.

Remark rem_3193 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2611 X5)). tauto.
Qed.

Remark rem_3194 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_85 X5 -> auto___def_79 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3193 X1 X2 X3 X4 X5).
Qed.

Remark rem_3195 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2359 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_3192 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3194 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3196 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3195 X1 X2 X3 X4 X5).
Qed.

Remark rem_3197 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3196 X1 X2 X3 X4 X5).
Qed.

Remark rem_3198 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3197 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3199 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3198 X1 X2 X3 X4 X5).
Qed.

Remark rem_3200 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3199 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3201 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3200 X1 X2 X3 X4 X5).
Qed.

Remark rem_3202 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3201 X1 X2 X3 X4 X5).
Qed.

Remark rem_3203 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3202 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3204 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_10 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3203 X1 X2 X3 X4 X5).
Qed.

Remark rem_3205 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_2184 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
  apply (rem_3204 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3206 : forall X1 X2 X3 X4 X5:term, auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3205 X1 X2 X3 X4 X5).
Qed.

Remark rem_3207 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_22 X5 (f5 (key sym (cons X1 (cons X2 nil))) X3) H);  intros.
  apply (rem_3117 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3119 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3206 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3208 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3207 X1 X2 X3 X4 X5).
Qed.

Remark rem_3209 : forall X1 X2 X3 X4 X5:term, auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3208 X1 X2 X3 X4 X5).
Qed.

Remark rem_3210 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil H);  intros.
  apply (rem_3209 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3211 : forall X1 X2 X3 X4 X5:term, auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3210 X1 X2 X3 X4 X5).
Qed.

Remark rem_3212 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) H);  intros.
  apply (rem_3211 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3213 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3212 X1 X2 X3 X4 X5).
Qed.

Remark rem_3214 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3213 X1 X2 X3 X4 X5).
Qed.

Remark rem_3215 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil H);  intros.
  apply (rem_3214 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3216 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3215 X1 X2 X3 X4 X5).
Qed.

Remark rem_3217 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil) H);  intros.
  apply (rem_3216 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3218 : forall X1 X2 X3 X4 X5:term, auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) -> auto_knows_current (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3217 X1 X2 X3 X4 X5).
Qed.

Remark rem_3219 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2341 (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)) H);  intros.
  apply (rem_3218 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3220 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3219 X1 X2 X3 X4 X5).
Qed.

Remark rem_3221 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2277 (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil))) H);  intros.
  apply (rem_3103 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3115 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3220 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3222 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3221 X1 X2 X3 X4 X5).
Qed.

Remark rem_3223 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3222 X1 X2 X3 X4 X5).
Qed.

Remark rem_3224 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3223 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3225 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3224 X1 X2 X3 X4 X5).
Qed.

Remark rem_3226 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3225 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3227 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3226 X1 X2 X3 X4 X5).
Qed.

Remark rem_3228 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3227 X1 X2 X3 X4 X5).
Qed.

Remark rem_3229 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3228 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3230 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_16 X5 -> auto___def_10 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3229 X1 X2 X3 X4 X5).
Qed.

Remark rem_3231 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2611 X5)). tauto.
Qed.

Remark rem_3232 : forall X1 X2 X3 X4 X5:term, auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___def_85 X5 -> auto___def_79 X3 -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_79 X3 -> auto___def_85 X5 -> auto___def_87 (key sym (cons X1 (cons X2 nil))) -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3231 X1 X2 X3 X4 X5).
Qed.

Remark rem_3233 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2 H3 H4 H5. intro H. intros.
  elim (rem_2359 (key sym (cons X1 (cons X2 nil))) X5 X3 H);  intros.
  apply (rem_3230 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3232 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3234 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3233 X1 X2 X3 X4 X5).
Qed.

Remark rem_3235 : forall X1 X2 X3 X4 X5:term, auto_agent X2 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X5 -> auto___type_1 X1 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_22 nil -> auto___type_1 X1 -> auto_agent X2 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3234 X1 X2 X3 X4 X5).
Qed.

Remark rem_3236 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X2 nil H);  intros.
  apply (rem_3235 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3237 : forall X1 X2 X3 X4 X5:term, auto___type_1 X1 -> auto___def_21 (cons X2 nil) -> auto___def_10 X3 -> auto___def_16 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_21 (cons X2 nil) -> auto___type_1 X1 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3236 X1 X2 X3 X4 X5).
Qed.

Remark rem_3238 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X1 (cons X2 nil) H);  intros.
  apply (rem_3237 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3239 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3238 X1 X2 X3 X4 X5).
Qed.

Remark rem_3240 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto___def_10 X3 -> auto___def_16 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_19 sym -> auto___def_20 (cons X1 (cons X2 nil)) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3239 X1 X2 X3 X4 X5).
Qed.

Remark rem_3241 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3240 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3242 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto___def_10 X3 -> auto___def_16 X5 -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X5 -> auto___def_18 (key sym (cons X1 (cons X2 nil))) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3241 X1 X2 X3 X4 X5).
Qed.

Remark rem_3243 : forall X1 X2 X3 X4 X5:term, auto___def_16 X5 -> auto___def_17 (f5 (key sym (cons X1 (cons X2 nil))) X3) -> auto_knows_current X3 -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2184 (key sym (cons X1 (cons X2 nil))) X3 H);  intros.
  apply (rem_3242 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3244 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_22 X5 (f5 (key sym (cons X1 (cons X2 nil))) X3) H);  intros.
  apply (rem_3084 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3091 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3243 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3245 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3244 X1 X2 X3 X4 X5).
Qed.

Remark rem_3246 : forall X1 X2 X3 X4 X5:term, auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current nil -> auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3245 X1 X2 X3 X4 X5).
Qed.

Remark rem_3247 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2341 (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil H);  intros.
  apply (rem_3246 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3248 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3247 X1 X2 X3 X4 X5).
Qed.

Remark rem_3249 : forall X1 X2 X3 X4 X5:term, auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current nil -> auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) -> auto_knows_current nil -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3248 X1 X2 X3 X4 X5).
Qed.

Remark rem_3250 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2341 (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil H);  intros.
  apply (rem_3249 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3251 : forall X1 X2 X3 X4 X5:term, auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current X3 -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3250 X1 X2 X3 X4 X5).
Qed.

Remark rem_3252 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2341 (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil) H);  intros.
  apply (rem_3251 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3253 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current X3 -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_current X3 -> auto_knows_current (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) -> auto_knows_current (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3252 X1 X2 X3 X4 X5).
Qed.

Remark rem_3254 : forall X1 X2 X3 X4 X5:term, auto_knows_current X3 -> auto_knows_current (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil)) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2341 (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil) H);  intros.
  apply (rem_3253 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3255 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_2341 X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil)) H);  intros.
  apply (rem_3254 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3256 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil)). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto.
  exact (rem_3255 X1 X2 X3 X4 X5).
Qed.

Remark rem_3257 : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil))) nil)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X4 X3 X2 X1 X5.
  cut (auto_knows_current (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X1 (cons X2 nil))) X3)) (cons (f1 (key sym (cons X1 (cons X2 nil))) X5 X3) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X1 (cons X2 nil))) X3) (cons (f3 (key sym (cons X1 (cons X2 nil))) X3) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) X3) nil))) nil))). tauto. exact (rem_3256 X1 X2 X3 X4 X5).
Qed.

Remark rem_3258 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X1:term, auto___def_56 X1 -> auto___def_56 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3259 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_55_pknows_current. intros X1 X2.
  cut (auto___def_56 X1 -> auto___def_56 X1). tauto. exact (rem_3258 epsilon_m__def_55_pknows_current X1).
Defined.

Remark rem_3260 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X2:term, auto___def_57 X2 -> auto___def_57 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3261 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_55_pknows_current. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_57 X2). tauto. exact (rem_3260 epsilon_m__def_55_pknows_current X2).
Defined.

Remark rem_3262 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_55_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_3259 epsilon_m__def_55_pknows_current X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_3261 epsilon_m__def_55_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3263 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_56 X1 -> auto___def_57 X2 -> auto_knows_current (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_55_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_3262 epsilon_m__def_55_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_55_pknows_current A1 A2. intros. apply trans_knows_current_f3_1;  tauto.
 clear  epsilon_m__def_55_pknows_current A1 A2. tauto.
Defined.

Remark rem_3264 : forall X1 X2:term, auto___def_55 (f3 X1 X2) -> or_1
    (auto___def_56 X1 /\ auto___def_57 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3265 : (forall X:term, auto___def_55 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_55 (f3 X1 X2) -> auto_knows_current (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_55_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_3264 X1 X2 H);  intros.
  apply (rem_3263 epsilon_m__def_55_pknows_current X1 X2);  tauto.
Defined.

Remark rem_3266 : forall X1:term, auto___def_55 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3267 : forall X1 X2:term, auto___def_55 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3268 : auto___def_55 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3269 : auto___def_55 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3270 : auto___def_55 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3271 : forall X1 X2:term, auto___def_55 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3272 : forall X1 X2 X3:term, auto___def_55 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3273 : forall X1:term, auto___def_55 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3274 : forall X1 X2 X3:term, auto___def_55 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3275 : forall X1 X2 X3:term, auto___def_55 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3276 : auto___def_55 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3277 : auto___def_55 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3278 : forall X1 X2:term, auto___def_55 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3279 : auto___def_55 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3280 : auto___def_55 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3281 : auto___def_55 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3282 : forall X1 X2:term, auto___def_55 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3283 : forall X1:term, auto___def_55 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3284 : forall X1 X2:term, auto___def_55 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3285 : auto___def_55 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3286 : auto___def_55 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3287 : forall X1 X2 X3:term, auto___def_55 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3288 : forall X1 X2:term, auto___def_55 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3289 : auto___def_55 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3290 : forall X1 X2 X3:term, auto___def_55 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3291 : forall X1:term, auto___def_55 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_55_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_3289  H).
   intro H. elim (rem_3285  H).
  intros X1 X2. intro H. elim (rem_3288 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3282 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3290 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3278 X1 X2 H).
  intros X1 X2;  exact (rem_3265 epsilon_m__def_55_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_3284 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3271 X1 X2 H).
  intros X1. intro H. elim (rem_3273 X1 H).
   intro H. elim (rem_3269  H).
  intros X1 X2. intro H. elim (rem_3267 X1 X2 H).
  intros X1. intro H. elim (rem_3283 X1 H).
   intro H. elim (rem_3268  H).
  intros X1 X2 X3. intro H. elim (rem_3274 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3287 X1 X2 X3 H).
   intro H. elim (rem_3277  H).
   intro H. elim (rem_3281  H).
   intro H. elim (rem_3280  H).
   intro H. elim (rem_3276  H).
  intros X1. intro H. elim (rem_3266 X1 H).
   intro H. elim (rem_3286  H).
  intros X1 X2 X3. intro H. elim (rem_3275 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3272 X1 X2 X3 H).
   intro H. elim (rem_3279  H).
   intro H. elim (rem_3270  H).
Qed.

Remark rem_3292 : forall X1 X2 X3:term, auto___def_54 X2 -> auto___def_55 X1 -> auto___type_7 X3 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___def_55 X1 -> auto_knows_current X1). tauto. exact (rem_3291 X1).
Qed.

Remark rem_3293 : forall X1 X2 X3:term, auto___type_7 X2 -> auto___def_54 X3 -> auto___def_55 X1 -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto___def_54 X2 -> auto___def_55 X1 -> auto___type_7 X3 -> auto_knows_current X1). tauto. exact (rem_3292 X1 X2 X3).
Qed.

Remark rem_3294 : forall X1 X2 X3:term, auto_server_keys_old X2 X3 X1 -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_2599 X2 X3 X1 H);  intros.
  apply (rem_3293 X1 X2 X3);  tauto.
Qed.

Remark rem_3295 : forall _big_cK _big_iK _big_s:term, auto_server_keys_old _big_s _big_iK _big_cK -> auto_knows_current _big_cK. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto_server_keys_old X2 X3 X1 -> auto_knows_current X1). tauto. exact (rem_3294 X1 X2 X3).
Qed.

Remark rem_3296 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_9 X1).
Qed.

Remark rem_3297 : forall X1 X2:term, auto_knows_current (cons X1 X2) -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_2341 X1 X2 H);  intros.
  apply (rem_3296 X1 X2);  tauto.
Qed.

Remark rem_3298 : forall _big_m1 _big_m2:term, auto_knows_current (cons _big_m1 _big_m2) -> auto_knows_current _big_m1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_current (cons X1 X2) -> auto_knows_current X1). tauto. exact (rem_3297 X1 X2).
Qed.

Remark rem_3299 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_magent_p__type_9.  tauto.
Defined.

Remark rem_3300 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto___type_9 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_9.  case (rem_3299 epsilon_magent_p__type_9). clear  epsilon_magent_p__type_9. intros. apply trans___type_9_i_1;  tauto.
 clear  epsilon_magent_p__type_9. tauto.
Defined.

Remark rem_3301 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto_agent i -> auto___type_9 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_9. intro H. intros.
  elim (rem_486 H);  intros.
  apply (rem_3300 epsilon_magent_p__type_9);  tauto.
Defined.

Remark rem_3302 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto___type_9 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_9.  case (rem_3299 epsilon_magent_p__type_9). clear  epsilon_magent_p__type_9. intros. apply trans___type_9_bob_1;  tauto.
 clear  epsilon_magent_p__type_9. tauto.
Defined.

Remark rem_3303 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto_agent bob -> auto___type_9 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_9. intro H. intros.
  elim (rem_489 H);  intros.
  apply (rem_3302 epsilon_magent_p__type_9);  tauto.
Defined.

Remark rem_3304 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto___type_9 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_9.  case (rem_3299 epsilon_magent_p__type_9). clear  epsilon_magent_p__type_9. intros. apply trans___type_9_server_1;  tauto.
 clear  epsilon_magent_p__type_9. tauto.
Defined.

Remark rem_3305 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto_agent server -> auto___type_9 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_9. intro H. intros.
  elim (rem_492 H);  intros.
  apply (rem_3304 epsilon_magent_p__type_9);  tauto.
Defined.

Remark rem_3306 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto___type_9 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_magent_p__type_9.  case (rem_3299 epsilon_magent_p__type_9). clear  epsilon_magent_p__type_9. intros. apply trans___type_9_alice_1;  tauto.
 clear  epsilon_magent_p__type_9. tauto.
Defined.

Remark rem_3307 : (forall X:term, auto_agent X -> auto___type_9 X)
    -> auto_agent alice -> auto___type_9 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_magent_p__type_9. intro H. intros.
  elim (rem_495 H);  intros.
  apply (rem_3306 epsilon_magent_p__type_9);  tauto.
Defined.

Remark rem_3308 : forall X1:term, auto_agent X1 -> auto___type_9 X1. (* Induct. *)
Proof.
  fix epsilon_magent_p__type_9 1.
  intro X. case X.
  exact (rem_3307 epsilon_magent_p__type_9 ).
  exact (rem_3303 epsilon_magent_p__type_9 ).
  intros X1 X2. intro H. elim (rem_517 X1 X2 H).
  intros X1 X2. intro H. elim (rem_513 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_518 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_503 X1 X2 H).
  intros X1 X2. intro H. elim (rem_515 X1 X2 H).
  intros X1 X2. intro H. elim (rem_501 X1 X2 H).
  intros X1. intro H. elim (rem_504 X1 H).
  exact (rem_3301 epsilon_magent_p__type_9 ).
  intros X1 X2. intro H. elim (rem_498 X1 X2 H).
  intros X1. intro H. elim (rem_514 X1 H).
   intro H. elim (rem_499  H).
  intros X1 X2 X3. intro H. elim (rem_505 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_516 X1 X2 X3 H).
   intro H. elim (rem_508  H).
   intro H. elim (rem_512  H).
   intro H. elim (rem_511  H).
   intro H. elim (rem_507  H).
  intros X1. intro H. elim (rem_497 X1 H).
  exact (rem_3305 epsilon_magent_p__type_9 ).
  intros X1 X2 X3. intro H. elim (rem_506 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_502 X1 X2 X3 H).
   intro H. elim (rem_510  H).
   intro H. elim (rem_500  H).
Qed.

Remark rem_3309 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___type_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_agent X1 -> auto___type_9 X1). tauto. exact (rem_3308 X1).
Qed.

Remark rem_3310 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  tauto.
Qed.

Remark rem_3311 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_66 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3310 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_66_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3312 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_1_p__type_11.  tauto.
Defined.

Remark rem_3313 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_11 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11.  case (rem_3312 epsilon_m__type_1_p__type_11). clear  epsilon_m__type_1_p__type_11. intros. apply trans___type_11_i_1;  tauto.
 clear  epsilon_m__type_1_p__type_11. tauto.
Defined.

Remark rem_3314 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_1 i -> auto___type_11 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11. intro H. intros.
  elim (rem_448 H);  intros.
  apply (rem_3313 epsilon_m__type_1_p__type_11);  tauto.
Defined.

Remark rem_3315 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_11 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11.  case (rem_3312 epsilon_m__type_1_p__type_11). clear  epsilon_m__type_1_p__type_11. intros. apply trans___type_11_bob_1;  tauto.
 clear  epsilon_m__type_1_p__type_11. tauto.
Defined.

Remark rem_3316 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_1 bob -> auto___type_11 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11. intro H. intros.
  elim (rem_451 H);  intros.
  apply (rem_3315 epsilon_m__type_1_p__type_11);  tauto.
Defined.

Remark rem_3317 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_11 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11.  case (rem_3312 epsilon_m__type_1_p__type_11). clear  epsilon_m__type_1_p__type_11. intros. apply trans___type_11_server_1;  tauto.
 clear  epsilon_m__type_1_p__type_11. tauto.
Defined.

Remark rem_3318 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_1 server -> auto___type_11 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11. intro H. intros.
  elim (rem_454 H);  intros.
  apply (rem_3317 epsilon_m__type_1_p__type_11);  tauto.
Defined.

Remark rem_3319 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_11 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11.  case (rem_3312 epsilon_m__type_1_p__type_11). clear  epsilon_m__type_1_p__type_11. intros. apply trans___type_11_alice_1;  tauto.
 clear  epsilon_m__type_1_p__type_11. tauto.
Defined.

Remark rem_3320 : (forall X:term, auto___type_1 X -> auto___type_11 X)
    -> auto___type_1 alice -> auto___type_11 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_1_p__type_11. intro H. intros.
  elim (rem_457 H);  intros.
  apply (rem_3319 epsilon_m__type_1_p__type_11);  tauto.
Defined.

Remark rem_3321 : forall X2:term, auto___type_1 X2 -> auto___type_11 X2. (* Induct. *)
Proof.
  fix epsilon_m__type_1_p__type_11 1.
  intro X. case X.
  exact (rem_3320 epsilon_m__type_1_p__type_11 ).
  exact (rem_3316 epsilon_m__type_1_p__type_11 ).
  intros X1 X2. intro H. elim (rem_479 X1 X2 H).
  intros X1 X2. intro H. elim (rem_475 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_480 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_471 X1 X2 H).
  intros X1 X2. intro H. elim (rem_465 X1 X2 H).
  intros X1 X2. intro H. elim (rem_477 X1 X2 H).
  intros X1 X2. intro H. elim (rem_463 X1 X2 H).
  intros X1. intro H. elim (rem_466 X1 H).
  exact (rem_3314 epsilon_m__type_1_p__type_11 ).
  intros X1 X2. intro H. elim (rem_460 X1 X2 H).
  intros X1. intro H. elim (rem_476 X1 H).
   intro H. elim (rem_461  H).
  intros X1 X2 X3. intro H. elim (rem_467 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_478 X1 X2 X3 H).
   intro H. elim (rem_470  H).
   intro H. elim (rem_474  H).
   intro H. elim (rem_473  H).
   intro H. elim (rem_469  H).
  intros X1. intro H. elim (rem_459 X1 H).
  exact (rem_3318 epsilon_m__type_1_p__type_11 ).
  intros X1 X2 X3. intro H. elim (rem_468 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_464 X1 X2 X3 H).
   intro H. elim (rem_472  H).
   intro H. elim (rem_462  H).
Qed.

Remark rem_3322 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___type_11 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___type_1 X2 -> auto___type_11 X2). tauto. exact (rem_3321 X2).
Qed.

Remark rem_3323 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_69 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3310 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_69_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3324 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> (auto___type_9 X1 /\ auto___def_69 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_9 X1). 2:apply (rem_3309 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_69 nil). 2:apply (rem_3323 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_3325 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_68 (cons X1 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3324 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_68_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3326 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> (auto___type_11 X2 /\ auto___def_68 (cons X1 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_11 X2). 2:apply (rem_3322 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_68 (cons X1 nil)). 2:apply (rem_3325 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_3327 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_67 (cons X2 (cons X1 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3326 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_67_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3328 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> (auto___def_66 sym /\ auto___def_67 (cons X2 (cons X1 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_66 sym). 2:apply (rem_3311 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_67 (cons X2 (cons X1 nil))). 2:apply (rem_3327 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_3329 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_65 (key sym (cons X2 (cons X1 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3328 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_65_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3330 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3331 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_10. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_3330 epsilon_m__def_10_p__type_10 X1).
Defined.

Remark rem_3332 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3333 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_10. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_3332 epsilon_m__def_10_p__type_10 X2).
Defined.

Remark rem_3334 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3335 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_10_p__type_10. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_3334 epsilon_m__def_10_p__type_10 X3).
Defined.

Remark rem_3336 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_10_p__type_10. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_3331 epsilon_m__def_10_p__type_10 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_3333 epsilon_m__def_10_p__type_10 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_3335 epsilon_m__def_10_p__type_10 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_3337 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_10 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_10_p__type_10. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_3336 epsilon_m__def_10_p__type_10 X1 X2 X3 A1 A2 A3). clear  epsilon_m__def_10_p__type_10 A1 A2 A3. intros. apply trans___type_10_nonces_old_1;  tauto.
 clear  epsilon_m__def_10_p__type_10 A1 A2 A3. tauto.
Defined.

Remark rem_3338 : (forall X:term, auto___def_10 X -> auto___type_10 X)
    -> forall X1 X2 X3:term, auto___def_10 (nonces_old X1 X2 X3) -> auto___type_10 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_10_p__type_10. intros X1 X2 X3. intro H. intros.
  elim (rem_840 X1 X2 X3 H);  intros.
  apply (rem_3337 epsilon_m__def_10_p__type_10 X1 X2 X3);  tauto.
Defined.

Remark rem_3339 : forall X3:term, auto___def_10 X3 -> auto___type_10 X3. (* Induct. *)
Proof.
  fix epsilon_m__def_10_p__type_10 1.
  intro X. case X.
   intro H. elim (rem_865  H).
   intro H. elim (rem_862  H).
  intros X1 X2. intro H. elim (rem_864 X1 X2 H).
  intros X1 X2. intro H. elim (rem_859 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_866 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_861 X1 X2 H).
  intros X1 X2. intro H. elim (rem_847 X1 X2 H).
  intros X1. intro H. elim (rem_850 X1 H).
   intro H. elim (rem_845  H).
  intros X1 X2. intro H. elim (rem_843 X1 X2 H).
  intros X1. intro H. elim (rem_860 X1 H).
   intro H. elim (rem_844  H).
  intros X1 X2 X3. intro H. elim (rem_851 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_3338 epsilon_m__def_10_p__type_10 X1 X2 X3).
   intro H. elim (rem_854  H).
   intro H. elim (rem_858  H).
   intro H. elim (rem_857  H).
   intro H. elim (rem_853  H).
  intros X1. intro H. elim (rem_842 X1 H).
   intro H. elim (rem_863  H).
  intros X1 X2 X3. intro H. elim (rem_852 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_848 X1 X2 X3 H).
   intro H. elim (rem_856  H).
   intro H. elim (rem_846  H).
Qed.

Remark rem_3340 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___type_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___type_10 X3). tauto. exact (rem_3339 X3).
Qed.

Remark rem_3341 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> (auto___def_65 (key sym (cons X2 (cons X1 nil))) /\ auto___type_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___def_65 (key sym (cons X2 (cons X1 nil)))). 2:apply (rem_3329 X1 X2 X3 X4 X5);  assumption.
  cut (auto___type_10 X3). 2:apply (rem_3340 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_3342 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_63 (f4 (key sym (cons X2 (cons X1 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3341 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_63_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3343 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto___def_64 (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3341 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans___def_64_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3344 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> (auto___type_9 X1 /\ auto___def_63 (f4 (key sym (cons X2 (cons X1 nil))) X3) /\ auto___def_64 (f3 (key sym (cons X2 (cons X1 nil))) X3)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  cut (auto___type_9 X1). 2:apply (rem_3309 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_63 (f4 (key sym (cons X2 (cons X1 nil))) X3)). 2:apply (rem_3342 X1 X2 X3 X4 X5);  assumption.
  cut (auto___def_64 (f3 (key sym (cons X2 (cons X1 nil))) X3)). 2:apply (rem_3343 X1 X2 X3 X4 X5);  assumption.
  tauto.
Qed.

Remark rem_3345 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3 A4 A5 A6 A7 A8.
  case (rem_3344 X1 X2 X3 X4 X5 A1 A2 A3 A4 A5 A6 A7 A8). clear  A1 A2 A3 A4 A5 A6 A7 A8. intros. apply trans_peer_keys_old_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6 A7 A8. tauto.
Qed.

Remark rem_3346 : forall X1 X2 X3 X4 X5:term, auto_agent X1 -> auto___def_22 nil -> auto___def_10 X3 -> auto___def_16 X4 -> auto___type_1 X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X4 -> auto___def_22 nil -> auto___type_1 X2 -> auto_agent X1 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3345 X1 X2 X3 X4 X5).
Qed.

Remark rem_3347 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_21 (cons X1 nil) -> auto___type_1 X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_556 X1 nil H);  intros.
  apply (rem_3346 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3348 : forall X1 X2 X3 X4 X5:term, auto___type_1 X2 -> auto___def_21 (cons X1 nil) -> auto___def_10 X3 -> auto___def_16 X4 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X4 -> auto___def_21 (cons X1 nil) -> auto___type_1 X2 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3347 X1 X2 X3 X4 X5).
Qed.

Remark rem_3349 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_20 (cons X2 (cons X1 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_588 X2 (cons X1 nil) H);  intros.
  apply (rem_3348 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3350 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_19 sym -> auto___def_20 (cons X2 (cons X1 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X4 -> auto___def_20 (cons X2 (cons X1 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto.
  exact (rem_3349 X1 X2 X3 X4 X5).
Qed.

Remark rem_3351 : forall X1 X2 X3 X4 X5:term, auto___def_19 sym -> auto___def_20 (cons X2 (cons X1 nil)) -> auto___def_10 X3 -> auto___def_16 X4 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X4 -> auto___def_19 sym -> auto___def_20 (cons X2 (cons X1 nil)) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3350 X1 X2 X3 X4 X5).
Qed.

Remark rem_3352 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_18 (key sym (cons X2 (cons X1 nil))) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_620 sym (cons X2 (cons X1 nil)) H);  intros.
  apply (rem_3351 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3353 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X2 (cons X1 nil))) -> auto___def_10 X3 -> auto___def_16 X4 -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X4 -> auto___def_18 (key sym (cons X2 (cons X1 nil))) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3352 X1 X2 X3 X4 X5).
Qed.

Remark rem_3354 : forall X1 X2 X3 X4 X5:term, auto___def_16 X4 -> auto___def_17 (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_2184 (key sym (cons X2 (cons X1 nil))) X3 H);  intros.
  apply (rem_3353 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3355 : forall X1 X2 X3 X4 X5:term, auto___def_10 X3 -> auto___def_16 X4 -> auto___def_18 (key sym (cons X2 (cons X1 nil))) -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3 X4 X5. intros.
  assert (HH:=(rem_2187 X4)). tauto.
Qed.

Remark rem_3356 : forall X1 X2 X3 X4 X5:term, auto___def_18 (key sym (cons X2 (cons X1 nil))) -> auto___def_16 X4 -> auto___def_10 X3 -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto___def_10 X3 -> auto___def_16 X4 -> auto___def_18 (key sym (cons X2 (cons X1 nil))) -> auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3355 X1 X2 X3 X4 X5).
Qed.

Remark rem_3357 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1 H2. intro H. intros.
  elim (rem_1872 (key sym (cons X2 (cons X1 nil))) X4 X3 H);  intros.
  apply (rem_3356 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3358 : forall X1 X2 X3 X4 X5:term, auto_knows_old X4 -> auto_knows_old (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old X3 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old X4 -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (f5 (key sym (cons X2 (cons X1 nil))) X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3357 X1 X2 X3 X4 X5).
Qed.

Remark rem_3359 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_6 X4 (f5 (key sym (cons X2 (cons X1 nil))) X3) H);  intros.
  apply (rem_3354 X1 X2 X3 X4 X5);  tauto.
  apply (rem_3358 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3360 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_knows_old nil -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto.
  exact (rem_3359 X1 X2 X3 X4 X5).
Qed.

Remark rem_3361 : forall X1 X2 X3 X4 X5:term, auto_knows_old (h (cons (h (cons X4 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) nil)) nil)))) -> auto_knows_old nil -> auto_knows_old X3 -> auto_knows_old (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X5 X4.
  cut (auto_knows_old X3 -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) -> auto_knows_old nil -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3360 X1 X2 X3 X4 X5).
Qed.

Remark rem_3362 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (h (cons (h (cons X4 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) nil)) nil)))) nil H);  intros.
  apply (rem_3361 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3363 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) -> auto_knows_old nil -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto.
  exact (rem_3362 X1 X2 X3 X4 X5).
Qed.

Remark rem_3364 : forall X1 X2 X3 X4 X5:term, auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) -> auto_knows_old nil -> auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X5 X4.
  cut (auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X4 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X5 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (f1 (key sym (cons X2 (cons X1 nil))) X5 X3) -> auto_knows_old nil -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3363 X1 X2 X3 X4 X5).
Qed.

Remark rem_3365 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil) -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil H);  intros.
  apply (rem_3364 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3366 : forall X1 X2 X3 X4 X5:term, auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_knows_old (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil) -> auto_knows_old X3 -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil) -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_knows_old (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3365 X1 X2 X3 X4 X5).
Qed.

Remark rem_3367 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil) H);  intros.
  apply (rem_3366 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3368 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_knows_old X3 -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3 X4 X5.
  cut (auto_knows_old X3 -> auto_knows_old (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) -> auto_knows_old (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3367 X1 X2 X3 X4 X5).
Qed.

Remark rem_3369 : forall X1 X2 X3 X4 X5:term, auto_knows_old X3 -> auto_knows_old (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil)) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros H1. intro H. intros.
  elim (rem_1862 (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil) H);  intros.
  apply (rem_3368 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3370 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intro H. intros.
  elim (rem_1862 X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil)) H);  intros.
  apply (rem_3369 X1 X2 X3 X4 X5);  tauto.
Qed.

Remark rem_3371 : forall X1 X2 X3 X4 X5:term, auto_knows_old (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_knows_old success -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Split. *)
Proof.
  intros X1 X2 X3 X4 X5.
  cut (auto_knows_old (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto.
  exact (rem_3370 X1 X2 X3 X4 X5).
Qed.

Remark rem_3372 : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_old success -> auto_knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_peer_keys_old _big_p (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns). (* Prove equivalent, normalized clause. *)
Proof.
   intros X5 X3 X1 X2 X4.
  cut (auto_knows_old (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_knows_old success -> auto_peer_keys_old X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3371 X1 X2 X3 X4 X5).
Qed.

Remark rem_3373 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_3 X1).
Qed.

Remark rem_3374 : forall X1 X2:term, auto_knows_old X2 -> auto_knows_old X1 -> auto_knows_old X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1). tauto. exact (rem_3373 X1 X2).
Qed.

Remark rem_3375 : forall X1 X2:term, auto_knows_old (cons X2 X1) -> auto_knows_old X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_1862 X2 X1 H);  intros.
  apply (rem_3374 X1 X2);  tauto.
Qed.

Remark rem_3376 : forall _big_m1 _big_m2:term, auto_knows_old (cons _big_m1 _big_m2) -> auto_knows_old _big_m2. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_old (cons X2 X1) -> auto_knows_old X1). tauto. exact (rem_3375 X1 X2).
Qed.

Remark rem_3377 : forall X1 X2 X3:term, auto___def_122 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3378 : (forall X:term, auto___def_57 X -> auto___def_122 X -> False)
    -> forall X1 X2 X3:term, auto___def_122 (nonces_old X1 X2 X3) -> auto___type_6 X1 -> auto_knows_old X1 -> auto___type_4 X2 -> auto_agent X2 -> auto_agent X3 -> auto___type_5 X3 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_57_m__def_122. intros X1 X2 X3. intro H. intros.
  elim (rem_3377 X1 X2 X3 H);  intros.
Defined.

Remark rem_3379 : forall X1 X2 X3:term, auto___def_57 (nonces_old X1 X2 X3) -> or_1
    (auto___type_6 X1 /\ auto_knows_old X1 /\ auto___type_4 X2 /\ auto_agent X2 /\ auto_agent X3 /\ auto___type_5 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3380 : (forall X:term, auto___def_57 X -> auto___def_122 X -> False)
    -> forall X1 X2 X3:term, auto___def_57 (nonces_old X1 X2 X3) -> auto___def_122 (nonces_old X1 X2 X3) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_57_m__def_122. intros X1 X2 X3. intro H. intros.
  elim (rem_3379 X1 X2 X3 H);  intros.
  apply (rem_3378 epsilon_m__def_57_m__def_122 X1 X2 X3);  tauto.
Defined.

Remark rem_3381 : forall X1:term, auto___def_57 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3382 : forall X1 X2:term, auto___def_57 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3383 : auto___def_57 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3384 : auto___def_57 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3385 : auto___def_57 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3386 : forall X1 X2:term, auto___def_57 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3387 : forall X1 X2 X3:term, auto___def_57 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3388 : forall X1 X2:term, auto___def_57 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3389 : forall X1:term, auto___def_57 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3390 : forall X1 X2 X3:term, auto___def_57 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3391 : forall X1 X2 X3:term, auto___def_57 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3392 : auto___def_57 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3393 : auto___def_57 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3394 : forall X1 X2:term, auto___def_57 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3395 : auto___def_57 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3396 : auto___def_57 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3397 : auto___def_57 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3398 : forall X1 X2:term, auto___def_57 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3399 : forall X1:term, auto___def_57 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3400 : forall X1 X2:term, auto___def_57 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3401 : auto___def_57 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3402 : auto___def_57 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3403 : forall X1 X2:term, auto___def_57 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3404 : auto___def_57 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3405 : forall X1 X2 X3:term, auto___def_57 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3406 : forall X2:term, auto___def_57 X2 -> auto___def_122 X2 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_57_m__def_122 1.
  intro X. case X.
   intro H. elim (rem_3404  H).
   intro H. elim (rem_3401  H).
  intros X1 X2. intro H. elim (rem_3403 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3398 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3405 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3394 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3388 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3400 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3386 X1 X2 H).
  intros X1. intro H. elim (rem_3389 X1 H).
   intro H. elim (rem_3384  H).
  intros X1 X2. intro H. elim (rem_3382 X1 X2 H).
  intros X1. intro H. elim (rem_3399 X1 H).
   intro H. elim (rem_3383  H).
  intros X1 X2 X3. intro H. elim (rem_3390 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_3380 epsilon_m__def_57_m__def_122 X1 X2 X3).
   intro H. elim (rem_3393  H).
   intro H. elim (rem_3397  H).
   intro H. elim (rem_3396  H).
   intro H. elim (rem_3392  H).
  intros X1. intro H. elim (rem_3381 X1 H).
   intro H. elim (rem_3402  H).
  intros X1 X2 X3. intro H. elim (rem_3391 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3387 X1 X2 X3 H).
   intro H. elim (rem_3395  H).
   intro H. elim (rem_3385  H).
Qed.

Remark rem_3407 : (forall X:term, auto___def_119 X -> auto_knows_current X -> False)
    -> forall X2:term, auto___def_57 X2 -> auto___def_122 X2 -> False. (* Cut history. *)
Proof.  intros epsilon_m__def_119_mknows_current. exact (rem_3406).
Defined.

Remark rem_3408 : (forall X:term, auto___def_119 X -> auto_knows_current X -> False)
    -> forall X1 X2:term, auto___def_122 X2 -> auto___def_121 X1 -> auto___def_57 X2 -> auto___def_56 X1 -> False. (* Split. *)
Proof.
  intros epsilon_m__def_119_mknows_current. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_122 X2 -> False). clear  epsilon_m__def_119_mknows_current. tauto.
  exact (rem_3407 epsilon_m__def_119_mknows_current X2).
Defined.

Remark rem_3409 : (forall X:term, auto___def_119 X -> auto_knows_current X -> False)
    -> forall X1 X2:term, auto_knows_current (f4 X1 X2) -> auto___def_121 X1 -> auto___def_122 X2 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_119_mknows_current. intros X1 X2. intro H. intros.
  elim (rem_2330 X1 X2 H);  intros.
  apply (rem_3408 epsilon_m__def_119_mknows_current X1 X2);  tauto.
Defined.

Remark rem_3410 : forall X1 X2:term, auto___def_119 (f4 X1 X2) -> or_1
    (auto___def_121 X1 /\ auto___def_122 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3411 : (forall X:term, auto___def_119 X -> auto_knows_current X -> False)
    -> forall X1 X2:term, auto___def_119 (f4 X1 X2) -> auto_knows_current (f4 X1 X2) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_119_mknows_current. intros X1 X2. intro H. intros.
  elim (rem_3410 X1 X2 H);  intros.
  apply (rem_3409 epsilon_m__def_119_mknows_current X1 X2);  tauto.
Defined.

Remark rem_3412 : forall X1:term, auto___def_119 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3413 : forall X1 X2:term, auto___def_119 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3414 : auto___def_119 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3415 : auto___def_119 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3416 : auto___def_119 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3417 : forall X1 X2:term, auto___def_119 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3418 : forall X1 X2 X3:term, auto___def_119 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3419 : forall X1 X2:term, auto___def_119 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3420 : forall X1:term, auto___def_119 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3421 : forall X1 X2 X3:term, auto___def_119 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3422 : forall X1 X2 X3:term, auto___def_119 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3423 : auto___def_119 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3424 : auto___def_119 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3425 : forall X1 X2:term, auto___def_119 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3426 : auto___def_119 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3427 : auto___def_119 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3428 : auto___def_119 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3429 : forall X1 X2:term, auto___def_119 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3430 : forall X1:term, auto___def_119 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3431 : auto___def_119 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3432 : auto___def_119 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3433 : forall X1 X2 X3:term, auto___def_119 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3434 : forall X1 X2:term, auto___def_119 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3435 : auto___def_119 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3436 : forall X1 X2 X3:term, auto___def_119 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3437 : forall X1:term, auto___def_119 X1 -> auto_knows_current X1 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_119_mknows_current 1.
  intro X. case X.
   intro H. elim (rem_3435  H).
   intro H. elim (rem_3431  H).
  intros X1 X2. intro H. elim (rem_3434 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3429 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3436 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3425 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3419 X1 X2 H).
  intros X1 X2;  exact (rem_3411 epsilon_m__def_119_mknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_3417 X1 X2 H).
  intros X1. intro H. elim (rem_3420 X1 H).
   intro H. elim (rem_3415  H).
  intros X1 X2. intro H. elim (rem_3413 X1 X2 H).
  intros X1. intro H. elim (rem_3430 X1 H).
   intro H. elim (rem_3414  H).
  intros X1 X2 X3. intro H. elim (rem_3421 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3433 X1 X2 X3 H).
   intro H. elim (rem_3424  H).
   intro H. elim (rem_3428  H).
   intro H. elim (rem_3427  H).
   intro H. elim (rem_3423  H).
  intros X1. intro H. elim (rem_3412 X1 H).
   intro H. elim (rem_3432  H).
  intros X1 X2 X3. intro H. elim (rem_3422 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3418 X1 X2 X3 H).
   intro H. elim (rem_3426  H).
   intro H. elim (rem_3416  H).
Qed.

Remark rem_3438 : forall X1 X2 X3:term, auto___def_119 X1 -> auto___def_120 X2 -> auto___type_17 X3 -> auto_knows_current X1 -> False. (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3. intros.
  assert (HH:=(rem_3437 X1)). tauto.
Qed.

Remark rem_3439 : forall X1 X2 X3:term, auto___type_17 X2 -> auto___def_119 X1 -> auto___def_120 X3 -> auto_knows_current X1 -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto___def_119 X1 -> auto___def_120 X2 -> auto___type_17 X3 -> auto_knows_current X1 -> False). tauto. exact (rem_3438 X1 X2 X3).
Qed.

Remark rem_3440 : forall X1 X2 X3:term, auto_server_keys_current X1 X2 X3 -> or_1
    (auto___type_17 X1 /\ auto___def_119 X2 /\ auto___def_120 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3441 : forall X1 X2 X3:term, auto_knows_current X1 -> auto_server_keys_current X2 X1 X3 -> False. (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1. intro H. intros.
  elim (rem_3440 X2 X1 X3 H);  intros.
  apply (rem_3439 X1 X2 X3);  tauto.
Qed.

Remark rem_3442 : forall X1 X2 X3:term, auto_knows_current X1 -> auto_server_keys_current X2 X1 X3 -> auto___query__intruder_knows_server_IK. (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current X1 -> auto_server_keys_current X2 X1 X3 -> False). tauto.
  exact (rem_3441 X1 X2 X3).
Qed.

Remark rem_3443 : forall _big_cK _big_iK _big_s:term, auto_knows_current _big_iK -> auto_server_keys_current _big_s _big_iK _big_cK -> auto___query__intruder_knows_server_IK. (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X1 X2.
  cut (auto_knows_current X1 -> auto_server_keys_current X2 X1 X3 -> auto___query__intruder_knows_server_IK). tauto. exact (rem_3442 X1 X2 X3).
Qed.

Remark rem_3444 : (forall X:term, auto___def_66 X -> auto___def_58 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_66_p__def_58.  tauto.
Defined.

Remark rem_3445 : (forall X:term, auto___def_66 X -> auto___def_58 X)
    -> auto___def_58 sym. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_66_p__def_58.  case (rem_3444 epsilon_m__def_66_p__def_58). clear  epsilon_m__def_66_p__def_58. intros. apply trans___def_58_sym_1;  tauto.
 clear  epsilon_m__def_66_p__def_58. tauto.
Defined.

Remark rem_3446 : auto___def_66 sym -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3447 : (forall X:term, auto___def_66 X -> auto___def_58 X)
    -> auto___def_66 sym -> auto___def_58 sym. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_66_p__def_58. intro H. intros.
  elim (rem_3446 H);  intros.
  apply (rem_3445 epsilon_m__def_66_p__def_58);  tauto.
Defined.

Remark rem_3448 : forall X1:term, auto___def_66 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3449 : forall X1 X2:term, auto___def_66 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3450 : auto___def_66 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3451 : auto___def_66 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3452 : forall X1 X2:term, auto___def_66 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3453 : forall X1 X2 X3:term, auto___def_66 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3454 : forall X1 X2:term, auto___def_66 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3455 : forall X1:term, auto___def_66 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3456 : forall X1 X2 X3:term, auto___def_66 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3457 : forall X1 X2 X3:term, auto___def_66 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3458 : auto___def_66 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3459 : auto___def_66 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3460 : forall X1 X2:term, auto___def_66 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3461 : auto___def_66 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3462 : auto___def_66 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3463 : auto___def_66 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3464 : forall X1 X2:term, auto___def_66 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3465 : forall X1:term, auto___def_66 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3466 : forall X1 X2:term, auto___def_66 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3467 : auto___def_66 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3468 : auto___def_66 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3469 : forall X1 X2 X3:term, auto___def_66 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3470 : forall X1 X2:term, auto___def_66 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3471 : auto___def_66 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3472 : forall X1 X2 X3:term, auto___def_66 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3473 : forall X1:term, auto___def_66 X1 -> auto___def_58 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_66_p__def_58 1.
  intro X. case X.
   intro H. elim (rem_3471  H).
   intro H. elim (rem_3467  H).
  intros X1 X2. intro H. elim (rem_3470 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3464 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3472 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3460 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3454 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3466 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3452 X1 X2 H).
  intros X1. intro H. elim (rem_3455 X1 H).
   intro H. elim (rem_3451  H).
  intros X1 X2. intro H. elim (rem_3449 X1 X2 H).
  intros X1. intro H. elim (rem_3465 X1 H).
   intro H. elim (rem_3450  H).
  intros X1 X2 X3. intro H. elim (rem_3456 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3469 X1 X2 X3 H).
   intro H. elim (rem_3459  H).
   intro H. elim (rem_3463  H).
   intro H. elim (rem_3462  H).
   intro H. elim (rem_3458  H).
  intros X1. intro H. elim (rem_3448 X1 H).
   intro H. elim (rem_3468  H).
  intros X1 X2 X3. intro H. elim (rem_3457 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3453 X1 X2 X3 H).
   intro H. elim (rem_3461  H).
  exact (rem_3447 epsilon_m__def_66_p__def_58 ).
Qed.

Remark rem_3474 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X1:term, auto___def_66 X1 -> auto___def_58 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_65_p__def_56. exact (rem_3473).
Defined.

Remark rem_3475 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_66 X1 -> auto___def_67 X2 -> auto___def_58 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_65_p__def_56. intros X1 X2.
  cut (auto___def_66 X1 -> auto___def_58 X1). tauto. exact (rem_3474 epsilon_m__def_65_p__def_56 X1).
Defined.

Remark rem_3476 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_11_p__type_7.  tauto.
Defined.

Remark rem_3477 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_7 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7.  case (rem_3476 epsilon_m__type_11_p__type_7). clear  epsilon_m__type_11_p__type_7. intros. apply trans___type_7_i_1;  tauto.
 clear  epsilon_m__type_11_p__type_7. tauto.
Defined.

Remark rem_3478 : auto___type_11 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3479 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_11 i -> auto___type_7 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7. intro H. intros.
  elim (rem_3478 H);  intros.
  apply (rem_3477 epsilon_m__type_11_p__type_7);  tauto.
Defined.

Remark rem_3480 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_7 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7.  case (rem_3476 epsilon_m__type_11_p__type_7). clear  epsilon_m__type_11_p__type_7. intros. apply trans___type_7_bob_1;  tauto.
 clear  epsilon_m__type_11_p__type_7. tauto.
Defined.

Remark rem_3481 : auto___type_11 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3482 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_11 bob -> auto___type_7 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7. intro H. intros.
  elim (rem_3481 H);  intros.
  apply (rem_3480 epsilon_m__type_11_p__type_7);  tauto.
Defined.

Remark rem_3483 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_7 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7.  case (rem_3476 epsilon_m__type_11_p__type_7). clear  epsilon_m__type_11_p__type_7. intros. apply trans___type_7_server_1;  tauto.
 clear  epsilon_m__type_11_p__type_7. tauto.
Defined.

Remark rem_3484 : auto___type_11 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3485 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_11 server -> auto___type_7 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7. intro H. intros.
  elim (rem_3484 H);  intros.
  apply (rem_3483 epsilon_m__type_11_p__type_7);  tauto.
Defined.

Remark rem_3486 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_7 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7.  case (rem_3476 epsilon_m__type_11_p__type_7). clear  epsilon_m__type_11_p__type_7. intros. apply trans___type_7_alice_1;  tauto.
 clear  epsilon_m__type_11_p__type_7. tauto.
Defined.

Remark rem_3487 : auto___type_11 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3488 : (forall X:term, auto___type_11 X -> auto___type_7 X)
    -> auto___type_11 alice -> auto___type_7 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_11_p__type_7. intro H. intros.
  elim (rem_3487 H);  intros.
  apply (rem_3486 epsilon_m__type_11_p__type_7);  tauto.
Defined.

Remark rem_3489 : forall X1:term, auto___type_11 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3490 : forall X1 X2:term, auto___type_11 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3491 : auto___type_11 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3492 : auto___type_11 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3493 : forall X1 X2:term, auto___type_11 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3494 : forall X1 X2 X3:term, auto___type_11 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3495 : forall X1 X2:term, auto___type_11 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3496 : forall X1:term, auto___type_11 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3497 : forall X1 X2 X3:term, auto___type_11 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3498 : forall X1 X2 X3:term, auto___type_11 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3499 : auto___type_11 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3500 : auto___type_11 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3501 : forall X1 X2:term, auto___type_11 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3502 : auto___type_11 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3503 : auto___type_11 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3504 : auto___type_11 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3505 : forall X1 X2:term, auto___type_11 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3506 : forall X1:term, auto___type_11 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3507 : forall X1 X2:term, auto___type_11 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3508 : forall X1 X2 X3:term, auto___type_11 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3509 : forall X1 X2:term, auto___type_11 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3510 : forall X1 X2 X3:term, auto___type_11 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3511 : forall X1:term, auto___type_11 X1 -> auto___type_7 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_11_p__type_7 1.
  intro X. case X.
  exact (rem_3488 epsilon_m__type_11_p__type_7 ).
  exact (rem_3482 epsilon_m__type_11_p__type_7 ).
  intros X1 X2. intro H. elim (rem_3509 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3505 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3510 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3501 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3495 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3507 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3493 X1 X2 H).
  intros X1. intro H. elim (rem_3496 X1 H).
  exact (rem_3479 epsilon_m__type_11_p__type_7 ).
  intros X1 X2. intro H. elim (rem_3490 X1 X2 H).
  intros X1. intro H. elim (rem_3506 X1 H).
   intro H. elim (rem_3491  H).
  intros X1 X2 X3. intro H. elim (rem_3497 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3508 X1 X2 X3 H).
   intro H. elim (rem_3500  H).
   intro H. elim (rem_3504  H).
   intro H. elim (rem_3503  H).
   intro H. elim (rem_3499  H).
  intros X1. intro H. elim (rem_3489 X1 H).
  exact (rem_3485 epsilon_m__type_11_p__type_7 ).
  intros X1 X2 X3. intro H. elim (rem_3498 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3494 X1 X2 X3 H).
   intro H. elim (rem_3502  H).
   intro H. elim (rem_3492  H).
Qed.

Remark rem_3512 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X1:term, auto___type_11 X1 -> auto___type_7 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_67_p__def_59. exact (rem_3511).
Defined.

Remark rem_3513 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_11 X1 -> auto___def_68 X2 -> auto___type_7 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_67_p__def_59. intros X1 X2.
  cut (auto___type_11 X1 -> auto___type_7 X1). tauto. exact (rem_3512 epsilon_m__def_67_p__def_59 X1).
Defined.

Remark rem_3514 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_9_p__type_8.  tauto.
Defined.

Remark rem_3515 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_8 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8.  case (rem_3514 epsilon_m__type_9_p__type_8). clear  epsilon_m__type_9_p__type_8. intros. apply trans___type_8_i_1;  tauto.
 clear  epsilon_m__type_9_p__type_8. tauto.
Defined.

Remark rem_3516 : auto___type_9 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3517 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_9 i -> auto___type_8 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8. intro H. intros.
  elim (rem_3516 H);  intros.
  apply (rem_3515 epsilon_m__type_9_p__type_8);  tauto.
Defined.

Remark rem_3518 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_8 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8.  case (rem_3514 epsilon_m__type_9_p__type_8). clear  epsilon_m__type_9_p__type_8. intros. apply trans___type_8_bob_1;  tauto.
 clear  epsilon_m__type_9_p__type_8. tauto.
Defined.

Remark rem_3519 : auto___type_9 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3520 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_9 bob -> auto___type_8 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8. intro H. intros.
  elim (rem_3519 H);  intros.
  apply (rem_3518 epsilon_m__type_9_p__type_8);  tauto.
Defined.

Remark rem_3521 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_8 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8.  case (rem_3514 epsilon_m__type_9_p__type_8). clear  epsilon_m__type_9_p__type_8. intros. apply trans___type_8_server_1;  tauto.
 clear  epsilon_m__type_9_p__type_8. tauto.
Defined.

Remark rem_3522 : auto___type_9 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3523 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_9 server -> auto___type_8 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8. intro H. intros.
  elim (rem_3522 H);  intros.
  apply (rem_3521 epsilon_m__type_9_p__type_8);  tauto.
Defined.

Remark rem_3524 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_8 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8.  case (rem_3514 epsilon_m__type_9_p__type_8). clear  epsilon_m__type_9_p__type_8. intros. apply trans___type_8_alice_1;  tauto.
 clear  epsilon_m__type_9_p__type_8. tauto.
Defined.

Remark rem_3525 : auto___type_9 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3526 : (forall X:term, auto___type_9 X -> auto___type_8 X)
    -> auto___type_9 alice -> auto___type_8 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_9_p__type_8. intro H. intros.
  elim (rem_3525 H);  intros.
  apply (rem_3524 epsilon_m__type_9_p__type_8);  tauto.
Defined.

Remark rem_3527 : forall X1:term, auto___type_9 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3528 : forall X1 X2:term, auto___type_9 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3529 : auto___type_9 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3530 : auto___type_9 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3531 : forall X1 X2:term, auto___type_9 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3532 : forall X1 X2 X3:term, auto___type_9 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3533 : forall X1 X2:term, auto___type_9 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3534 : forall X1:term, auto___type_9 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3535 : forall X1 X2 X3:term, auto___type_9 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3536 : forall X1 X2 X3:term, auto___type_9 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3537 : auto___type_9 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3538 : auto___type_9 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3539 : forall X1 X2:term, auto___type_9 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3540 : auto___type_9 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3541 : auto___type_9 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3542 : auto___type_9 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3543 : forall X1 X2:term, auto___type_9 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3544 : forall X1:term, auto___type_9 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3545 : forall X1 X2:term, auto___type_9 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3546 : forall X1 X2 X3:term, auto___type_9 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3547 : forall X1 X2:term, auto___type_9 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3548 : forall X1 X2 X3:term, auto___type_9 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3549 : forall X1:term, auto___type_9 X1 -> auto___type_8 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_9_p__type_8 1.
  intro X. case X.
  exact (rem_3526 epsilon_m__type_9_p__type_8 ).
  exact (rem_3520 epsilon_m__type_9_p__type_8 ).
  intros X1 X2. intro H. elim (rem_3547 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3543 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3548 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3539 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3533 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3545 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3531 X1 X2 H).
  intros X1. intro H. elim (rem_3534 X1 H).
  exact (rem_3517 epsilon_m__type_9_p__type_8 ).
  intros X1 X2. intro H. elim (rem_3528 X1 X2 H).
  intros X1. intro H. elim (rem_3544 X1 H).
   intro H. elim (rem_3529  H).
  intros X1 X2 X3. intro H. elim (rem_3535 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3546 X1 X2 X3 H).
   intro H. elim (rem_3538  H).
   intro H. elim (rem_3542  H).
   intro H. elim (rem_3541  H).
   intro H. elim (rem_3537  H).
  intros X1. intro H. elim (rem_3527 X1 H).
  exact (rem_3523 epsilon_m__type_9_p__type_8 ).
  intros X1 X2 X3. intro H. elim (rem_3536 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3532 X1 X2 X3 H).
   intro H. elim (rem_3540  H).
   intro H. elim (rem_3530  H).
Qed.

Remark rem_3550 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X1:term, auto___type_9 X1 -> auto___type_8 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_68_p__def_60. exact (rem_3549).
Defined.

Remark rem_3551 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X1 X2:term, auto___type_9 X1 -> auto___def_69 X2 -> auto___type_8 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_68_p__def_60. intros X1 X2.
  cut (auto___type_9 X1 -> auto___type_8 X1). tauto. exact (rem_3550 epsilon_m__def_68_p__def_60 X1).
Defined.

Remark rem_3552 : (forall X:term, auto___def_69 X -> auto___def_61 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_69_p__def_61.  tauto.
Defined.

Remark rem_3553 : (forall X:term, auto___def_69 X -> auto___def_61 X)
    -> auto___def_61 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_69_p__def_61.  case (rem_3552 epsilon_m__def_69_p__def_61). clear  epsilon_m__def_69_p__def_61. intros. apply trans___def_61_nil_1;  tauto.
 clear  epsilon_m__def_69_p__def_61. tauto.
Defined.

Remark rem_3554 : auto___def_69 nil -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3555 : (forall X:term, auto___def_69 X -> auto___def_61 X)
    -> auto___def_69 nil -> auto___def_61 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_69_p__def_61. intro H. intros.
  elim (rem_3554 H);  intros.
  apply (rem_3553 epsilon_m__def_69_p__def_61);  tauto.
Defined.

Remark rem_3556 : forall X1:term, auto___def_69 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3557 : forall X1 X2:term, auto___def_69 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3558 : auto___def_69 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3559 : auto___def_69 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3560 : forall X1 X2:term, auto___def_69 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3561 : forall X1 X2 X3:term, auto___def_69 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3562 : forall X1 X2:term, auto___def_69 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3563 : forall X1:term, auto___def_69 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3564 : forall X1 X2 X3:term, auto___def_69 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3565 : forall X1 X2 X3:term, auto___def_69 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3566 : auto___def_69 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3567 : auto___def_69 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3568 : forall X1 X2:term, auto___def_69 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3569 : auto___def_69 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3570 : auto___def_69 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3571 : auto___def_69 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3572 : forall X1 X2:term, auto___def_69 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3573 : forall X1:term, auto___def_69 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3574 : forall X1 X2:term, auto___def_69 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3575 : auto___def_69 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3576 : auto___def_69 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3577 : forall X1 X2 X3:term, auto___def_69 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3578 : forall X1 X2:term, auto___def_69 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3579 : auto___def_69 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3580 : forall X1 X2 X3:term, auto___def_69 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3581 : forall X2:term, auto___def_69 X2 -> auto___def_61 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_69_p__def_61 1.
  intro X. case X.
   intro H. elim (rem_3579  H).
   intro H. elim (rem_3575  H).
  intros X1 X2. intro H. elim (rem_3578 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3572 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3580 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3568 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3562 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3574 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3560 X1 X2 H).
  intros X1. intro H. elim (rem_3563 X1 H).
   intro H. elim (rem_3558  H).
  intros X1 X2. intro H. elim (rem_3557 X1 X2 H).
  intros X1. intro H. elim (rem_3573 X1 H).
  exact (rem_3555 epsilon_m__def_69_p__def_61 ).
  intros X1 X2 X3. intro H. elim (rem_3564 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3577 X1 X2 X3 H).
   intro H. elim (rem_3567  H).
   intro H. elim (rem_3571  H).
   intro H. elim (rem_3570  H).
   intro H. elim (rem_3566  H).
  intros X1. intro H. elim (rem_3556 X1 H).
   intro H. elim (rem_3576  H).
  intros X1 X2 X3. intro H. elim (rem_3565 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3561 X1 X2 X3 H).
   intro H. elim (rem_3569  H).
   intro H. elim (rem_3559  H).
Qed.

Remark rem_3582 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X2:term, auto___def_69 X2 -> auto___def_61 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_68_p__def_60. exact (rem_3581).
Defined.

Remark rem_3583 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X1 X2:term, auto___type_9 X1 -> auto___def_69 X2 -> auto___def_61 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_68_p__def_60. intros X1 X2.
  cut (auto___def_69 X2 -> auto___def_61 X2). tauto. exact (rem_3582 epsilon_m__def_68_p__def_60 X2).
Defined.

Remark rem_3584 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X1 X2:term, auto___type_9 X1 -> auto___def_69 X2 -> (auto___type_8 X1 /\ auto___def_61 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_68_p__def_60. intros X1 X2. intros A1 A2.
  cut (auto___type_8 X1). 2:apply (rem_3551 epsilon_m__def_68_p__def_60 X1 X2);  assumption.
  cut (auto___def_61 X2). 2:apply (rem_3583 epsilon_m__def_68_p__def_60 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3585 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X1 X2:term, auto___type_9 X1 -> auto___def_69 X2 -> auto___def_60 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_68_p__def_60. intros X1 X2. intros A1 A2.
  case (rem_3584 epsilon_m__def_68_p__def_60 X1 X2 A1 A2). clear  epsilon_m__def_68_p__def_60 A1 A2. intros. apply trans___def_60_cons_1;  tauto.
 clear  epsilon_m__def_68_p__def_60 A1 A2. tauto.
Defined.

Remark rem_3586 : forall X1 X2:term, auto___def_68 (cons X1 X2) -> or_1
    (auto___type_9 X1 /\ auto___def_69 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3587 : (forall X:term, auto___def_68 X -> auto___def_60 X)
    -> forall X1 X2:term, auto___def_68 (cons X1 X2) -> auto___def_60 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_68_p__def_60. intros X1 X2. intro H. intros.
  elim (rem_3586 X1 X2 H);  intros.
  apply (rem_3585 epsilon_m__def_68_p__def_60 X1 X2);  tauto.
Defined.

Remark rem_3588 : forall X1:term, auto___def_68 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3589 : forall X1 X2:term, auto___def_68 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3590 : auto___def_68 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3591 : auto___def_68 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3592 : auto___def_68 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3593 : forall X1 X2:term, auto___def_68 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3594 : forall X1 X2 X3:term, auto___def_68 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3595 : forall X1 X2:term, auto___def_68 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3596 : forall X1:term, auto___def_68 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3597 : forall X1 X2 X3:term, auto___def_68 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3598 : forall X1 X2 X3:term, auto___def_68 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3599 : auto___def_68 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3600 : auto___def_68 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3601 : forall X1 X2:term, auto___def_68 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3602 : auto___def_68 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3603 : auto___def_68 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3604 : auto___def_68 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3605 : forall X1 X2:term, auto___def_68 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3606 : forall X1:term, auto___def_68 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3607 : forall X1 X2:term, auto___def_68 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3608 : auto___def_68 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3609 : auto___def_68 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3610 : forall X1 X2 X3:term, auto___def_68 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3611 : auto___def_68 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3612 : forall X1 X2 X3:term, auto___def_68 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3613 : forall X2:term, auto___def_68 X2 -> auto___def_60 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_68_p__def_60 1.
  intro X. case X.
   intro H. elim (rem_3611  H).
   intro H. elim (rem_3608  H).
  intros X1 X2;  exact (rem_3587 epsilon_m__def_68_p__def_60 X1 X2).
  intros X1 X2. intro H. elim (rem_3605 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3612 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3601 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3595 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3607 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3593 X1 X2 H).
  intros X1. intro H. elim (rem_3596 X1 H).
   intro H. elim (rem_3591  H).
  intros X1 X2. intro H. elim (rem_3589 X1 X2 H).
  intros X1. intro H. elim (rem_3606 X1 H).
   intro H. elim (rem_3590  H).
  intros X1 X2 X3. intro H. elim (rem_3597 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3610 X1 X2 X3 H).
   intro H. elim (rem_3600  H).
   intro H. elim (rem_3604  H).
   intro H. elim (rem_3603  H).
   intro H. elim (rem_3599  H).
  intros X1. intro H. elim (rem_3588 X1 H).
   intro H. elim (rem_3609  H).
  intros X1 X2 X3. intro H. elim (rem_3598 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3594 X1 X2 X3 H).
   intro H. elim (rem_3602  H).
   intro H. elim (rem_3592  H).
Qed.

Remark rem_3614 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X2:term, auto___def_68 X2 -> auto___def_60 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_67_p__def_59. exact (rem_3613).
Defined.

Remark rem_3615 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_11 X1 -> auto___def_68 X2 -> auto___def_60 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_67_p__def_59. intros X1 X2.
  cut (auto___def_68 X2 -> auto___def_60 X2). tauto. exact (rem_3614 epsilon_m__def_67_p__def_59 X2).
Defined.

Remark rem_3616 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_11 X1 -> auto___def_68 X2 -> (auto___type_7 X1 /\ auto___def_60 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_67_p__def_59. intros X1 X2. intros A1 A2.
  cut (auto___type_7 X1). 2:apply (rem_3513 epsilon_m__def_67_p__def_59 X1 X2);  assumption.
  cut (auto___def_60 X2). 2:apply (rem_3615 epsilon_m__def_67_p__def_59 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3617 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___type_11 X1 -> auto___def_68 X2 -> auto___def_59 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_67_p__def_59. intros X1 X2. intros A1 A2.
  case (rem_3616 epsilon_m__def_67_p__def_59 X1 X2 A1 A2). clear  epsilon_m__def_67_p__def_59 A1 A2. intros. apply trans___def_59_cons_1;  tauto.
 clear  epsilon_m__def_67_p__def_59 A1 A2. tauto.
Defined.

Remark rem_3618 : forall X1 X2:term, auto___def_67 (cons X1 X2) -> or_1
    (auto___type_11 X1 /\ auto___def_68 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3619 : (forall X:term, auto___def_67 X -> auto___def_59 X)
    -> forall X1 X2:term, auto___def_67 (cons X1 X2) -> auto___def_59 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_67_p__def_59. intros X1 X2. intro H. intros.
  elim (rem_3618 X1 X2 H);  intros.
  apply (rem_3617 epsilon_m__def_67_p__def_59 X1 X2);  tauto.
Defined.

Remark rem_3620 : forall X1:term, auto___def_67 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3621 : forall X1 X2:term, auto___def_67 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3622 : auto___def_67 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3623 : auto___def_67 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3624 : auto___def_67 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3625 : forall X1 X2:term, auto___def_67 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3626 : forall X1 X2 X3:term, auto___def_67 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3627 : forall X1 X2:term, auto___def_67 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3628 : forall X1:term, auto___def_67 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3629 : forall X1 X2 X3:term, auto___def_67 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3630 : forall X1 X2 X3:term, auto___def_67 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3631 : auto___def_67 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3632 : auto___def_67 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3633 : forall X1 X2:term, auto___def_67 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3634 : auto___def_67 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3635 : auto___def_67 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3636 : auto___def_67 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3637 : forall X1 X2:term, auto___def_67 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3638 : forall X1:term, auto___def_67 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3639 : forall X1 X2:term, auto___def_67 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3640 : auto___def_67 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3641 : auto___def_67 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3642 : forall X1 X2 X3:term, auto___def_67 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3643 : auto___def_67 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3644 : forall X1 X2 X3:term, auto___def_67 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3645 : forall X2:term, auto___def_67 X2 -> auto___def_59 X2. (* Induct. *)
Proof.
  fix epsilon_m__def_67_p__def_59 1.
  intro X. case X.
   intro H. elim (rem_3643  H).
   intro H. elim (rem_3640  H).
  intros X1 X2;  exact (rem_3619 epsilon_m__def_67_p__def_59 X1 X2).
  intros X1 X2. intro H. elim (rem_3637 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3644 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3633 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3627 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3639 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3625 X1 X2 H).
  intros X1. intro H. elim (rem_3628 X1 H).
   intro H. elim (rem_3623  H).
  intros X1 X2. intro H. elim (rem_3621 X1 X2 H).
  intros X1. intro H. elim (rem_3638 X1 H).
   intro H. elim (rem_3622  H).
  intros X1 X2 X3. intro H. elim (rem_3629 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3642 X1 X2 X3 H).
   intro H. elim (rem_3632  H).
   intro H. elim (rem_3636  H).
   intro H. elim (rem_3635  H).
   intro H. elim (rem_3631  H).
  intros X1. intro H. elim (rem_3620 X1 H).
   intro H. elim (rem_3641  H).
  intros X1 X2 X3. intro H. elim (rem_3630 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3626 X1 X2 X3 H).
   intro H. elim (rem_3634  H).
   intro H. elim (rem_3624  H).
Qed.

Remark rem_3646 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X2:term, auto___def_67 X2 -> auto___def_59 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_65_p__def_56. exact (rem_3645).
Defined.

Remark rem_3647 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_66 X1 -> auto___def_67 X2 -> auto___def_59 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_65_p__def_56. intros X1 X2.
  cut (auto___def_67 X2 -> auto___def_59 X2). tauto. exact (rem_3646 epsilon_m__def_65_p__def_56 X2).
Defined.

Remark rem_3648 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_66 X1 -> auto___def_67 X2 -> (auto___def_58 X1 /\ auto___def_59 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_65_p__def_56. intros X1 X2. intros A1 A2.
  cut (auto___def_58 X1). 2:apply (rem_3475 epsilon_m__def_65_p__def_56 X1 X2);  assumption.
  cut (auto___def_59 X2). 2:apply (rem_3647 epsilon_m__def_65_p__def_56 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3649 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_66 X1 -> auto___def_67 X2 -> auto___def_56 (key X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_65_p__def_56. intros X1 X2. intros A1 A2.
  case (rem_3648 epsilon_m__def_65_p__def_56 X1 X2 A1 A2). clear  epsilon_m__def_65_p__def_56 A1 A2. intros. apply trans___def_56_key_1;  tauto.
 clear  epsilon_m__def_65_p__def_56 A1 A2. tauto.
Defined.

Remark rem_3650 : forall X1 X2:term, auto___def_65 (key X1 X2) -> or_1
    (auto___def_66 X1 /\ auto___def_67 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3651 : (forall X:term, auto___def_65 X -> auto___def_56 X)
    -> forall X1 X2:term, auto___def_65 (key X1 X2) -> auto___def_56 (key X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_65_p__def_56. intros X1 X2. intro H. intros.
  elim (rem_3650 X1 X2 H);  intros.
  apply (rem_3649 epsilon_m__def_65_p__def_56 X1 X2);  tauto.
Defined.

Remark rem_3652 : forall X1:term, auto___def_65 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3653 : auto___def_65 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3654 : auto___def_65 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3655 : auto___def_65 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3656 : forall X1 X2:term, auto___def_65 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3657 : forall X1 X2 X3:term, auto___def_65 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3658 : forall X1 X2:term, auto___def_65 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3659 : forall X1:term, auto___def_65 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3660 : forall X1 X2 X3:term, auto___def_65 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3661 : forall X1 X2 X3:term, auto___def_65 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3662 : auto___def_65 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3663 : auto___def_65 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3664 : forall X1 X2:term, auto___def_65 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3665 : auto___def_65 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3666 : auto___def_65 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3667 : auto___def_65 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3668 : forall X1 X2:term, auto___def_65 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3669 : forall X1:term, auto___def_65 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3670 : forall X1 X2:term, auto___def_65 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3671 : auto___def_65 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3672 : auto___def_65 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3673 : forall X1 X2 X3:term, auto___def_65 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3674 : forall X1 X2:term, auto___def_65 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3675 : auto___def_65 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3676 : forall X1 X2 X3:term, auto___def_65 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3677 : forall X1:term, auto___def_65 X1 -> auto___def_56 X1. (* Induct. *)
Proof.
  fix epsilon_m__def_65_p__def_56 1.
  intro X. case X.
   intro H. elim (rem_3675  H).
   intro H. elim (rem_3671  H).
  intros X1 X2. intro H. elim (rem_3674 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3668 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3676 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3664 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3658 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3670 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3656 X1 X2 H).
  intros X1. intro H. elim (rem_3659 X1 H).
   intro H. elim (rem_3654  H).
  intros X1 X2;  exact (rem_3651 epsilon_m__def_65_p__def_56 X1 X2).
  intros X1. intro H. elim (rem_3669 X1 H).
   intro H. elim (rem_3653  H).
  intros X1 X2 X3. intro H. elim (rem_3660 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3673 X1 X2 X3 H).
   intro H. elim (rem_3663  H).
   intro H. elim (rem_3667  H).
   intro H. elim (rem_3666  H).
   intro H. elim (rem_3662  H).
  intros X1. intro H. elim (rem_3652 X1 H).
   intro H. elim (rem_3672  H).
  intros X1 X2 X3. intro H. elim (rem_3661 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3657 X1 X2 X3 H).
   intro H. elim (rem_3665  H).
   intro H. elim (rem_3655  H).
Qed.

Remark rem_3678 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X1:term, auto___def_65 X1 -> auto___def_56 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_64_pknows_current. exact (rem_3677).
Defined.

Remark rem_3679 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_64_pknows_current. intros X1 X2.
  cut (auto___def_65 X1 -> auto___def_56 X1). tauto. exact (rem_3678 epsilon_m__def_64_pknows_current X1).
Defined.

Remark rem_3680 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1:term, auto___def_9 X1 -> auto___type_6 X1. (* Cut history. *)
Proof.  intros epsilon_m__type_10_p__def_57. exact (rem_740).
Defined.

Remark rem_3681 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_6 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___type_6 X1). tauto. exact (rem_3680 epsilon_m__type_10_p__def_57 X1).
Defined.

Remark rem_3682 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1:term, auto___def_9 X1 -> auto_knows_old X1. (* Cut history. *)
Proof.  intros epsilon_m__type_10_p__def_57. exact (rem_807).
Defined.

Remark rem_3683 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto_knows_old X1). tauto. exact (rem_3682 epsilon_m__type_10_p__def_57 X1).
Defined.

Remark rem_3684 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X2:term, auto_agent X2 -> auto___type_4 X2. (* Cut history. *)
Proof.  intros epsilon_m__type_10_p__def_57. exact (rem_819).
Defined.

Remark rem_3685 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_4 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X2 -> auto___type_4 X2). tauto. exact (rem_3684 epsilon_m__type_10_p__def_57 X2).
Defined.

Remark rem_3686 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3687 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_3686 epsilon_m__type_10_p__def_57 X2).
Defined.

Remark rem_3688 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3689 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_3688 epsilon_m__type_10_p__def_57 X3).
Defined.

Remark rem_3690 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X3:term, auto_agent X3 -> auto___type_5 X3. (* Cut history. *)
Proof.  intros epsilon_m__type_10_p__def_57. exact (rem_835).
Defined.

Remark rem_3691 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_5 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3.
  cut (auto_agent X3 -> auto___type_5 X3). tauto. exact (rem_3690 epsilon_m__type_10_p__def_57 X3).
Defined.

Remark rem_3692 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___type_6 X1 /\ auto_knows_old X1 /\ auto___type_4 X2 /\ auto_agent X2 /\ auto_agent X3 /\ auto___type_5 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___type_6 X1). 2:apply (rem_3681 epsilon_m__type_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto_knows_old X1). 2:apply (rem_3683 epsilon_m__type_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto___type_4 X2). 2:apply (rem_3685 epsilon_m__type_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_3687 epsilon_m__type_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_3689 epsilon_m__type_10_p__def_57 X1 X2 X3);  assumption.
  cut (auto___type_5 X3). 2:apply (rem_3691 epsilon_m__type_10_p__def_57 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_3693 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_57 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_3692 epsilon_m__type_10_p__def_57 X1 X2 X3 A1 A2 A3). clear  epsilon_m__type_10_p__def_57 A1 A2 A3. intros. apply trans___def_57_nonces_old_1;  tauto.
 clear  epsilon_m__type_10_p__def_57 A1 A2 A3. tauto.
Defined.

Remark rem_3694 : forall X1 X2 X3:term, auto___type_10 (nonces_old X1 X2 X3) -> or_1
    (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3695 : (forall X:term, auto___type_10 X -> auto___def_57 X)
    -> forall X1 X2 X3:term, auto___type_10 (nonces_old X1 X2 X3) -> auto___def_57 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_10_p__def_57. intros X1 X2 X3. intro H. intros.
  elim (rem_3694 X1 X2 X3 H);  intros.
  apply (rem_3693 epsilon_m__type_10_p__def_57 X1 X2 X3);  tauto.
Defined.

Remark rem_3696 : forall X1:term, auto___type_10 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3697 : forall X1 X2:term, auto___type_10 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3698 : auto___type_10 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3699 : auto___type_10 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3700 : auto___type_10 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3701 : forall X1 X2:term, auto___type_10 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3702 : forall X1 X2 X3:term, auto___type_10 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3703 : forall X1 X2:term, auto___type_10 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3704 : forall X1:term, auto___type_10 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3705 : forall X1 X2 X3:term, auto___type_10 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3706 : forall X1 X2 X3:term, auto___type_10 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3707 : auto___type_10 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3708 : auto___type_10 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3709 : forall X1 X2:term, auto___type_10 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3710 : auto___type_10 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3711 : auto___type_10 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3712 : auto___type_10 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3713 : forall X1 X2:term, auto___type_10 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3714 : forall X1:term, auto___type_10 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3715 : forall X1 X2:term, auto___type_10 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3716 : auto___type_10 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3717 : auto___type_10 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3718 : forall X1 X2:term, auto___type_10 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3719 : auto___type_10 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3720 : forall X1 X2 X3:term, auto___type_10 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3721 : forall X2:term, auto___type_10 X2 -> auto___def_57 X2. (* Induct. *)
Proof.
  fix epsilon_m__type_10_p__def_57 1.
  intro X. case X.
   intro H. elim (rem_3719  H).
   intro H. elim (rem_3716  H).
  intros X1 X2. intro H. elim (rem_3718 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3713 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3720 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3709 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3703 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3715 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3701 X1 X2 H).
  intros X1. intro H. elim (rem_3704 X1 H).
   intro H. elim (rem_3699  H).
  intros X1 X2. intro H. elim (rem_3697 X1 X2 H).
  intros X1. intro H. elim (rem_3714 X1 H).
   intro H. elim (rem_3698  H).
  intros X1 X2 X3. intro H. elim (rem_3705 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_3695 epsilon_m__type_10_p__def_57 X1 X2 X3).
   intro H. elim (rem_3708  H).
   intro H. elim (rem_3712  H).
   intro H. elim (rem_3711  H).
   intro H. elim (rem_3707  H).
  intros X1. intro H. elim (rem_3696 X1 H).
   intro H. elim (rem_3717  H).
  intros X1 X2 X3. intro H. elim (rem_3706 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3702 X1 X2 X3 H).
   intro H. elim (rem_3710  H).
   intro H. elim (rem_3700  H).
Qed.

Remark rem_3722 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X2:term, auto___type_10 X2 -> auto___def_57 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_64_pknows_current. exact (rem_3721).
Defined.

Remark rem_3723 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_64_pknows_current. intros X1 X2.
  cut (auto___type_10 X2 -> auto___def_57 X2). tauto. exact (rem_3722 epsilon_m__def_64_pknows_current X2).
Defined.

Remark rem_3724 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_64_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_3679 epsilon_m__def_64_pknows_current X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_3723 epsilon_m__def_64_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3725 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto_knows_current (f3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_64_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_3724 epsilon_m__def_64_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_64_pknows_current A1 A2. intros. apply trans_knows_current_f3_1;  tauto.
 clear  epsilon_m__def_64_pknows_current A1 A2. tauto.
Defined.

Remark rem_3726 : forall X1 X2:term, auto___def_64 (f3 X1 X2) -> or_1
    (auto___def_65 X1 /\ auto___type_10 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3727 : (forall X:term, auto___def_64 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_64 (f3 X1 X2) -> auto_knows_current (f3 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_64_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_3726 X1 X2 H);  intros.
  apply (rem_3725 epsilon_m__def_64_pknows_current X1 X2);  tauto.
Defined.

Remark rem_3728 : forall X1:term, auto___def_64 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3729 : forall X1 X2:term, auto___def_64 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3730 : auto___def_64 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3731 : auto___def_64 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3732 : auto___def_64 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3733 : forall X1 X2:term, auto___def_64 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3734 : forall X1 X2 X3:term, auto___def_64 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3735 : forall X1:term, auto___def_64 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3736 : forall X1 X2 X3:term, auto___def_64 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3737 : forall X1 X2 X3:term, auto___def_64 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3738 : auto___def_64 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3739 : auto___def_64 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3740 : forall X1 X2:term, auto___def_64 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3741 : auto___def_64 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3742 : auto___def_64 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3743 : auto___def_64 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3744 : forall X1 X2:term, auto___def_64 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3745 : forall X1:term, auto___def_64 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3746 : forall X1 X2:term, auto___def_64 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3747 : auto___def_64 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3748 : auto___def_64 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3749 : forall X1 X2 X3:term, auto___def_64 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3750 : forall X1 X2:term, auto___def_64 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3751 : auto___def_64 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3752 : forall X1 X2 X3:term, auto___def_64 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3753 : forall X1:term, auto___def_64 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_64_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_3751  H).
   intro H. elim (rem_3747  H).
  intros X1 X2. intro H. elim (rem_3750 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3744 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3752 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3740 X1 X2 H).
  intros X1 X2;  exact (rem_3727 epsilon_m__def_64_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_3746 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3733 X1 X2 H).
  intros X1. intro H. elim (rem_3735 X1 H).
   intro H. elim (rem_3731  H).
  intros X1 X2. intro H. elim (rem_3729 X1 X2 H).
  intros X1. intro H. elim (rem_3745 X1 H).
   intro H. elim (rem_3730  H).
  intros X1 X2 X3. intro H. elim (rem_3736 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3749 X1 X2 X3 H).
   intro H. elim (rem_3739  H).
   intro H. elim (rem_3743  H).
   intro H. elim (rem_3742  H).
   intro H. elim (rem_3738  H).
  intros X1. intro H. elim (rem_3728 X1 H).
   intro H. elim (rem_3748  H).
  intros X1 X2 X3. intro H. elim (rem_3737 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3734 X1 X2 X3 H).
   intro H. elim (rem_3741  H).
   intro H. elim (rem_3732  H).
Qed.

Remark rem_3754 : forall X1 X2 X3:term, auto___def_63 X2 -> auto___def_64 X1 -> auto___type_9 X3 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___def_64 X1 -> auto_knows_current X1). tauto. exact (rem_3753 X1).
Qed.

Remark rem_3755 : forall X1 X2 X3:term, auto___type_9 X2 -> auto___def_63 X3 -> auto___def_64 X1 -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto___def_63 X2 -> auto___def_64 X1 -> auto___type_9 X3 -> auto_knows_current X1). tauto. exact (rem_3754 X1 X2 X3).
Qed.

Remark rem_3756 : forall X1 X2 X3:term, auto_peer_keys_old X1 X2 X3 -> or_1
    (auto___type_9 X1 /\ auto___def_63 X2 /\ auto___def_64 X3)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3757 : forall X1 X2 X3:term, auto_peer_keys_old X2 X3 X1 -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_3756 X2 X3 X1 H);  intros.
  apply (rem_3755 X1 X2 X3);  tauto.
Qed.

Remark rem_3758 : forall _big_cK _big_iK _big_p:term, auto_peer_keys_old _big_p _big_iK _big_cK -> auto_knows_current _big_cK. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto_peer_keys_old X2 X3 X1 -> auto_knows_current X1). tauto. exact (rem_3757 X1 X2 X3).
Qed.

Remark rem_3759 : auto_knows_current nil. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_knows_current_nil_1;  tauto.
 tauto.
Qed.

Remark rem_3760 : auto_agent bob. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_agent_bob_1;  tauto.
 tauto.
Qed.

Remark rem_3761 : auto_agent i. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_agent_i_1;  tauto.
 tauto.
Qed.

Remark rem_3762 : auto_agent alice. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_agent_alice_1;  tauto.
 tauto.
Qed.

Remark rem_3763 : auto_agent server. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_agent_server_1;  tauto.
 tauto.
Qed.

Remark rem_3764 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X1:term, auto___def_65 X1 -> auto___def_56 X1. (* Cut history. *)
Proof.  intros epsilon_m__def_63_pknows_current. exact (rem_3677).
Defined.

Remark rem_3765 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto___def_56 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_63_pknows_current. intros X1 X2.
  cut (auto___def_65 X1 -> auto___def_56 X1). tauto. exact (rem_3764 epsilon_m__def_63_pknows_current X1).
Defined.

Remark rem_3766 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X2:term, auto___type_10 X2 -> auto___def_57 X2. (* Cut history. *)
Proof.  intros epsilon_m__def_63_pknows_current. exact (rem_3721).
Defined.

Remark rem_3767 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto___def_57 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_m__def_63_pknows_current. intros X1 X2.
  cut (auto___type_10 X2 -> auto___def_57 X2). tauto. exact (rem_3766 epsilon_m__def_63_pknows_current X2).
Defined.

Remark rem_3768 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> (auto___def_56 X1 /\ auto___def_57 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__def_63_pknows_current. intros X1 X2. intros A1 A2.
  cut (auto___def_56 X1). 2:apply (rem_3765 epsilon_m__def_63_pknows_current X1 X2);  assumption.
  cut (auto___def_57 X2). 2:apply (rem_3767 epsilon_m__def_63_pknows_current X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3769 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_65 X1 -> auto___type_10 X2 -> auto_knows_current (f4 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_m__def_63_pknows_current. intros X1 X2. intros A1 A2.
  case (rem_3768 epsilon_m__def_63_pknows_current X1 X2 A1 A2). clear  epsilon_m__def_63_pknows_current A1 A2. intros. apply trans_knows_current_f4_1;  tauto.
 clear  epsilon_m__def_63_pknows_current A1 A2. tauto.
Defined.

Remark rem_3770 : forall X1 X2:term, auto___def_63 (f4 X1 X2) -> or_1
    (auto___def_65 X1 /\ auto___type_10 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3771 : (forall X:term, auto___def_63 X -> auto_knows_current X)
    -> forall X1 X2:term, auto___def_63 (f4 X1 X2) -> auto_knows_current (f4 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_63_pknows_current. intros X1 X2. intro H. intros.
  elim (rem_3770 X1 X2 H);  intros.
  apply (rem_3769 epsilon_m__def_63_pknows_current X1 X2);  tauto.
Defined.

Remark rem_3772 : forall X1:term, auto___def_63 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3773 : forall X1 X2:term, auto___def_63 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3774 : auto___def_63 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3775 : auto___def_63 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3776 : auto___def_63 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3777 : forall X1 X2:term, auto___def_63 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3778 : forall X1 X2 X3:term, auto___def_63 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3779 : forall X1 X2:term, auto___def_63 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3780 : forall X1:term, auto___def_63 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3781 : forall X1 X2 X3:term, auto___def_63 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3782 : forall X1 X2 X3:term, auto___def_63 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3783 : auto___def_63 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3784 : auto___def_63 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3785 : forall X1 X2:term, auto___def_63 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3786 : auto___def_63 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3787 : auto___def_63 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3788 : auto___def_63 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3789 : forall X1 X2:term, auto___def_63 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3790 : forall X1:term, auto___def_63 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3791 : auto___def_63 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3792 : auto___def_63 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3793 : forall X1 X2 X3:term, auto___def_63 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3794 : forall X1 X2:term, auto___def_63 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3795 : auto___def_63 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3796 : forall X1 X2 X3:term, auto___def_63 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3797 : forall X1:term, auto___def_63 X1 -> auto_knows_current X1. (* Induct. *)
Proof.
  fix epsilon_m__def_63_pknows_current 1.
  intro X. case X.
   intro H. elim (rem_3795  H).
   intro H. elim (rem_3791  H).
  intros X1 X2. intro H. elim (rem_3794 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3789 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3796 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3785 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3779 X1 X2 H).
  intros X1 X2;  exact (rem_3771 epsilon_m__def_63_pknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_3777 X1 X2 H).
  intros X1. intro H. elim (rem_3780 X1 H).
   intro H. elim (rem_3775  H).
  intros X1 X2. intro H. elim (rem_3773 X1 X2 H).
  intros X1. intro H. elim (rem_3790 X1 H).
   intro H. elim (rem_3774  H).
  intros X1 X2 X3. intro H. elim (rem_3781 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3793 X1 X2 X3 H).
   intro H. elim (rem_3784  H).
   intro H. elim (rem_3788  H).
   intro H. elim (rem_3787  H).
   intro H. elim (rem_3783  H).
  intros X1. intro H. elim (rem_3772 X1 H).
   intro H. elim (rem_3792  H).
  intros X1 X2 X3. intro H. elim (rem_3782 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3778 X1 X2 X3 H).
   intro H. elim (rem_3786  H).
   intro H. elim (rem_3776  H).
Qed.

Remark rem_3798 : forall X1 X2 X3:term, auto___def_63 X1 -> auto___def_64 X2 -> auto___type_9 X3 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___def_63 X1 -> auto_knows_current X1). tauto. exact (rem_3797 X1).
Qed.

Remark rem_3799 : forall X1 X2 X3:term, auto___type_9 X2 -> auto___def_63 X1 -> auto___def_64 X3 -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto___def_63 X1 -> auto___def_64 X2 -> auto___type_9 X3 -> auto_knows_current X1). tauto. exact (rem_3798 X1 X2 X3).
Qed.

Remark rem_3800 : forall X1 X2 X3:term, auto_peer_keys_old X2 X1 X3 -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_3756 X2 X1 X3 H);  intros.
  apply (rem_3799 X1 X2 X3);  tauto.
Qed.

Remark rem_3801 : forall _big_cK _big_iK _big_p:term, auto_peer_keys_old _big_p _big_iK _big_cK -> auto_knows_current _big_iK. (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X1 X2.
  cut (auto_peer_keys_old X2 X1 X3 -> auto_knows_current X1). tauto. exact (rem_3800 X1 X2 X3).
Qed.

Remark rem_3802 : forall X1 X2 X3:term, auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil)) -> auto_knows_current (cons respond_id (cons X3 nil)) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2.
  tauto.
Qed.

Remark rem_3803 : forall X1 X2 X3:term, auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil)) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current success. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2.
  case (rem_3802 X1 X2 X3 A1 A2). clear  A1 A2. intros. apply trans_knows_current_success_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3804 : forall _big_nAI _big_p _big_s:term, auto_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_current (cons respond_id (cons _big_nAI nil)) -> auto_knows_current success. (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X2 X1.
  cut (auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil)) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current success). tauto. exact (rem_3803 X1 X2 X3).
Qed.

Remark rem_3805 : forall X2:term, auto_knows_current X2 -> auto_knows_current X2. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_3806 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_current X2 -> auto_knows_current X2). tauto. exact (rem_3805 X2).
Qed.

Remark rem_3807 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_3296 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_3806 X1 X2);  assumption.
  tauto.
Qed.

Remark rem_3808 : forall X1 X2:term, auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros X1 X2. intros A1 A2.
  case (rem_3807 X1 X2 A1 A2). clear  A1 A2. intros. apply trans_knows_current_cons_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3809 : forall _big_m1 _big_m2:term, auto_knows_current _big_m1 -> auto_knows_current _big_m2 -> auto_knows_current (cons _big_m1 _big_m2). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current (cons X1 X2)). tauto. exact (rem_3808 X1 X2).
Qed.

Remark rem_3810 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current success -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3.
  tauto.
Qed.

Remark rem_3811 : forall X1 X2 X3 X4 X5:term, auto_knows_current (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current success -> auto_peer_keys_current X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3 X4 X5. intros A1 A2 A3.
  case (rem_3810 X1 X2 X3 X4 X5 A1 A2 A3). clear  A1 A2 A3. intros. apply trans_peer_keys_current_1;  tauto.
 clear  A1 A2 A3. tauto.
Qed.

Remark rem_3812 : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_current success -> auto_knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_peer_keys_current _big_p (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns). (* Prove equivalent, normalized clause. *)
Proof.
   intros X5 X3 X1 X2 X4.
  cut (auto_knows_current (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) (cons (h (cons (h (cons X5 (cons (f4 (key sym (cons X2 (cons X1 nil))) X3) (cons (f3 (key sym (cons X2 (cons X1 nil))) X3) nil)))) (cons X3 (cons (cons (crypt X4 (f5 (key sym (cons X2 (cons X1 nil))) X3)) (cons (f1 (key sym (cons X2 (cons X1 nil))) X4 X3) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current success -> auto_peer_keys_current X1 (f4 (key sym (cons X2 (cons X1 nil))) X3) (f3 (key sym (cons X2 (cons X1 nil))) X3)). tauto. exact (rem_3811 X1 X2 X3 X4 X5).
Qed.

Remark rem_3813 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1 A2.
  tauto.
Qed.

Remark rem_3814 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> auto_knows_old respond_id. (* Deduce positive atom. *)
Proof.
  intros X1. intros A1 A2.
  case (rem_3813 X1 A1 A2). clear  A1 A2. intros. apply trans_knows_old_respond_id_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3815 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> auto_agent X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1.
  cut (auto_agent X1 -> auto_agent X1). tauto. exact (rem_2556 X1).
Qed.

Remark rem_3816 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1 A2.
  cut (auto_agent X1). 2:apply (rem_3815 X1);  assumption.
  tauto.
Qed.

Remark rem_3817 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> auto_knows_old (nai X1). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1 A2.
  case (rem_3816 X1 A1 A2). clear  A1 A2. intros. apply trans_knows_old_nai_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3818 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> (auto_knows_old respond_id /\ auto_knows_old (nai X1)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1. intros A1 A2.
  cut (auto_knows_old respond_id). 2:apply (rem_3814 X1);  assumption.
  cut (auto_knows_old (nai X1)). 2:apply (rem_3817 X1);  assumption.
  tauto.
Qed.

Remark rem_3819 : forall X1:term, auto_agent X1 -> auto_knows_old request_id -> auto_knows_old (cons respond_id (nai X1)). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1 A2.
  case (rem_3818 X1 A1 A2). clear  A1 A2. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3820 : forall _big_p:term, auto_agent _big_p -> auto_knows_old request_id -> auto_knows_old (cons respond_id (nai _big_p)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_agent X1 -> auto_knows_old request_id -> auto_knows_old (cons respond_id (nai X1))). tauto. exact (rem_3819 X1).
Qed.

Remark rem_3821 : forall X1 X2 X3:term, auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil)) -> auto_knows_old (cons respond_id (cons X3 nil)) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2.
  tauto.
Qed.

Remark rem_3822 : forall X1 X2 X3:term, auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil)) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old success. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2.
  case (rem_3821 X1 X2 X3 A1 A2). clear  A1 A2. intros. apply trans_knows_old_success_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3823 : forall _big_nAI _big_p _big_s:term, auto_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_old (cons respond_id (cons _big_nAI nil)) -> auto_knows_old success. (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X2 X1.
  cut (auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil)) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old success). tauto. exact (rem_3822 X1 X2 X3).
Qed.

Remark rem_3824 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_14_p__type_17.  tauto.
Defined.

Remark rem_3825 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_17 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17.  case (rem_3824 epsilon_m__type_14_p__type_17). clear  epsilon_m__type_14_p__type_17. intros. apply trans___type_17_i_1;  tauto.
 clear  epsilon_m__type_14_p__type_17. tauto.
Defined.

Remark rem_3826 : auto___type_14 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3827 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_14 i -> auto___type_17 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17. intro H. intros.
  elim (rem_3826 H);  intros.
  apply (rem_3825 epsilon_m__type_14_p__type_17);  tauto.
Defined.

Remark rem_3828 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_17 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17.  case (rem_3824 epsilon_m__type_14_p__type_17). clear  epsilon_m__type_14_p__type_17. intros. apply trans___type_17_bob_1;  tauto.
 clear  epsilon_m__type_14_p__type_17. tauto.
Defined.

Remark rem_3829 : auto___type_14 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3830 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_14 bob -> auto___type_17 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17. intro H. intros.
  elim (rem_3829 H);  intros.
  apply (rem_3828 epsilon_m__type_14_p__type_17);  tauto.
Defined.

Remark rem_3831 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_17 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17.  case (rem_3824 epsilon_m__type_14_p__type_17). clear  epsilon_m__type_14_p__type_17. intros. apply trans___type_17_server_1;  tauto.
 clear  epsilon_m__type_14_p__type_17. tauto.
Defined.

Remark rem_3832 : auto___type_14 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3833 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_14 server -> auto___type_17 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17. intro H. intros.
  elim (rem_3832 H);  intros.
  apply (rem_3831 epsilon_m__type_14_p__type_17);  tauto.
Defined.

Remark rem_3834 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_17 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17.  case (rem_3824 epsilon_m__type_14_p__type_17). clear  epsilon_m__type_14_p__type_17. intros. apply trans___type_17_alice_1;  tauto.
 clear  epsilon_m__type_14_p__type_17. tauto.
Defined.

Remark rem_3835 : auto___type_14 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3836 : (forall X:term, auto___type_14 X -> auto___type_17 X)
    -> auto___type_14 alice -> auto___type_17 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_p__type_17. intro H. intros.
  elim (rem_3835 H);  intros.
  apply (rem_3834 epsilon_m__type_14_p__type_17);  tauto.
Defined.

Remark rem_3837 : forall X1:term, auto___type_14 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3838 : forall X1 X2:term, auto___type_14 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3839 : auto___type_14 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3840 : auto___type_14 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3841 : forall X1 X2:term, auto___type_14 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3842 : forall X1 X2 X3:term, auto___type_14 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3843 : forall X1 X2:term, auto___type_14 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3844 : forall X1:term, auto___type_14 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3845 : forall X1 X2 X3:term, auto___type_14 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3846 : forall X1 X2 X3:term, auto___type_14 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3847 : auto___type_14 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3848 : auto___type_14 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3849 : forall X1 X2:term, auto___type_14 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3850 : auto___type_14 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3851 : auto___type_14 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3852 : auto___type_14 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3853 : forall X1 X2:term, auto___type_14 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3854 : forall X1:term, auto___type_14 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3855 : forall X1 X2:term, auto___type_14 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3856 : forall X1 X2 X3:term, auto___type_14 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3857 : forall X1 X2:term, auto___type_14 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3858 : forall X1 X2 X3:term, auto___type_14 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3859 : forall X1:term, auto___type_14 X1 -> auto___type_17 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_14_p__type_17 1.
  intro X. case X.
  exact (rem_3836 epsilon_m__type_14_p__type_17 ).
  exact (rem_3830 epsilon_m__type_14_p__type_17 ).
  intros X1 X2. intro H. elim (rem_3857 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3853 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3858 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3843 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3841 X1 X2 H).
  intros X1. intro H. elim (rem_3844 X1 H).
  exact (rem_3827 epsilon_m__type_14_p__type_17 ).
  intros X1 X2. intro H. elim (rem_3838 X1 X2 H).
  intros X1. intro H. elim (rem_3854 X1 H).
   intro H. elim (rem_3839  H).
  intros X1 X2 X3. intro H. elim (rem_3845 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3856 X1 X2 X3 H).
   intro H. elim (rem_3848  H).
   intro H. elim (rem_3852  H).
   intro H. elim (rem_3851  H).
   intro H. elim (rem_3847  H).
  intros X1. intro H. elim (rem_3837 X1 H).
  exact (rem_3833 epsilon_m__type_14_p__type_17 ).
  intros X1 X2 X3. intro H. elim (rem_3846 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3842 X1 X2 X3 H).
   intro H. elim (rem_3850  H).
   intro H. elim (rem_3840  H).
Qed.

Remark rem_3860 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___type_17 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_14 X1 -> auto___type_17 X1). tauto. exact (rem_3859 X1).
Qed.

Remark rem_3861 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  tauto.
Qed.

Remark rem_3862 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_123 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3861 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_123_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3863 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_15_p__type_18.  tauto.
Defined.

Remark rem_3864 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_18 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18.  case (rem_3863 epsilon_m__type_15_p__type_18). clear  epsilon_m__type_15_p__type_18. intros. apply trans___type_18_i_1;  tauto.
 clear  epsilon_m__type_15_p__type_18. tauto.
Defined.

Remark rem_3865 : auto___type_15 i -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3866 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_15 i -> auto___type_18 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18. intro H. intros.
  elim (rem_3865 H);  intros.
  apply (rem_3864 epsilon_m__type_15_p__type_18);  tauto.
Defined.

Remark rem_3867 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_18 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18.  case (rem_3863 epsilon_m__type_15_p__type_18). clear  epsilon_m__type_15_p__type_18. intros. apply trans___type_18_bob_1;  tauto.
 clear  epsilon_m__type_15_p__type_18. tauto.
Defined.

Remark rem_3868 : auto___type_15 bob -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3869 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_15 bob -> auto___type_18 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18. intro H. intros.
  elim (rem_3868 H);  intros.
  apply (rem_3867 epsilon_m__type_15_p__type_18);  tauto.
Defined.

Remark rem_3870 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_18 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18.  case (rem_3863 epsilon_m__type_15_p__type_18). clear  epsilon_m__type_15_p__type_18. intros. apply trans___type_18_server_1;  tauto.
 clear  epsilon_m__type_15_p__type_18. tauto.
Defined.

Remark rem_3871 : auto___type_15 server -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3872 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_15 server -> auto___type_18 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18. intro H. intros.
  elim (rem_3871 H);  intros.
  apply (rem_3870 epsilon_m__type_15_p__type_18);  tauto.
Defined.

Remark rem_3873 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_18 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18.  case (rem_3863 epsilon_m__type_15_p__type_18). clear  epsilon_m__type_15_p__type_18. intros. apply trans___type_18_alice_1;  tauto.
 clear  epsilon_m__type_15_p__type_18. tauto.
Defined.

Remark rem_3874 : auto___type_15 alice -> or_1
    True.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3875 : (forall X:term, auto___type_15 X -> auto___type_18 X)
    -> auto___type_15 alice -> auto___type_18 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_p__type_18. intro H. intros.
  elim (rem_3874 H);  intros.
  apply (rem_3873 epsilon_m__type_15_p__type_18);  tauto.
Defined.

Remark rem_3876 : forall X1:term, auto___type_15 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3877 : forall X1 X2:term, auto___type_15 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3878 : auto___type_15 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3879 : auto___type_15 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3880 : forall X1 X2:term, auto___type_15 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3881 : forall X1 X2 X3:term, auto___type_15 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3882 : forall X1 X2:term, auto___type_15 (f3 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3883 : forall X1:term, auto___type_15 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3884 : forall X1 X2 X3:term, auto___type_15 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3885 : forall X1 X2 X3:term, auto___type_15 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3886 : auto___type_15 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3887 : auto___type_15 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3888 : forall X1 X2:term, auto___type_15 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3889 : auto___type_15 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3890 : auto___type_15 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3891 : auto___type_15 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3892 : forall X1 X2:term, auto___type_15 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3893 : forall X1:term, auto___type_15 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3894 : forall X1 X2:term, auto___type_15 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3895 : forall X1 X2 X3:term, auto___type_15 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3896 : forall X1 X2:term, auto___type_15 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3897 : forall X1 X2 X3:term, auto___type_15 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_3898 : forall X2:term, auto___type_15 X2 -> auto___type_18 X2. (* Induct. *)
Proof.
  fix epsilon_m__type_15_p__type_18 1.
  intro X. case X.
  exact (rem_3875 epsilon_m__type_15_p__type_18 ).
  exact (rem_3869 epsilon_m__type_15_p__type_18 ).
  intros X1 X2. intro H. elim (rem_3896 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3892 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3897 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3888 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3882 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3894 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3880 X1 X2 H).
  intros X1. intro H. elim (rem_3883 X1 H).
  exact (rem_3866 epsilon_m__type_15_p__type_18 ).
  intros X1 X2. intro H. elim (rem_3877 X1 X2 H).
  intros X1. intro H. elim (rem_3893 X1 H).
   intro H. elim (rem_3878  H).
  intros X1 X2 X3. intro H. elim (rem_3884 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3895 X1 X2 X3 H).
   intro H. elim (rem_3887  H).
   intro H. elim (rem_3891  H).
   intro H. elim (rem_3890  H).
   intro H. elim (rem_3886  H).
  intros X1. intro H. elim (rem_3876 X1 H).
  exact (rem_3872 epsilon_m__type_15_p__type_18 ).
  intros X1 X2 X3. intro H. elim (rem_3885 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3881 X1 X2 X3 H).
   intro H. elim (rem_3889  H).
   intro H. elim (rem_3879  H).
Qed.

Remark rem_3899 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___type_18 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_15 X2 -> auto___type_18 X2). tauto. exact (rem_3898 X2).
Qed.

Remark rem_3900 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_126 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3861 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_126_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3901 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> (auto___type_18 X2 /\ auto___def_126 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_18 X2). 2:apply (rem_3899 X1 X2 X3);  assumption.
  cut (auto___def_126 nil). 2:apply (rem_3900 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_3902 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_125 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3901 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_125_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3903 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> (auto___type_17 X1 /\ auto___def_125 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_17 X1). 2:apply (rem_3860 X1 X2 X3);  assumption.
  cut (auto___def_125 (cons X2 nil)). 2:apply (rem_3902 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_3904 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_124 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3903 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_124_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3905 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> (auto___def_123 sym /\ auto___def_124 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_123 sym). 2:apply (rem_3862 X1 X2 X3);  assumption.
  cut (auto___def_124 (cons X1 (cons X2 nil))). 2:apply (rem_3904 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_3906 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_121 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3905 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_121_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3907 : forall X3:term, auto_knows_current X3 -> auto_knows_current X3. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_3908 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current X3 -> auto_knows_current X3). tauto. exact (rem_3907 X3).
Qed.

Remark rem_3909 : forall X1:term, auto___type_14 X1 -> auto___type_14 X1. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_3910 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___type_14 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_14 X1 -> auto___type_14 X1). tauto. exact (rem_3909 X1).
Qed.

Remark rem_3911 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_14_pagent.  tauto.
Defined.

Remark rem_3912 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto_agent i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_pagent.  case (rem_3911 epsilon_m__type_14_pagent). clear  epsilon_m__type_14_pagent. intros. apply trans_agent_i_1;  tauto.
 clear  epsilon_m__type_14_pagent. tauto.
Defined.

Remark rem_3913 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto___type_14 i -> auto_agent i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_pagent. intro H. intros.
  elim (rem_3826 H);  intros.
  apply (rem_3912 epsilon_m__type_14_pagent);  tauto.
Defined.

Remark rem_3914 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto_agent bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_pagent.  case (rem_3911 epsilon_m__type_14_pagent). clear  epsilon_m__type_14_pagent. intros. apply trans_agent_bob_1;  tauto.
 clear  epsilon_m__type_14_pagent. tauto.
Defined.

Remark rem_3915 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto___type_14 bob -> auto_agent bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_pagent. intro H. intros.
  elim (rem_3829 H);  intros.
  apply (rem_3914 epsilon_m__type_14_pagent);  tauto.
Defined.

Remark rem_3916 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto_agent server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_pagent.  case (rem_3911 epsilon_m__type_14_pagent). clear  epsilon_m__type_14_pagent. intros. apply trans_agent_server_1;  tauto.
 clear  epsilon_m__type_14_pagent. tauto.
Defined.

Remark rem_3917 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto___type_14 server -> auto_agent server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_pagent. intro H. intros.
  elim (rem_3832 H);  intros.
  apply (rem_3916 epsilon_m__type_14_pagent);  tauto.
Defined.

Remark rem_3918 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto_agent alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_14_pagent.  case (rem_3911 epsilon_m__type_14_pagent). clear  epsilon_m__type_14_pagent. intros. apply trans_agent_alice_1;  tauto.
 clear  epsilon_m__type_14_pagent. tauto.
Defined.

Remark rem_3919 : (forall X:term, auto___type_14 X -> auto_agent X)
    -> auto___type_14 alice -> auto_agent alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_14_pagent. intro H. intros.
  elim (rem_3835 H);  intros.
  apply (rem_3918 epsilon_m__type_14_pagent);  tauto.
Defined.

Remark rem_3920 : forall X1:term, auto___type_14 X1 -> auto_agent X1. (* Induct. *)
Proof.
  fix epsilon_m__type_14_pagent 1.
  intro X. case X.
  exact (rem_3919 epsilon_m__type_14_pagent ).
  exact (rem_3915 epsilon_m__type_14_pagent ).
  intros X1 X2. intro H. elim (rem_3857 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3853 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3858 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3849 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3843 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3855 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3841 X1 X2 H).
  intros X1. intro H. elim (rem_3844 X1 H).
  exact (rem_3913 epsilon_m__type_14_pagent ).
  intros X1 X2. intro H. elim (rem_3838 X1 X2 H).
  intros X1. intro H. elim (rem_3854 X1 H).
   intro H. elim (rem_3839  H).
  intros X1 X2 X3. intro H. elim (rem_3845 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3856 X1 X2 X3 H).
   intro H. elim (rem_3848  H).
   intro H. elim (rem_3852  H).
   intro H. elim (rem_3851  H).
   intro H. elim (rem_3847  H).
  intros X1. intro H. elim (rem_3837 X1 H).
  exact (rem_3917 epsilon_m__type_14_pagent ).
  intros X1 X2 X3. intro H. elim (rem_3846 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3842 X1 X2 X3 H).
   intro H. elim (rem_3850  H).
   intro H. elim (rem_3840  H).
Qed.

Remark rem_3921 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_agent X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_14 X1 -> auto_agent X1). tauto. exact (rem_3920 X1).
Qed.

Remark rem_3922 : forall X2:term, auto___type_15 X2 -> auto___type_15 X2. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_3923 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___type_15 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_15 X2 -> auto___type_15 X2). tauto. exact (rem_3922 X2).
Qed.

Remark rem_3924 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_15_pagent.  tauto.
Defined.

Remark rem_3925 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto_agent i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_pagent.  case (rem_3924 epsilon_m__type_15_pagent). clear  epsilon_m__type_15_pagent. intros. apply trans_agent_i_1;  tauto.
 clear  epsilon_m__type_15_pagent. tauto.
Defined.

Remark rem_3926 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto___type_15 i -> auto_agent i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_pagent. intro H. intros.
  elim (rem_3865 H);  intros.
  apply (rem_3925 epsilon_m__type_15_pagent);  tauto.
Defined.

Remark rem_3927 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto_agent bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_pagent.  case (rem_3924 epsilon_m__type_15_pagent). clear  epsilon_m__type_15_pagent. intros. apply trans_agent_bob_1;  tauto.
 clear  epsilon_m__type_15_pagent. tauto.
Defined.

Remark rem_3928 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto___type_15 bob -> auto_agent bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_pagent. intro H. intros.
  elim (rem_3868 H);  intros.
  apply (rem_3927 epsilon_m__type_15_pagent);  tauto.
Defined.

Remark rem_3929 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto_agent server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_pagent.  case (rem_3924 epsilon_m__type_15_pagent). clear  epsilon_m__type_15_pagent. intros. apply trans_agent_server_1;  tauto.
 clear  epsilon_m__type_15_pagent. tauto.
Defined.

Remark rem_3930 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto___type_15 server -> auto_agent server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_pagent. intro H. intros.
  elim (rem_3871 H);  intros.
  apply (rem_3929 epsilon_m__type_15_pagent);  tauto.
Defined.

Remark rem_3931 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto_agent alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_15_pagent.  case (rem_3924 epsilon_m__type_15_pagent). clear  epsilon_m__type_15_pagent. intros. apply trans_agent_alice_1;  tauto.
 clear  epsilon_m__type_15_pagent. tauto.
Defined.

Remark rem_3932 : (forall X:term, auto___type_15 X -> auto_agent X)
    -> auto___type_15 alice -> auto_agent alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_15_pagent. intro H. intros.
  elim (rem_3874 H);  intros.
  apply (rem_3931 epsilon_m__type_15_pagent);  tauto.
Defined.

Remark rem_3933 : forall X2:term, auto___type_15 X2 -> auto_agent X2. (* Induct. *)
Proof.
  fix epsilon_m__type_15_pagent 1.
  intro X. case X.
  exact (rem_3932 epsilon_m__type_15_pagent ).
  exact (rem_3928 epsilon_m__type_15_pagent ).
  intros X1 X2. intro H. elim (rem_3896 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3892 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_3897 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_3888 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3882 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3894 X1 X2 H).
  intros X1 X2. intro H. elim (rem_3880 X1 X2 H).
  intros X1. intro H. elim (rem_3883 X1 H).
  exact (rem_3926 epsilon_m__type_15_pagent ).
  intros X1 X2. intro H. elim (rem_3877 X1 X2 H).
  intros X1. intro H. elim (rem_3893 X1 H).
   intro H. elim (rem_3878  H).
  intros X1 X2 X3. intro H. elim (rem_3884 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3895 X1 X2 X3 H).
   intro H. elim (rem_3887  H).
   intro H. elim (rem_3891  H).
   intro H. elim (rem_3890  H).
   intro H. elim (rem_3886  H).
  intros X1. intro H. elim (rem_3876 X1 H).
  exact (rem_3930 epsilon_m__type_15_pagent ).
  intros X1 X2 X3. intro H. elim (rem_3885 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_3881 X1 X2 X3 H).
   intro H. elim (rem_3889  H).
   intro H. elim (rem_3879  H).
Qed.

Remark rem_3934 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_15 X2 -> auto_agent X2). tauto. exact (rem_3933 X2).
Qed.

Remark rem_3935 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> (auto_knows_current X3 /\ auto___type_14 X1 /\ auto_agent X1 /\ auto___type_15 X2 /\ auto_agent X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto_knows_current X3). 2:apply (rem_3908 X1 X2 X3);  assumption.
  cut (auto___type_14 X1). 2:apply (rem_3910 X1 X2 X3);  assumption.
  cut (auto_agent X1). 2:apply (rem_3921 X1 X2 X3);  assumption.
  cut (auto___type_15 X2). 2:apply (rem_3923 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_3934 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_3936 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_122 (nonces_current X3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3935 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_122_nonces_current_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3937 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> (auto___def_121 (key sym (cons X1 (cons X2 nil))) /\ auto___def_122 (nonces_current X3 X1 X2)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_121 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_3906 X1 X2 X3);  assumption.
  cut (auto___def_122 (nonces_current X3 X1 X2)). 2:apply (rem_3936 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_3938 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_119 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3937 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_119_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3939 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto___def_120 (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3937 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_120_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3940 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> (auto___type_17 X1 /\ auto___def_119 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) /\ auto___def_120 (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_17 X1). 2:apply (rem_3860 X1 X2 X3);  assumption.
  cut (auto___def_119 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). 2:apply (rem_3938 X1 X2 X3);  assumption.
  cut (auto___def_120 (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). 2:apply (rem_3939 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_3941 : forall X1 X2 X3:term, auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_3940 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_server_keys_current_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_3942 : forall X1 X2 X3:term, auto___type_15 X2 -> auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto___def_107 nil -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto___type_15 X2 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3941 X1 X2 X3).
Qed.

Remark rem_3943 : forall X1 X2:term, auto___def_106 (cons X1 X2) -> or_1
    (auto___type_15 X1 /\ auto___def_107 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3944 : forall X1 X2 X3:term, auto___def_106 (cons X2 nil) -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_3943 X2 nil H);  intros.
  apply (rem_3942 X1 X2 X3);  tauto.
Qed.

Remark rem_3945 : forall X1 X2 X3:term, auto___type_14 X1 -> auto___def_106 (cons X2 nil) -> auto___type_13 (nonces_current X3 X1 X2) -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto___def_106 (cons X2 nil) -> auto___type_13 (nonces_current X3 X1 X2) -> auto___type_14 X1 -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3944 X1 X2 X3).
Qed.

Remark rem_3946 : forall X1 X2:term, auto___def_105 (cons X1 X2) -> or_1
    (auto___type_14 X1 /\ auto___def_106 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3947 : forall X1 X2 X3:term, auto___def_105 (cons X1 (cons X2 nil)) -> auto___type_13 (nonces_current X3 X1 X2) -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_3946 X1 (cons X2 nil) H);  intros.
  apply (rem_3945 X1 X2 X3);  tauto.
Qed.

Remark rem_3948 : forall X1 X2 X3:term, auto___def_104 sym -> auto___def_105 (cons X1 (cons X2 nil)) -> auto___type_13 (nonces_current X3 X1 X2) -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto___def_105 (cons X1 (cons X2 nil)) -> auto___type_13 (nonces_current X3 X1 X2) -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto.
  exact (rem_3947 X1 X2 X3).
Qed.

Remark rem_3949 : forall X1 X2:term, auto___def_103 (key X1 X2) -> or_1
    (auto___def_104 X1 /\ auto___def_105 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_3950 : forall X1 X2 X3:term, auto___def_103 (key sym (cons X1 (cons X2 nil))) -> auto___type_13 (nonces_current X3 X1 X2) -> auto_knows_current X3 -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_3949 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_3948 X1 X2 X3);  tauto.
Qed.

Remark rem_3951 : forall X1 X2 X3:term, auto_knows_current X3 -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1. intro H. intros.
  elim (rem_2298 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2) H);  intros.
  apply (rem_3950 X1 X2 X3);  tauto.
Qed.

Remark rem_3952 : forall X1 X2 X3:term, auto_knows_current X3 -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current nil -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current X3 -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto.
  exact (rem_3951 X1 X2 X3).
Qed.

Remark rem_3953 : forall X1 X2 X3:term, auto_knows_current X3 -> auto_knows_current nil -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_current X3 -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current nil -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3952 X1 X2 X3).
Qed.

Remark rem_3954 : forall X1 X2 X3:term, auto_knows_current (cons X3 nil) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_2341 X3 nil H);  intros.
  apply (rem_3953 X1 X2 X3);  tauto.
Qed.

Remark rem_3955 : forall X1 X2 X3:term, auto_knows_current (cons X3 nil) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current respond_id -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current (cons X3 nil) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto.
  exact (rem_3954 X1 X2 X3).
Qed.

Remark rem_3956 : forall X1 X2 X3:term, auto_knows_current respond_id -> auto_knows_current (cons X3 nil) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_current (cons X3 nil) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current respond_id -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3955 X1 X2 X3).
Qed.

Remark rem_3957 : forall X1 X2 X3:term, auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_2341 respond_id (cons X3 nil) H);  intros.
  apply (rem_3956 X1 X2 X3);  tauto.
Qed.

Remark rem_3958 : forall X1 X2 X3:term, auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current nil -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto.
  exact (rem_3957 X1 X2 X3).
Qed.

Remark rem_3959 : forall X1 X2 X3:term, auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current nil -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) -> auto_knows_current nil -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3958 X1 X2 X3).
Qed.

Remark rem_3960 : forall X1 X2 X3:term, auto_knows_current (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_2341 (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil H);  intros.
  apply (rem_3959 X1 X2 X3);  tauto.
Qed.

Remark rem_3961 : forall X1 X2 X3:term, auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_knows_current (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_current (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_knows_current (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3960 X1 X2 X3).
Qed.

Remark rem_3962 : forall X1 X2 X3:term, auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil)) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_2341 (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil) H);  intros.
  apply (rem_3961 X1 X2 X3);  tauto.
Qed.

Remark rem_3963 : forall _big_nAI _big_p _big_s:term, auto_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_current (cons respond_id (cons _big_nAI nil)) -> auto_server_keys_current _big_s (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X2 X1.
  cut (auto_knows_current (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) nil))) nil)) -> auto_knows_current (cons respond_id (cons X3 nil)) -> auto_server_keys_current X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_current X3 X1 X2))). tauto. exact (rem_3962 X1 X2 X3).
Qed.

Remark rem_3964 : forall X1 X2:term, auto_knows_current X2 -> auto_knows_current X1 -> auto_knows_current X1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X2 -> auto_knows_current X1). tauto. exact (rem_3296 X1 X2).
Qed.

Remark rem_3965 : forall X1 X2:term, auto_knows_current (cons X2 X1) -> auto_knows_current X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_2341 X2 X1 H);  intros.
  apply (rem_3964 X1 X2);  tauto.
Qed.

Remark rem_3966 : forall _big_m1 _big_m2:term, auto_knows_current (cons _big_m1 _big_m2) -> auto_knows_current _big_m2. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_current (cons X2 X1) -> auto_knows_current X1). tauto. exact (rem_3965 X1 X2).
Qed.

Remark rem_3967 : forall X1 X2:term, auto_knows_current X2 -> auto_knows_current X1 -> auto_knows_current X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_current X1 -> auto_knows_current X1). tauto. exact (rem_9 X1).
Qed.

Remark rem_3968 : forall X1 X2:term, auto_knows_current X2 -> auto_knows_current X1 -> auto_knows_current X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_current X2 -> auto_knows_current X2). tauto. exact (rem_3805 X2).
Qed.

Remark rem_3969 : forall X1 X2:term, auto_knows_current X2 -> auto_knows_current X1 -> (auto_knows_current X1 /\ auto_knows_current X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2. intros A1 A2.
  cut (auto_knows_current X1). 2:apply (rem_3967 X1 X2);  assumption.
  cut (auto_knows_current X2). 2:apply (rem_3968 X1 X2);  assumption.
  tauto.
Qed.

Remark rem_3970 : forall X1 X2:term, auto_knows_current X2 -> auto_knows_current X1 -> auto_knows_current (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros X1 X2. intros A1 A2.
  case (rem_3969 X1 X2 A1 A2). clear  A1 A2. intros. apply trans_knows_current_crypt_2;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_3971 : forall _big_k _big_m:term, auto_knows_current _big_m -> auto_knows_current _big_k -> auto_knows_current (crypt _big_m _big_k). (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X1.
  cut (auto_knows_current X2 -> auto_knows_current X1 -> auto_knows_current (crypt X1 X2)). tauto. exact (rem_3970 X1 X2).
Qed.

Remark rem_3972 : auto_knows_old request_id. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_knows_old_request_id_1;  tauto.
 tauto.
Qed.

Remark rem_3973 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3974 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_3973 epsilon_mknows_old_p__def_9 X1);  assumption.
  tauto.
Defined.

Remark rem_3975 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old X1 -> auto___def_9 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  case (rem_3974 epsilon_mknows_old_p__def_9 X1 A1). clear  epsilon_mknows_old_p__def_9 A1. intros. apply trans___def_9_s_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1. tauto.
Defined.

Remark rem_3976 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old (s X1) -> auto___def_9 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intro H. intros.
  elim (rem_33 X1 H);  intros.
  apply (rem_3975 epsilon_mknows_old_p__def_9 X1);  tauto.
Defined.

Remark rem_3977 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9.  tauto.
Defined.

Remark rem_3978 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto___def_9 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9.  case (rem_3977 epsilon_mknows_old_p__def_9). clear  epsilon_mknows_old_p__def_9. intros. apply trans___def_9_nil_1;  tauto.
 clear  epsilon_mknows_old_p__def_9. tauto.
Defined.

Remark rem_3979 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto_knows_old nil -> auto___def_9 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intro H. intros.
  elim (rem_37 H);  intros.
  apply (rem_3978 epsilon_mknows_old_p__def_9);  tauto.
Defined.

Remark rem_3980 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3981 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  cut (auto___def_44 X1). 2:apply (rem_3980 epsilon_mknows_old_p__def_9 X1);  assumption.
  tauto.
Defined.

Remark rem_3982 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_9 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  case (rem_3981 epsilon_mknows_old_p__def_9 X1 A1). clear  epsilon_mknows_old_p__def_9 A1. intros. apply trans___def_9_h_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1. tauto.
Defined.

Remark rem_3983 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3984 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  cut (auto___def_26 X1). 2:apply (rem_3983 epsilon_mknows_old_p__def_9 X1);  assumption.
  tauto.
Defined.

Remark rem_3985 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_9 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  case (rem_3984 epsilon_mknows_old_p__def_9 X1 A1). clear  epsilon_mknows_old_p__def_9 A1. intros. apply trans___def_9_h_2;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1. tauto.
Defined.

Remark rem_3986 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old X1 -> auto___def_9 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  case (rem_3974 epsilon_mknows_old_p__def_9 X1 A1). clear  epsilon_mknows_old_p__def_9 A1. intros. apply trans___def_9_h_3;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1. tauto.
Defined.

Remark rem_3987 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old (h X1) -> auto___def_9 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intro H. intros.
  elim (rem_1815 X1 H);  intros.
  apply (rem_3982 epsilon_mknows_old_p__def_9 X1);  tauto.
  apply (rem_3985 epsilon_mknows_old_p__def_9 X1);  tauto.
  apply (rem_3986 epsilon_mknows_old_p__def_9 X1);  tauto.
Defined.

Remark rem_3988 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto___def_9 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9.  case (rem_3977 epsilon_mknows_old_p__def_9). clear  epsilon_mknows_old_p__def_9. intros. apply trans___def_9_respond_id_1;  tauto.
 clear  epsilon_mknows_old_p__def_9. tauto.
Defined.

Remark rem_3989 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto_knows_old respond_id -> auto___def_9 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intro H. intros.
  elim (rem_1818 H);  intros.
  apply (rem_3988 epsilon_mknows_old_p__def_9);  tauto.
Defined.

Remark rem_3990 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_38 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3991 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_38 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_38 X1). tauto. exact (rem_3990 epsilon_mknows_old_p__def_9 X1).
Defined.

Remark rem_3992 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_3 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_3993 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_3 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_3 X2). tauto. exact (rem_3992 epsilon_mknows_old_p__def_9 X2).
Defined.

Remark rem_3994 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_38 X1 /\ auto___type_3 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  cut (auto___def_38 X1). 2:apply (rem_3991 epsilon_mknows_old_p__def_9 X1 X2);  assumption.
  cut (auto___type_3 X2). 2:apply (rem_3993 epsilon_mknows_old_p__def_9 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_3995 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_9 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  case (rem_3994 epsilon_mknows_old_p__def_9 X1 X2 A1 A2). clear  epsilon_mknows_old_p__def_9 A1 A2. intros. apply trans___def_9_f2_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1 A2. tauto.
Defined.

Remark rem_3996 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old (f2 X1 X2) -> auto___def_9 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intro H. intros.
  elim (rem_1826 X1 X2 H);  intros.
  apply (rem_3995 epsilon_mknows_old_p__def_9 X1 X2);  tauto.
Defined.

Remark rem_3997 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto___def_9 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9.  case (rem_3977 epsilon_mknows_old_p__def_9). clear  epsilon_mknows_old_p__def_9. intros. apply trans___def_9_success_1;  tauto.
 clear  epsilon_mknows_old_p__def_9. tauto.
Defined.

Remark rem_3998 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto_knows_old success -> auto___def_9 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intro H. intros.
  elim (rem_1829 H);  intros.
  apply (rem_3997 epsilon_mknows_old_p__def_9);  tauto.
Defined.

Remark rem_3999 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto___def_9 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9.  case (rem_3977 epsilon_mknows_old_p__def_9). clear  epsilon_mknows_old_p__def_9. intros. apply trans___def_9_request_id_1;  tauto.
 clear  epsilon_mknows_old_p__def_9. tauto.
Defined.

Remark rem_4000 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> auto_knows_old request_id -> auto___def_9 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intro H. intros.
  elim (rem_1832 H);  intros.
  apply (rem_3999 epsilon_mknows_old_p__def_9);  tauto.
Defined.

Remark rem_4001 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4002 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_4001 epsilon_mknows_old_p__def_9 X1).
Defined.

Remark rem_4003 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4004 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_4003 epsilon_mknows_old_p__def_9 X2).
Defined.

Remark rem_4005 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_4002 epsilon_mknows_old_p__def_9 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_4004 epsilon_mknows_old_p__def_9 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_4006 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_9 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  case (rem_4005 epsilon_mknows_old_p__def_9 X1 X2 A1 A2). clear  epsilon_mknows_old_p__def_9 A1 A2. intros. apply trans___def_9_crypt_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1 A2. tauto.
Defined.

Remark rem_4007 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_3973 epsilon_mknows_old_p__def_9 X1).
Defined.

Remark rem_4008 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4009 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_4008 epsilon_mknows_old_p__def_9 X2).
Defined.

Remark rem_4010 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_4007 epsilon_mknows_old_p__def_9 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_4009 epsilon_mknows_old_p__def_9 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_4011 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___def_9 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  case (rem_4010 epsilon_mknows_old_p__def_9 X1 X2 A1 A2). clear  epsilon_mknows_old_p__def_9 A1 A2. intros. apply trans___def_9_crypt_2;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1 A2. tauto.
Defined.

Remark rem_4012 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old (crypt X1 X2) -> auto___def_9 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intro H. intros.
  elim (rem_6 X1 X2 H);  intros.
  apply (rem_4006 epsilon_mknows_old_p__def_9 X1 X2);  tauto.
  apply (rem_4011 epsilon_mknows_old_p__def_9 X1 X2);  tauto.
Defined.

Remark rem_4013 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4014 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_4013 epsilon_mknows_old_p__def_9 X1);  assumption.
  tauto.
Defined.

Remark rem_4015 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_agent X1 -> auto___def_9 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intros A1.
  case (rem_4014 epsilon_mknows_old_p__def_9 X1 A1). clear  epsilon_mknows_old_p__def_9 A1. intros. apply trans___def_9_nai_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1. tauto.
Defined.

Remark rem_4016 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto_knows_old (nai X1) -> auto___def_9 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1. intro H. intros.
  elim (rem_1849 X1 H);  intros.
  apply (rem_4015 epsilon_mknows_old_p__def_9 X1);  tauto.
Defined.

Remark rem_4017 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4018 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_4017 epsilon_mknows_old_p__def_9 X1).
Defined.

Remark rem_4019 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4020 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_4019 epsilon_mknows_old_p__def_9 X2).
Defined.

Remark rem_4021 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4022 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_4021 epsilon_mknows_old_p__def_9 X3).
Defined.

Remark rem_4023 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_4018 epsilon_mknows_old_p__def_9 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_4020 epsilon_mknows_old_p__def_9 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_4022 epsilon_mknows_old_p__def_9 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_4024 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_4023 epsilon_mknows_old_p__def_9 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_p__def_9 A1 A2 A3. intros. apply trans___def_9_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1 A2 A3. tauto.
Defined.

Remark rem_4025 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto_knows_old (nonces_old X1 X2 X3) -> auto___def_9 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3. intro H. intros.
  elim (rem_1859 X1 X2 X3 H);  intros.
  apply (rem_4024 epsilon_mknows_old_p__def_9 X1 X2 X3);  tauto.
Defined.

Remark rem_4026 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___def_9 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intros A1 A2.
  case (rem_4010 epsilon_mknows_old_p__def_9 X1 X2 A1 A2). clear  epsilon_mknows_old_p__def_9 A1 A2. intros. apply trans___def_9_cons_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1 A2. tauto.
Defined.

Remark rem_4027 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2:term, auto_knows_old (cons X1 X2) -> auto___def_9 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2. intro H. intros.
  elim (rem_1862 X1 X2 H);  intros.
  apply (rem_4026 epsilon_mknows_old_p__def_9 X1 X2);  tauto.
Defined.

Remark rem_4028 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4029 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_4028 epsilon_mknows_old_p__def_9 X1).
Defined.

Remark rem_4030 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4031 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_4030 epsilon_mknows_old_p__def_9 X2).
Defined.

Remark rem_4032 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4033 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_4032 epsilon_mknows_old_p__def_9 X3).
Defined.

Remark rem_4034 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_4029 epsilon_mknows_old_p__def_9 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_4031 epsilon_mknows_old_p__def_9 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_4033 epsilon_mknows_old_p__def_9 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_4035 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_9 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_4034 epsilon_mknows_old_p__def_9 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_p__def_9 A1 A2 A3. intros. apply trans___def_9_f1_1;  tauto.
 clear  epsilon_mknows_old_p__def_9 A1 A2 A3. tauto.
Defined.

Remark rem_4036 : (forall X:term, auto_knows_old X -> auto___def_9 X)
    -> forall X1 X2 X3:term, auto_knows_old (f1 X1 X2 X3) -> auto___def_9 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__def_9. intros X1 X2 X3. intro H. intros.
  elim (rem_1872 X1 X2 X3 H);  intros.
  apply (rem_4035 epsilon_mknows_old_p__def_9 X1 X2 X3);  tauto.
Defined.

Remark rem_4037 : forall X1:term, auto_knows_old X1 -> auto___def_9 X1. (* Induct. *)
Proof.
  fix epsilon_mknows_old_p__def_9 1.
  intro X. case X.
   intro H. elim (rem_1887  H).
   intro H. elim (rem_1885  H).
  intros X1 X2;  exact (rem_4027 epsilon_mknows_old_p__def_9 X1 X2).
  intros X1 X2;  exact (rem_4012 epsilon_mknows_old_p__def_9 X1 X2).
  intros X1 X2 X3;  exact (rem_4036 epsilon_mknows_old_p__def_9 X1 X2 X3).
  intros X1 X2;  exact (rem_3996 epsilon_mknows_old_p__def_9 X1 X2).
  intros X1 X2. intro H. elim (rem_1879 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1884 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1877 X1 X2 H).
  intros X1;  exact (rem_3987 epsilon_mknows_old_p__def_9 X1).
   intro H. elim (rem_1875  H).
  intros X1 X2. intro H. elim (rem_1874 X1 X2 H).
  intros X1;  exact (rem_4016 epsilon_mknows_old_p__def_9 X1).
  exact (rem_3979 epsilon_mknows_old_p__def_9 ).
  intros X1 X2 X3. intro H. elim (rem_1880 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_4025 epsilon_mknows_old_p__def_9 X1 X2 X3).
   intro H. elim (rem_1882  H).
   intro H. elim (rem_1883  H).
  exact (rem_4000 epsilon_mknows_old_p__def_9 ).
  exact (rem_3989 epsilon_mknows_old_p__def_9 ).
  intros X1;  exact (rem_3976 epsilon_mknows_old_p__def_9 X1).
   intro H. elim (rem_1886  H).
  intros X1 X2 X3. intro H. elim (rem_1881 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1878 X1 X2 X3 H).
  exact (rem_3998 epsilon_mknows_old_p__def_9 ).
   intro H. elim (rem_1876  H).
Qed.

Remark rem_4038 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old X1 -> auto___def_9 X1). tauto. exact (rem_4037 X1).
Qed.

Remark rem_4039 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_2374 X2).
Qed.

Remark rem_4040 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_2376 X3).
Qed.

Remark rem_4041 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_9 X1). 2:apply (rem_4038 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_4039 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_4040 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4042 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4041 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_nonces_old_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4043 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_16 (session_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4041 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_16_session_old_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4044 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  tauto.
Qed.

Remark rem_4045 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_19 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4044 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_19_sym_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4046 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___type_1 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X2 -> auto___type_1 X2). tauto. exact (rem_2392 X2).
Qed.

Remark rem_4047 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_22 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4044 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_22_nil_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4048 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto_agent X3 /\ auto___def_22 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_agent X3). 2:apply (rem_4040 X1 X2 X3);  assumption.
  cut (auto___def_22 nil). 2:apply (rem_4047 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4049 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_21 (cons X3 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4048 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_21_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4050 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___type_1 X2 /\ auto___def_21 (cons X3 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___type_1 X2). 2:apply (rem_4046 X1 X2 X3);  assumption.
  cut (auto___def_21 (cons X3 nil)). 2:apply (rem_4049 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4051 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_20 (cons X2 (cons X3 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4050 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_20_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4052 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_19 sym /\ auto___def_20 (cons X2 (cons X3 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_19 sym). 2:apply (rem_4045 X1 X2 X3);  assumption.
  cut (auto___def_20 (cons X2 (cons X3 nil))). 2:apply (rem_4051 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4053 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_18 (key sym (cons X2 (cons X3 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4052 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_18_key_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4054 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_10 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4041 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_10_nonces_old_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4055 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_18 (key sym (cons X2 (cons X3 nil))) /\ auto___def_10 (nonces_old X1 X2 X3)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_18 (key sym (cons X2 (cons X3 nil)))). 2:apply (rem_4053 X1 X2 X3);  assumption.
  cut (auto___def_10 (nonces_old X1 X2 X3)). 2:apply (rem_4054 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4056 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_17 (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4055 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_17_f5_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4057 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_16 (session_old X1 X2 X3) /\ auto___def_17 (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_16 (session_old X1 X2 X3)). 2:apply (rem_4043 X1 X2 X3);  assumption.
  cut (auto___def_17 (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))). 2:apply (rem_4056 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4058 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4057 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_crypt_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4059 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_18 (key sym (cons X2 (cons X3 nil))) /\ auto___def_16 (session_old X1 X2 X3) /\ auto___def_10 (nonces_old X1 X2 X3)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_18 (key sym (cons X2 (cons X3 nil)))). 2:apply (rem_4053 X1 X2 X3);  assumption.
  cut (auto___def_16 (session_old X1 X2 X3)). 2:apply (rem_4043 X1 X2 X3);  assumption.
  cut (auto___def_10 (nonces_old X1 X2 X3)). 2:apply (rem_4054 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4060 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4059 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_f1_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4061 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4044 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_nil_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4062 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto_knows_old (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) /\ auto_knows_old nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_old (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3))). 2:apply (rem_4060 X1 X2 X3);  assumption.
  cut (auto_knows_old nil). 2:apply (rem_4061 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4063 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4062 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4064 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto_knows_old (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) /\ auto_knows_old (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_old (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)))). 2:apply (rem_4058 X1 X2 X3);  assumption.
  cut (auto_knows_old (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)). 2:apply (rem_4063 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4065 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4064 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4066 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4067 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old X1 -> auto_knows_old X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  cut (auto_knows_old X1). 2:apply (rem_4066 epsilon_mknows_old_p__type_2 X1);  assumption.
  tauto.
Defined.

Remark rem_4068 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_2 (s X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  case (rem_4067 epsilon_mknows_old_p__type_2 X1 A1). clear  epsilon_mknows_old_p__type_2 A1. intros. apply trans___type_2_s_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1. tauto.
Defined.

Remark rem_4069 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old (s X1) -> auto___type_2 (s X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intro H. intros.
  elim (rem_33 X1 H);  intros.
  apply (rem_4068 epsilon_mknows_old_p__type_2 X1);  tauto.
Defined.

Remark rem_4070 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2.  tauto.
Defined.

Remark rem_4071 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto___type_2 nil. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2.  case (rem_4070 epsilon_mknows_old_p__type_2). clear  epsilon_mknows_old_p__type_2. intros. apply trans___type_2_nil_1;  tauto.
 clear  epsilon_mknows_old_p__type_2. tauto.
Defined.

Remark rem_4072 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto_knows_old nil -> auto___type_2 nil. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intro H. intros.
  elim (rem_37 H);  intros.
  apply (rem_4071 epsilon_mknows_old_p__type_2);  tauto.
Defined.

Remark rem_4073 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4074 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_44 X1 -> auto___def_44 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  cut (auto___def_44 X1). 2:apply (rem_4073 epsilon_mknows_old_p__type_2 X1);  assumption.
  tauto.
Defined.

Remark rem_4075 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_44 X1 -> auto___type_2 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  case (rem_4074 epsilon_mknows_old_p__type_2 X1 A1). clear  epsilon_mknows_old_p__type_2 A1. intros. apply trans___type_2_h_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1. tauto.
Defined.

Remark rem_4076 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4077 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_26 X1 -> auto___def_26 X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  cut (auto___def_26 X1). 2:apply (rem_4076 epsilon_mknows_old_p__type_2 X1);  assumption.
  tauto.
Defined.

Remark rem_4078 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_26 X1 -> auto___type_2 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  case (rem_4077 epsilon_mknows_old_p__type_2 X1 A1). clear  epsilon_mknows_old_p__type_2 A1. intros. apply trans___type_2_h_2;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1. tauto.
Defined.

Remark rem_4079 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old X1 -> auto___type_2 (h X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  case (rem_4067 epsilon_mknows_old_p__type_2 X1 A1). clear  epsilon_mknows_old_p__type_2 A1. intros. apply trans___type_2_h_3;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1. tauto.
Defined.

Remark rem_4080 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old (h X1) -> auto___type_2 (h X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intro H. intros.
  elim (rem_1815 X1 H);  intros.
  apply (rem_4075 epsilon_mknows_old_p__type_2 X1);  tauto.
  apply (rem_4078 epsilon_mknows_old_p__type_2 X1);  tauto.
  apply (rem_4079 epsilon_mknows_old_p__type_2 X1);  tauto.
Defined.

Remark rem_4081 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto___type_2 respond_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2.  case (rem_4070 epsilon_mknows_old_p__type_2). clear  epsilon_mknows_old_p__type_2. intros. apply trans___type_2_respond_id_1;  tauto.
 clear  epsilon_mknows_old_p__type_2. tauto.
Defined.

Remark rem_4082 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto_knows_old respond_id -> auto___type_2 respond_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intro H. intros.
  elim (rem_1818 H);  intros.
  apply (rem_4081 epsilon_mknows_old_p__type_2);  tauto.
Defined.

Remark rem_4083 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_38 X1 -> auto___def_38 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4084 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___def_38 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2.
  cut (auto___def_38 X1 -> auto___def_38 X1). tauto. exact (rem_4083 epsilon_mknows_old_p__type_2 X1).
Defined.

Remark rem_4085 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X2:term, auto___type_3 X2 -> auto___type_3 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4086 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_3 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2.
  cut (auto___type_3 X2 -> auto___type_3 X2). tauto. exact (rem_4085 epsilon_mknows_old_p__type_2 X2).
Defined.

Remark rem_4087 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> (auto___def_38 X1 /\ auto___type_3 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  cut (auto___def_38 X1). 2:apply (rem_4084 epsilon_mknows_old_p__type_2 X1 X2);  assumption.
  cut (auto___type_3 X2). 2:apply (rem_4086 epsilon_mknows_old_p__type_2 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_4088 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_38 X1 -> auto___type_3 X2 -> auto___type_2 (f2 X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  case (rem_4087 epsilon_mknows_old_p__type_2 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_2 A1 A2. intros. apply trans___type_2_f2_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1 A2. tauto.
Defined.

Remark rem_4089 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old (f2 X1 X2) -> auto___type_2 (f2 X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intro H. intros.
  elim (rem_1826 X1 X2 H);  intros.
  apply (rem_4088 epsilon_mknows_old_p__type_2 X1 X2);  tauto.
Defined.

Remark rem_4090 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto___type_2 success. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2.  case (rem_4070 epsilon_mknows_old_p__type_2). clear  epsilon_mknows_old_p__type_2. intros. apply trans___type_2_success_1;  tauto.
 clear  epsilon_mknows_old_p__type_2. tauto.
Defined.

Remark rem_4091 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto_knows_old success -> auto___type_2 success. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intro H. intros.
  elim (rem_1829 H);  intros.
  apply (rem_4090 epsilon_mknows_old_p__type_2);  tauto.
Defined.

Remark rem_4092 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto___type_2 request_id. (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2.  case (rem_4070 epsilon_mknows_old_p__type_2). clear  epsilon_mknows_old_p__type_2. intros. apply trans___type_2_request_id_1;  tauto.
 clear  epsilon_mknows_old_p__type_2. tauto.
Defined.

Remark rem_4093 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> auto_knows_old request_id -> auto___type_2 request_id. (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intro H. intros.
  elim (rem_1832 H);  intros.
  apply (rem_4092 epsilon_mknows_old_p__type_2);  tauto.
Defined.

Remark rem_4094 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_16 X1 -> auto___def_16 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4095 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_16 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2.
  cut (auto___def_16 X1 -> auto___def_16 X1). tauto. exact (rem_4094 epsilon_mknows_old_p__type_2 X1).
Defined.

Remark rem_4096 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X2:term, auto___def_17 X2 -> auto___def_17 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4097 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___def_17 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2.
  cut (auto___def_17 X2 -> auto___def_17 X2). tauto. exact (rem_4096 epsilon_mknows_old_p__type_2 X2).
Defined.

Remark rem_4098 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> (auto___def_16 X1 /\ auto___def_17 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  cut (auto___def_16 X1). 2:apply (rem_4095 epsilon_mknows_old_p__type_2 X1 X2);  assumption.
  cut (auto___def_17 X2). 2:apply (rem_4097 epsilon_mknows_old_p__type_2 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_4099 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto___def_16 X1 -> auto___def_17 X2 -> auto___type_2 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  case (rem_4098 epsilon_mknows_old_p__type_2 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_2 A1 A2. intros. apply trans___type_2_crypt_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1 A2. tauto.
Defined.

Remark rem_4100 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X1). tauto. exact (rem_4066 epsilon_mknows_old_p__type_2 X1).
Defined.

Remark rem_4101 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X2:term, auto_knows_old X2 -> auto_knows_old X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4102 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_4101 epsilon_mknows_old_p__type_2 X2).
Defined.

Remark rem_4103 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_4100 epsilon_mknows_old_p__type_2 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_4102 epsilon_mknows_old_p__type_2 X1 X2);  assumption.
  tauto.
Defined.

Remark rem_4104 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_2 (crypt X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  case (rem_4103 epsilon_mknows_old_p__type_2 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_2 A1 A2. intros. apply trans___type_2_crypt_2;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1 A2. tauto.
Defined.

Remark rem_4105 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old (crypt X1 X2) -> auto___type_2 (crypt X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intro H. intros.
  elim (rem_6 X1 X2 H);  intros.
  apply (rem_4099 epsilon_mknows_old_p__type_2 X1 X2);  tauto.
  apply (rem_4104 epsilon_mknows_old_p__type_2 X1 X2);  tauto.
Defined.

Remark rem_4106 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4107 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_agent X1 -> auto_agent X1 \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  cut (auto_agent X1). 2:apply (rem_4106 epsilon_mknows_old_p__type_2 X1);  assumption.
  tauto.
Defined.

Remark rem_4108 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_agent X1 -> auto___type_2 (nai X1). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intros A1.
  case (rem_4107 epsilon_mknows_old_p__type_2 X1 A1). clear  epsilon_mknows_old_p__type_2 A1. intros. apply trans___type_2_nai_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1. tauto.
Defined.

Remark rem_4109 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto_knows_old (nai X1) -> auto___type_2 (nai X1). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1. intro H. intros.
  elim (rem_1849 X1 H);  intros.
  apply (rem_4108 epsilon_mknows_old_p__type_2 X1);  tauto.
Defined.

Remark rem_4110 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_9 X1 -> auto___def_9 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4111 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___def_9 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3.
  cut (auto___def_9 X1 -> auto___def_9 X1). tauto. exact (rem_4110 epsilon_mknows_old_p__type_2 X1).
Defined.

Remark rem_4112 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X2:term, auto_agent X2 -> auto_agent X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4113 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X2). tauto. exact (rem_4112 epsilon_mknows_old_p__type_2 X2).
Defined.

Remark rem_4114 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X3:term, auto_agent X3 -> auto_agent X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4115 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto_agent X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3.
  cut (auto_agent X3 -> auto_agent X3). tauto. exact (rem_4114 epsilon_mknows_old_p__type_2 X3).
Defined.

Remark rem_4116 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> (auto___def_9 X1 /\ auto_agent X2 /\ auto_agent X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_9 X1). 2:apply (rem_4111 epsilon_mknows_old_p__type_2 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_4113 epsilon_mknows_old_p__type_2 X1 X2 X3);  assumption.
  cut (auto_agent X3). 2:apply (rem_4115 epsilon_mknows_old_p__type_2 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_4117 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_9 X1 -> auto_agent X2 -> auto_agent X3 -> auto___type_2 (nonces_old X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_4116 epsilon_mknows_old_p__type_2 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_p__type_2 A1 A2 A3. intros. apply trans___type_2_nonces_old_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1 A2 A3. tauto.
Defined.

Remark rem_4118 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto_knows_old (nonces_old X1 X2 X3) -> auto___type_2 (nonces_old X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3. intro H. intros.
  elim (rem_1859 X1 X2 X3 H);  intros.
  apply (rem_4117 epsilon_mknows_old_p__type_2 X1 X2 X3);  tauto.
Defined.

Remark rem_4119 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto___type_2 (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intros A1 A2.
  case (rem_4103 epsilon_mknows_old_p__type_2 X1 X2 A1 A2). clear  epsilon_mknows_old_p__type_2 A1 A2. intros. apply trans___type_2_cons_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1 A2. tauto.
Defined.

Remark rem_4120 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2:term, auto_knows_old (cons X1 X2) -> auto___type_2 (cons X1 X2). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2. intro H. intros.
  elim (rem_1862 X1 X2 H);  intros.
  apply (rem_4119 epsilon_mknows_old_p__type_2 X1 X2);  tauto.
Defined.

Remark rem_4121 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1:term, auto___def_18 X1 -> auto___def_18 X1. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4122 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_18 X1. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3.
  cut (auto___def_18 X1 -> auto___def_18 X1). tauto. exact (rem_4121 epsilon_mknows_old_p__type_2 X1).
Defined.

Remark rem_4123 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X2:term, auto___def_16 X2 -> auto___def_16 X2. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4124 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_16 X2. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3.
  cut (auto___def_16 X2 -> auto___def_16 X2). tauto. exact (rem_4123 epsilon_mknows_old_p__type_2 X2).
Defined.

Remark rem_4125 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X3:term, auto___def_10 X3 -> auto___def_10 X3. (* Tautology. *)
Proof. intro H. clear H. tauto. Defined.

Remark rem_4126 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___def_10 X3. (* Subsumption by simpler clause. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3.
  cut (auto___def_10 X3 -> auto___def_10 X3). tauto. exact (rem_4125 epsilon_mknows_old_p__type_2 X3).
Defined.

Remark rem_4127 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> (auto___def_18 X1 /\ auto___def_16 X2 /\ auto___def_10 X3) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3. intros A1 A2 A3.
  cut (auto___def_18 X1). 2:apply (rem_4122 epsilon_mknows_old_p__type_2 X1 X2 X3);  assumption.
  cut (auto___def_16 X2). 2:apply (rem_4124 epsilon_mknows_old_p__type_2 X1 X2 X3);  assumption.
  cut (auto___def_10 X3). 2:apply (rem_4126 epsilon_mknows_old_p__type_2 X1 X2 X3);  assumption.
  tauto.
Defined.

Remark rem_4128 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto___def_18 X1 -> auto___def_16 X2 -> auto___def_10 X3 -> auto___type_2 (f1 X1 X2 X3). (* Deduce positive atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3. intros A1 A2 A3.
  case (rem_4127 epsilon_mknows_old_p__type_2 X1 X2 X3 A1 A2 A3). clear  epsilon_mknows_old_p__type_2 A1 A2 A3. intros. apply trans___type_2_f1_1;  tauto.
 clear  epsilon_mknows_old_p__type_2 A1 A2 A3. tauto.
Defined.

Remark rem_4129 : (forall X:term, auto_knows_old X -> auto___type_2 X)
    -> forall X1 X2 X3:term, auto_knows_old (f1 X1 X2 X3) -> auto___type_2 (f1 X1 X2 X3). (* Eliminate negative atom. *)
Proof.
  intros epsilon_mknows_old_p__type_2. intros X1 X2 X3. intro H. intros.
  elim (rem_1872 X1 X2 X3 H);  intros.
  apply (rem_4128 epsilon_mknows_old_p__type_2 X1 X2 X3);  tauto.
Defined.

Remark rem_4130 : forall X1:term, auto_knows_old X1 -> auto___type_2 X1. (* Induct. *)
Proof.
  fix epsilon_mknows_old_p__type_2 1.
  intro X. case X.
   intro H. elim (rem_1887  H).
   intro H. elim (rem_1885  H).
  intros X1 X2;  exact (rem_4120 epsilon_mknows_old_p__type_2 X1 X2).
  intros X1 X2;  exact (rem_4105 epsilon_mknows_old_p__type_2 X1 X2).
  intros X1 X2 X3;  exact (rem_4129 epsilon_mknows_old_p__type_2 X1 X2 X3).
  intros X1 X2;  exact (rem_4089 epsilon_mknows_old_p__type_2 X1 X2).
  intros X1 X2. intro H. elim (rem_1879 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1884 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1877 X1 X2 H).
  intros X1;  exact (rem_4080 epsilon_mknows_old_p__type_2 X1).
   intro H. elim (rem_1875  H).
  intros X1 X2. intro H. elim (rem_1874 X1 X2 H).
  intros X1;  exact (rem_4109 epsilon_mknows_old_p__type_2 X1).
  exact (rem_4072 epsilon_mknows_old_p__type_2 ).
  intros X1 X2 X3. intro H. elim (rem_1880 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_4118 epsilon_mknows_old_p__type_2 X1 X2 X3).
   intro H. elim (rem_1882  H).
   intro H. elim (rem_1883  H).
  exact (rem_4093 epsilon_mknows_old_p__type_2 ).
  exact (rem_4082 epsilon_mknows_old_p__type_2 ).
  intros X1;  exact (rem_4069 epsilon_mknows_old_p__type_2 X1).
   intro H. elim (rem_1886  H).
  intros X1 X2 X3. intro H. elim (rem_1881 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1878 X1 X2 X3 H).
  exact (rem_4091 epsilon_mknows_old_p__type_2 ).
   intro H. elim (rem_1876  H).
Qed.

Remark rem_4131 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___type_2 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old X1 -> auto___type_2 X1). tauto. exact (rem_4130 X1).
Qed.

Remark rem_4132 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_31 (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4055 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_31_f4_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4133 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_33 (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4055 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_33_f3_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4134 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_24 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4044 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_24_nil_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4135 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_33 (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) /\ auto___def_24 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_33 (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))). 2:apply (rem_4133 X1 X2 X3);  assumption.
  cut (auto___def_24 nil). 2:apply (rem_4134 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4136 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_32 (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4135 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_32_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4137 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_31 (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) /\ auto___def_32 (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_31 (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))). 2:apply (rem_4132 X1 X2 X3);  assumption.
  cut (auto___def_32 (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)). 2:apply (rem_4136 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4138 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_30 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4137 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_30_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4139 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___type_2 X1 /\ auto___def_30 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___type_2 X1). 2:apply (rem_4131 X1 X2 X3);  assumption.
  cut (auto___def_30 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil))). 2:apply (rem_4138 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4140 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_29 (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4139 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_29_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4141 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_29 (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_29 (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))). 2:apply (rem_4140 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4142 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_27 (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4141 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_27_h_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4143 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_14 (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4057 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_14_crypt_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4144 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_23 (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4059 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_23_f1_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4145 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_23 (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) /\ auto___def_24 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_23 (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3))). 2:apply (rem_4144 X1 X2 X3);  assumption.
  cut (auto___def_24 nil). 2:apply (rem_4134 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4146 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_15 (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4145 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_15_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4147 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_14 (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) /\ auto___def_15 (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_14 (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)))). 2:apply (rem_4143 X1 X2 X3);  assumption.
  cut (auto___def_15 (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)). 2:apply (rem_4146 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4148 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_12 (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4147 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_12_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4149 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_12 (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) /\ auto___def_24 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_12 (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil))). 2:apply (rem_4148 X1 X2 X3);  assumption.
  cut (auto___def_24 nil). 2:apply (rem_4134 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4150 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_34 (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4149 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_34_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4151 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_10 (nonces_old X1 X2 X3) /\ auto___def_34 (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_10 (nonces_old X1 X2 X3)). 2:apply (rem_4054 X1 X2 X3);  assumption.
  cut (auto___def_34 (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)). 2:apply (rem_4150 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4152 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_28 (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4151 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_28_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4153 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto___def_27 (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) /\ auto___def_28 (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_27 (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil))))). 2:apply (rem_4142 X1 X2 X3);  assumption.
  cut (auto___def_28 (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil))). 2:apply (rem_4152 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4154 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_26 (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4153 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans___def_26_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4155 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto___def_26 (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto___def_26 (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))). 2:apply (rem_4154 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4156 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4155 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_h_2;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4157 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto_knows_old (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) /\ auto_knows_old nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_old (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil))))). 2:apply (rem_4156 X1 X2 X3);  assumption.
  cut (auto_knows_old nil). 2:apply (rem_4061 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4158 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4157 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4159 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto_knows_old (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) /\ auto_knows_old (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_old (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil))). 2:apply (rem_4065 X1 X2 X3);  assumption.
  cut (auto_knows_old (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)). 2:apply (rem_4158 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4160 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4159 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4161 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> (auto_knows_old (nonces_old X1 X2 X3) /\ auto_knows_old (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  cut (auto_knows_old (nonces_old X1 X2 X3)). 2:apply (rem_4042 X1 X2 X3);  assumption.
  cut (auto_knows_old (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). 2:apply (rem_4160 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4162 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4.
  case (rem_4161 X1 X2 X3 A1 A2 A3 A4). clear  A1 A2 A3 A4. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2 A3 A4. tauto.
Qed.

Remark rem_4163 : forall X1 X2 X3:term, auto_knows_old X1 -> auto_knows_old nil -> auto_agent X2 -> auto_agent X3 -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X3 -> auto_knows_old X1 -> auto_knows_old nil -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)))). tauto. exact (rem_4162 X1 X2 X3).
Qed.

Remark rem_4164 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old (cons X1 nil) -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1 H2. intro H. intros.
  elim (rem_1862 X1 nil H);  intros.
  apply (rem_4163 X1 X2 X3);  tauto.
Qed.

Remark rem_4165 : forall X1 X2 X3:term, auto_agent X2 -> auto_agent X3 -> auto_knows_old (cons X1 nil) -> auto_knows_old respond_id -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X3 -> auto_knows_old (cons X1 nil) -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)))). tauto.
  exact (rem_4164 X1 X2 X3).
Qed.

Remark rem_4166 : forall X1 X2 X3:term, auto_knows_old respond_id -> auto_knows_old (cons X1 nil) -> auto_agent X3 -> auto_agent X2 -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_agent X2 -> auto_agent X3 -> auto_knows_old (cons X1 nil) -> auto_knows_old respond_id -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)))). tauto. exact (rem_4165 X1 X2 X3).
Qed.

Remark rem_4167 : forall X1 X2 X3:term, auto_agent X3 -> auto_agent X2 -> auto_knows_old (cons respond_id (cons X1 nil)) -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil))). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1 H2. intro H. intros.
  elim (rem_1862 respond_id (cons X1 nil) H);  intros.
  apply (rem_4166 X1 X2 X3);  tauto.
Qed.

Remark rem_4168 : forall _big_nAI _big_p _big_s:term, auto_agent _big_s -> auto_agent _big_p -> auto_knows_old (cons respond_id (cons _big_nAI nil)) -> auto_knows_old (cons (nonces_old _big_nAI _big_s _big_p) (cons (cons (crypt (session_old _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_old _big_nAI _big_s _big_p) (nonces_old _big_nAI _big_s _big_p)) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (nonces_old _big_nAI _big_s _big_p) (cons (cons (crypt (session_old _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_old _big_nAI _big_s _big_p) (nonces_old _big_nAI _big_s _big_p)) nil)) nil)))) nil))). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto_agent X3 -> auto_agent X2 -> auto_knows_old (cons respond_id (cons X1 nil)) -> auto_knows_old (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) (cons (h (cons (h (cons X1 (cons (f4 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) (cons (f3 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3)) nil)))) (cons (nonces_old X1 X2 X3) (cons (cons (crypt (session_old X1 X2 X3) (f5 (key sym (cons X2 (cons X3 nil))) (nonces_old X1 X2 X3))) (cons (f1 (key sym (cons X2 (cons X3 nil))) (session_old X1 X2 X3) (nonces_old X1 X2 X3)) nil)) nil)))) nil)))). tauto. exact (rem_4167 X1 X2 X3).
Qed.

Remark rem_4169 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2.
  cut (auto_knows_old X2 -> auto_knows_old X2). tauto. exact (rem_1891 X2).
Qed.

Remark rem_4170 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> (auto_knows_old X1 /\ auto_knows_old X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2. intros A1 A2.
  cut (auto_knows_old X1). 2:apply (rem_3373 X1 X2);  assumption.
  cut (auto_knows_old X2). 2:apply (rem_4169 X1 X2);  assumption.
  tauto.
Qed.

Remark rem_4171 : forall X1 X2:term, auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old (cons X1 X2). (* Deduce positive atom. *)
Proof.
  intros X1 X2. intros A1 A2.
  case (rem_4170 X1 X2 A1 A2). clear  A1 A2. intros. apply trans_knows_old_cons_1;  tauto.
 clear  A1 A2. tauto.
Qed.

Remark rem_4172 : forall _big_m1 _big_m2:term, auto_knows_old _big_m1 -> auto_knows_old _big_m2 -> auto_knows_old (cons _big_m1 _big_m2). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_old X1 -> auto_knows_old X2 -> auto_knows_old (cons X1 X2)). tauto. exact (rem_4171 X1 X2).
Qed.

Remark rem_4173 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_4_p__type_7.  tauto.
Defined.

Remark rem_4174 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_7 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7.  case (rem_4173 epsilon_m__type_4_p__type_7). clear  epsilon_m__type_4_p__type_7. intros. apply trans___type_7_i_1;  tauto.
 clear  epsilon_m__type_4_p__type_7. tauto.
Defined.

Remark rem_4175 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_4 i -> auto___type_7 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7. intro H. intros.
  elim (rem_106 H);  intros.
  apply (rem_4174 epsilon_m__type_4_p__type_7);  tauto.
Defined.

Remark rem_4176 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_7 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7.  case (rem_4173 epsilon_m__type_4_p__type_7). clear  epsilon_m__type_4_p__type_7. intros. apply trans___type_7_bob_1;  tauto.
 clear  epsilon_m__type_4_p__type_7. tauto.
Defined.

Remark rem_4177 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_4 bob -> auto___type_7 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7. intro H. intros.
  elim (rem_109 H);  intros.
  apply (rem_4176 epsilon_m__type_4_p__type_7);  tauto.
Defined.

Remark rem_4178 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_7 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7.  case (rem_4173 epsilon_m__type_4_p__type_7). clear  epsilon_m__type_4_p__type_7. intros. apply trans___type_7_server_1;  tauto.
 clear  epsilon_m__type_4_p__type_7. tauto.
Defined.

Remark rem_4179 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_4 server -> auto___type_7 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7. intro H. intros.
  elim (rem_112 H);  intros.
  apply (rem_4178 epsilon_m__type_4_p__type_7);  tauto.
Defined.

Remark rem_4180 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_7 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7.  case (rem_4173 epsilon_m__type_4_p__type_7). clear  epsilon_m__type_4_p__type_7. intros. apply trans___type_7_alice_1;  tauto.
 clear  epsilon_m__type_4_p__type_7. tauto.
Defined.

Remark rem_4181 : (forall X:term, auto___type_4 X -> auto___type_7 X)
    -> auto___type_4 alice -> auto___type_7 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_p__type_7. intro H. intros.
  elim (rem_115 H);  intros.
  apply (rem_4180 epsilon_m__type_4_p__type_7);  tauto.
Defined.

Remark rem_4182 : forall X1:term, auto___type_4 X1 -> auto___type_7 X1. (* Induct. *)
Proof.
  fix epsilon_m__type_4_p__type_7 1.
  intro X. case X.
  exact (rem_4181 epsilon_m__type_4_p__type_7 ).
  exact (rem_4177 epsilon_m__type_4_p__type_7 ).
  intros X1 X2. intro H. elim (rem_137 X1 X2 H).
  intros X1 X2. intro H. elim (rem_133 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_138 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_129 X1 X2 H).
  intros X1 X2. intro H. elim (rem_123 X1 X2 H).
  intros X1 X2. intro H. elim (rem_135 X1 X2 H).
  intros X1 X2. intro H. elim (rem_121 X1 X2 H).
  intros X1. intro H. elim (rem_124 X1 H).
  exact (rem_4175 epsilon_m__type_4_p__type_7 ).
  intros X1 X2. intro H. elim (rem_118 X1 X2 H).
  intros X1. intro H. elim (rem_134 X1 H).
   intro H. elim (rem_119  H).
  intros X1 X2 X3. intro H. elim (rem_125 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_136 X1 X2 X3 H).
   intro H. elim (rem_128  H).
   intro H. elim (rem_132  H).
   intro H. elim (rem_131  H).
   intro H. elim (rem_127  H).
  intros X1. intro H. elim (rem_117 X1 H).
  exact (rem_4179 epsilon_m__type_4_p__type_7 ).
  intros X1 X2 X3. intro H. elim (rem_126 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_122 X1 X2 X3 H).
   intro H. elim (rem_130  H).
   intro H. elim (rem_120  H).
Qed.

Remark rem_4183 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___type_7 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_4 X1 -> auto___type_7 X1). tauto. exact (rem_4182 X1).
Qed.

Remark rem_4184 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  tauto.
Qed.

Remark rem_4185 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_58 sym. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4184 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_58_sym_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4186 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_5_p__type_8.  tauto.
Defined.

Remark rem_4187 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_8 i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8.  case (rem_4186 epsilon_m__type_5_p__type_8). clear  epsilon_m__type_5_p__type_8. intros. apply trans___type_8_i_1;  tauto.
 clear  epsilon_m__type_5_p__type_8. tauto.
Defined.

Remark rem_4188 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_5 i -> auto___type_8 i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8. intro H. intros.
  elim (rem_144 H);  intros.
  apply (rem_4187 epsilon_m__type_5_p__type_8);  tauto.
Defined.

Remark rem_4189 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_8 bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8.  case (rem_4186 epsilon_m__type_5_p__type_8). clear  epsilon_m__type_5_p__type_8. intros. apply trans___type_8_bob_1;  tauto.
 clear  epsilon_m__type_5_p__type_8. tauto.
Defined.

Remark rem_4190 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_5 bob -> auto___type_8 bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8. intro H. intros.
  elim (rem_147 H);  intros.
  apply (rem_4189 epsilon_m__type_5_p__type_8);  tauto.
Defined.

Remark rem_4191 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_8 server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8.  case (rem_4186 epsilon_m__type_5_p__type_8). clear  epsilon_m__type_5_p__type_8. intros. apply trans___type_8_server_1;  tauto.
 clear  epsilon_m__type_5_p__type_8. tauto.
Defined.

Remark rem_4192 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_5 server -> auto___type_8 server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8. intro H. intros.
  elim (rem_150 H);  intros.
  apply (rem_4191 epsilon_m__type_5_p__type_8);  tauto.
Defined.

Remark rem_4193 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_8 alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8.  case (rem_4186 epsilon_m__type_5_p__type_8). clear  epsilon_m__type_5_p__type_8. intros. apply trans___type_8_alice_1;  tauto.
 clear  epsilon_m__type_5_p__type_8. tauto.
Defined.

Remark rem_4194 : (forall X:term, auto___type_5 X -> auto___type_8 X)
    -> auto___type_5 alice -> auto___type_8 alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_p__type_8. intro H. intros.
  elim (rem_153 H);  intros.
  apply (rem_4193 epsilon_m__type_5_p__type_8);  tauto.
Defined.

Remark rem_4195 : forall X2:term, auto___type_5 X2 -> auto___type_8 X2. (* Induct. *)
Proof.
  fix epsilon_m__type_5_p__type_8 1.
  intro X. case X.
  exact (rem_4194 epsilon_m__type_5_p__type_8 ).
  exact (rem_4190 epsilon_m__type_5_p__type_8 ).
  intros X1 X2. intro H. elim (rem_175 X1 X2 H).
  intros X1 X2. intro H. elim (rem_171 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_176 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_167 X1 X2 H).
  intros X1 X2. intro H. elim (rem_161 X1 X2 H).
  intros X1 X2. intro H. elim (rem_173 X1 X2 H).
  intros X1 X2. intro H. elim (rem_159 X1 X2 H).
  intros X1. intro H. elim (rem_162 X1 H).
  exact (rem_4188 epsilon_m__type_5_p__type_8 ).
  intros X1 X2. intro H. elim (rem_156 X1 X2 H).
  intros X1. intro H. elim (rem_172 X1 H).
   intro H. elim (rem_157  H).
  intros X1 X2 X3. intro H. elim (rem_163 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_174 X1 X2 X3 H).
   intro H. elim (rem_166  H).
   intro H. elim (rem_170  H).
   intro H. elim (rem_169  H).
   intro H. elim (rem_165  H).
  intros X1. intro H. elim (rem_155 X1 H).
  exact (rem_4192 epsilon_m__type_5_p__type_8 ).
  intros X1 X2 X3. intro H. elim (rem_164 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_160 X1 X2 X3 H).
   intro H. elim (rem_168  H).
   intro H. elim (rem_158  H).
Qed.

Remark rem_4196 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___type_8 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_5 X2 -> auto___type_8 X2). tauto. exact (rem_4195 X2).
Qed.

Remark rem_4197 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_61 nil. (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4184 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_61_nil_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4198 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> (auto___type_8 X2 /\ auto___def_61 nil) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_8 X2). 2:apply (rem_4196 X1 X2 X3);  assumption.
  cut (auto___def_61 nil). 2:apply (rem_4197 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4199 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_60 (cons X2 nil). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4198 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_60_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4200 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> (auto___type_7 X1 /\ auto___def_60 (cons X2 nil)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_7 X1). 2:apply (rem_4183 X1 X2 X3);  assumption.
  cut (auto___def_60 (cons X2 nil)). 2:apply (rem_4199 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4201 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_59 (cons X1 (cons X2 nil)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4200 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_59_cons_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4202 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> (auto___def_58 sym /\ auto___def_59 (cons X1 (cons X2 nil))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_58 sym). 2:apply (rem_4185 X1 X2 X3);  assumption.
  cut (auto___def_59 (cons X1 (cons X2 nil))). 2:apply (rem_4201 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4203 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_56 (key sym (cons X1 (cons X2 nil))). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4202 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_56_key_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4204 : forall X3:term, auto_knows_old X3 -> auto___type_6 X3. (* Induct. *)
Proof.
  fix epsilon_mknows_old_p__type_6 1.
  intro X. case X.
   intro H. elim (rem_1887  H).
   intro H. elim (rem_1885  H).
  intros X1 X2;  exact (rem_2126 epsilon_mknows_old_p__type_6 X1 X2).
  intros X1 X2;  exact (rem_2111 epsilon_mknows_old_p__type_6 X1 X2).
  intros X1 X2 X3;  exact (rem_2135 epsilon_mknows_old_p__type_6 X1 X2 X3).
  intros X1 X2;  exact (rem_2095 epsilon_mknows_old_p__type_6 X1 X2).
  intros X1 X2. intro H. elim (rem_1879 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1884 X1 X2 H).
  intros X1 X2. intro H. elim (rem_1877 X1 X2 H).
  intros X1;  exact (rem_2086 epsilon_mknows_old_p__type_6 X1).
   intro H. elim (rem_1875  H).
  intros X1 X2. intro H. elim (rem_1874 X1 X2 H).
  intros X1;  exact (rem_2115 epsilon_mknows_old_p__type_6 X1).
  exact (rem_2078 epsilon_mknows_old_p__type_6 ).
  intros X1 X2 X3. intro H. elim (rem_1880 X1 X2 X3 H).
  intros X1 X2 X3;  exact (rem_2124 epsilon_mknows_old_p__type_6 X1 X2 X3).
   intro H. elim (rem_1882  H).
   intro H. elim (rem_1883  H).
  exact (rem_2099 epsilon_mknows_old_p__type_6 ).
  exact (rem_2088 epsilon_mknows_old_p__type_6 ).
  intros X1;  exact (rem_2075 epsilon_mknows_old_p__type_6 X1).
   intro H. elim (rem_1886  H).
  intros X1 X2 X3. intro H. elim (rem_1881 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_1878 X1 X2 X3 H).
  exact (rem_2097 epsilon_mknows_old_p__type_6 ).
   intro H. elim (rem_1876  H).
Qed.

Remark rem_4205 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___type_6 X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old X3 -> auto___type_6 X3). tauto. exact (rem_4204 X3).
Qed.

Remark rem_4206 : forall X3:term, auto_knows_old X3 -> auto_knows_old X3. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_4207 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old X3. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old X3 -> auto_knows_old X3). tauto. exact (rem_4206 X3).
Qed.

Remark rem_4208 : forall X1:term, auto___type_4 X1 -> auto___type_4 X1. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_4209 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___type_4 X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_4 X1 -> auto___type_4 X1). tauto. exact (rem_4208 X1).
Qed.

Remark rem_4210 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_4_pagent.  tauto.
Defined.

Remark rem_4211 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto_agent i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_pagent.  case (rem_4210 epsilon_m__type_4_pagent). clear  epsilon_m__type_4_pagent. intros. apply trans_agent_i_1;  tauto.
 clear  epsilon_m__type_4_pagent. tauto.
Defined.

Remark rem_4212 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto___type_4 i -> auto_agent i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_pagent. intro H. intros.
  elim (rem_106 H);  intros.
  apply (rem_4211 epsilon_m__type_4_pagent);  tauto.
Defined.

Remark rem_4213 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto_agent bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_pagent.  case (rem_4210 epsilon_m__type_4_pagent). clear  epsilon_m__type_4_pagent. intros. apply trans_agent_bob_1;  tauto.
 clear  epsilon_m__type_4_pagent. tauto.
Defined.

Remark rem_4214 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto___type_4 bob -> auto_agent bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_pagent. intro H. intros.
  elim (rem_109 H);  intros.
  apply (rem_4213 epsilon_m__type_4_pagent);  tauto.
Defined.

Remark rem_4215 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto_agent server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_pagent.  case (rem_4210 epsilon_m__type_4_pagent). clear  epsilon_m__type_4_pagent. intros. apply trans_agent_server_1;  tauto.
 clear  epsilon_m__type_4_pagent. tauto.
Defined.

Remark rem_4216 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto___type_4 server -> auto_agent server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_pagent. intro H. intros.
  elim (rem_112 H);  intros.
  apply (rem_4215 epsilon_m__type_4_pagent);  tauto.
Defined.

Remark rem_4217 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto_agent alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_4_pagent.  case (rem_4210 epsilon_m__type_4_pagent). clear  epsilon_m__type_4_pagent. intros. apply trans_agent_alice_1;  tauto.
 clear  epsilon_m__type_4_pagent. tauto.
Defined.

Remark rem_4218 : (forall X:term, auto___type_4 X -> auto_agent X)
    -> auto___type_4 alice -> auto_agent alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_4_pagent. intro H. intros.
  elim (rem_115 H);  intros.
  apply (rem_4217 epsilon_m__type_4_pagent);  tauto.
Defined.

Remark rem_4219 : forall X1:term, auto___type_4 X1 -> auto_agent X1. (* Induct. *)
Proof.
  fix epsilon_m__type_4_pagent 1.
  intro X. case X.
  exact (rem_4218 epsilon_m__type_4_pagent ).
  exact (rem_4214 epsilon_m__type_4_pagent ).
  intros X1 X2. intro H. elim (rem_137 X1 X2 H).
  intros X1 X2. intro H. elim (rem_133 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_138 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_129 X1 X2 H).
  intros X1 X2. intro H. elim (rem_123 X1 X2 H).
  intros X1 X2. intro H. elim (rem_135 X1 X2 H).
  intros X1 X2. intro H. elim (rem_121 X1 X2 H).
  intros X1. intro H. elim (rem_124 X1 H).
  exact (rem_4212 epsilon_m__type_4_pagent ).
  intros X1 X2. intro H. elim (rem_118 X1 X2 H).
  intros X1. intro H. elim (rem_134 X1 H).
   intro H. elim (rem_119  H).
  intros X1 X2 X3. intro H. elim (rem_125 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_136 X1 X2 X3 H).
   intro H. elim (rem_128  H).
   intro H. elim (rem_132  H).
   intro H. elim (rem_131  H).
   intro H. elim (rem_127  H).
  intros X1. intro H. elim (rem_117 X1 H).
  exact (rem_4216 epsilon_m__type_4_pagent ).
  intros X1 X2 X3. intro H. elim (rem_126 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_122 X1 X2 X3 H).
   intro H. elim (rem_130  H).
   intro H. elim (rem_120  H).
Qed.

Remark rem_4220 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_agent X1. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_4 X1 -> auto_agent X1). tauto. exact (rem_4219 X1).
Qed.

Remark rem_4221 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> True \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros epsilon_m__type_5_pagent.  tauto.
Defined.

Remark rem_4222 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto_agent i. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_pagent.  case (rem_4221 epsilon_m__type_5_pagent). clear  epsilon_m__type_5_pagent. intros. apply trans_agent_i_1;  tauto.
 clear  epsilon_m__type_5_pagent. tauto.
Defined.

Remark rem_4223 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto___type_5 i -> auto_agent i. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_pagent. intro H. intros.
  elim (rem_144 H);  intros.
  apply (rem_4222 epsilon_m__type_5_pagent);  tauto.
Defined.

Remark rem_4224 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto_agent bob. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_pagent.  case (rem_4221 epsilon_m__type_5_pagent). clear  epsilon_m__type_5_pagent. intros. apply trans_agent_bob_1;  tauto.
 clear  epsilon_m__type_5_pagent. tauto.
Defined.

Remark rem_4225 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto___type_5 bob -> auto_agent bob. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_pagent. intro H. intros.
  elim (rem_147 H);  intros.
  apply (rem_4224 epsilon_m__type_5_pagent);  tauto.
Defined.

Remark rem_4226 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto_agent server. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_pagent.  case (rem_4221 epsilon_m__type_5_pagent). clear  epsilon_m__type_5_pagent. intros. apply trans_agent_server_1;  tauto.
 clear  epsilon_m__type_5_pagent. tauto.
Defined.

Remark rem_4227 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto___type_5 server -> auto_agent server. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_pagent. intro H. intros.
  elim (rem_150 H);  intros.
  apply (rem_4226 epsilon_m__type_5_pagent);  tauto.
Defined.

Remark rem_4228 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto_agent alice. (* Deduce positive atom. *)
Proof.
  intros epsilon_m__type_5_pagent.  case (rem_4221 epsilon_m__type_5_pagent). clear  epsilon_m__type_5_pagent. intros. apply trans_agent_alice_1;  tauto.
 clear  epsilon_m__type_5_pagent. tauto.
Defined.

Remark rem_4229 : (forall X:term, auto___type_5 X -> auto_agent X)
    -> auto___type_5 alice -> auto_agent alice. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__type_5_pagent. intro H. intros.
  elim (rem_153 H);  intros.
  apply (rem_4228 epsilon_m__type_5_pagent);  tauto.
Defined.

Remark rem_4230 : forall X2:term, auto___type_5 X2 -> auto_agent X2. (* Induct. *)
Proof.
  fix epsilon_m__type_5_pagent 1.
  intro X. case X.
  exact (rem_4229 epsilon_m__type_5_pagent ).
  exact (rem_4225 epsilon_m__type_5_pagent ).
  intros X1 X2. intro H. elim (rem_175 X1 X2 H).
  intros X1 X2. intro H. elim (rem_171 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_176 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_167 X1 X2 H).
  intros X1 X2. intro H. elim (rem_161 X1 X2 H).
  intros X1 X2. intro H. elim (rem_173 X1 X2 H).
  intros X1 X2. intro H. elim (rem_159 X1 X2 H).
  intros X1. intro H. elim (rem_162 X1 H).
  exact (rem_4223 epsilon_m__type_5_pagent ).
  intros X1 X2. intro H. elim (rem_156 X1 X2 H).
  intros X1. intro H. elim (rem_172 X1 H).
   intro H. elim (rem_157  H).
  intros X1 X2 X3. intro H. elim (rem_163 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_174 X1 X2 X3 H).
   intro H. elim (rem_166  H).
   intro H. elim (rem_170  H).
   intro H. elim (rem_169  H).
   intro H. elim (rem_165  H).
  intros X1. intro H. elim (rem_155 X1 H).
  exact (rem_4227 epsilon_m__type_5_pagent ).
  intros X1 X2 X3. intro H. elim (rem_164 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_160 X1 X2 X3 H).
   intro H. elim (rem_168  H).
   intro H. elim (rem_158  H).
Qed.

Remark rem_4231 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_agent X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_5 X2 -> auto_agent X2). tauto. exact (rem_4230 X2).
Qed.

Remark rem_4232 : forall X2:term, auto___type_5 X2 -> auto___type_5 X2. (* Tautology. *)
Proof. tauto. Qed.

Remark rem_4233 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___type_5 X2. (* Subsumption by simpler clause. *)
Proof.
  intros X1 X2 X3.
  cut (auto___type_5 X2 -> auto___type_5 X2). tauto. exact (rem_4232 X2).
Qed.

Remark rem_4234 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> (auto___type_6 X3 /\ auto_knows_old X3 /\ auto___type_4 X1 /\ auto_agent X1 /\ auto_agent X2 /\ auto___type_5 X2) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_6 X3). 2:apply (rem_4205 X1 X2 X3);  assumption.
  cut (auto_knows_old X3). 2:apply (rem_4207 X1 X2 X3);  assumption.
  cut (auto___type_4 X1). 2:apply (rem_4209 X1 X2 X3);  assumption.
  cut (auto_agent X1). 2:apply (rem_4220 X1 X2 X3);  assumption.
  cut (auto_agent X2). 2:apply (rem_4231 X1 X2 X3);  assumption.
  cut (auto___type_5 X2). 2:apply (rem_4233 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4235 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_57 (nonces_old X3 X1 X2). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4234 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_57_nonces_old_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4236 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> (auto___def_56 (key sym (cons X1 (cons X2 nil))) /\ auto___def_57 (nonces_old X3 X1 X2)) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___def_56 (key sym (cons X1 (cons X2 nil)))). 2:apply (rem_4203 X1 X2 X3);  assumption.
  cut (auto___def_57 (nonces_old X3 X1 X2)). 2:apply (rem_4235 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4237 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_54 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4236 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_54_f4_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4238 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto___def_55 (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4236 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans___def_55_f3_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4239 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> (auto___type_7 X1 /\ auto___def_54 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) /\ auto___def_55 (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))) \/ False. (* Distribute disjunctions over conjunctions. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  cut (auto___type_7 X1). 2:apply (rem_4183 X1 X2 X3);  assumption.
  cut (auto___def_54 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). 2:apply (rem_4237 X1 X2 X3);  assumption.
  cut (auto___def_55 (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). 2:apply (rem_4238 X1 X2 X3);  assumption.
  tauto.
Qed.

Remark rem_4240 : forall X1 X2 X3:term, auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Deduce positive atom. *)
Proof.
  intros X1 X2 X3. intros A1 A2 A3 A4 A5 A6.
  case (rem_4239 X1 X2 X3 A1 A2 A3 A4 A5 A6). clear  A1 A2 A3 A4 A5 A6. intros. apply trans_server_keys_old_1;  tauto.
 clear  A1 A2 A3 A4 A5 A6. tauto.
Qed.

Remark rem_4241 : forall X1 X2 X3:term, auto___type_5 X2 -> auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto___def_42 nil -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto___type_5 X2 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4240 X1 X2 X3).
Qed.

Remark rem_4242 : forall X1 X2 X3:term, auto___def_41 (cons X2 nil) -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_214 X2 nil H);  intros.
  apply (rem_4241 X1 X2 X3);  tauto.
Qed.

Remark rem_4243 : forall X1 X2 X3:term, auto___type_4 X1 -> auto___def_41 (cons X2 nil) -> auto___type_3 (nonces_old X3 X1 X2) -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto___def_41 (cons X2 nil) -> auto___type_3 (nonces_old X3 X1 X2) -> auto___type_4 X1 -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4242 X1 X2 X3).
Qed.

Remark rem_4244 : forall X1 X2 X3:term, auto___def_40 (cons X1 (cons X2 nil)) -> auto___type_3 (nonces_old X3 X1 X2) -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_246 X1 (cons X2 nil) H);  intros.
  apply (rem_4243 X1 X2 X3);  tauto.
Qed.

Remark rem_4245 : forall X1 X2 X3:term, auto___def_39 sym -> auto___def_40 (cons X1 (cons X2 nil)) -> auto___type_3 (nonces_old X3 X1 X2) -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto___def_40 (cons X1 (cons X2 nil)) -> auto___type_3 (nonces_old X3 X1 X2) -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto.
  exact (rem_4244 X1 X2 X3).
Qed.

Remark rem_4246 : forall X1 X2 X3:term, auto___def_38 (key sym (cons X1 (cons X2 nil))) -> auto___type_3 (nonces_old X3 X1 X2) -> auto_knows_old X3 -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_278 sym (cons X1 (cons X2 nil)) H);  intros.
  apply (rem_4245 X1 X2 X3);  tauto.
Qed.

Remark rem_4247 : forall X1 X2 X3:term, auto_knows_old X3 -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1. intro H. intros.
  elim (rem_1826 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2) H);  intros.
  apply (rem_4246 X1 X2 X3);  tauto.
Qed.

Remark rem_4248 : forall X1 X2 X3:term, auto_knows_old X3 -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old nil -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old X3 -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto.
  exact (rem_4247 X1 X2 X3).
Qed.

Remark rem_4249 : forall X1 X2 X3:term, auto_knows_old X3 -> auto_knows_old nil -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_old X3 -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old nil -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4248 X1 X2 X3).
Qed.

Remark rem_4250 : forall X1 X2 X3:term, auto_knows_old (cons X3 nil) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_1862 X3 nil H);  intros.
  apply (rem_4249 X1 X2 X3);  tauto.
Qed.

Remark rem_4251 : forall X1 X2 X3:term, auto_knows_old (cons X3 nil) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old respond_id -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old (cons X3 nil) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto.
  exact (rem_4250 X1 X2 X3).
Qed.

Remark rem_4252 : forall X1 X2 X3:term, auto_knows_old respond_id -> auto_knows_old (cons X3 nil) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_old (cons X3 nil) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old respond_id -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4251 X1 X2 X3).
Qed.

Remark rem_4253 : forall X1 X2 X3:term, auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_1862 respond_id (cons X3 nil) H);  intros.
  apply (rem_4252 X1 X2 X3);  tauto.
Qed.

Remark rem_4254 : forall X1 X2 X3:term, auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old nil -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto.
  exact (rem_4253 X1 X2 X3).
Qed.

Remark rem_4255 : forall X1 X2 X3:term, auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old nil -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) -> auto_knows_old nil -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4254 X1 X2 X3).
Qed.

Remark rem_4256 : forall X1 X2 X3:term, auto_knows_old (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_1862 (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil H);  intros.
  apply (rem_4255 X1 X2 X3);  tauto.
Qed.

Remark rem_4257 : forall X1 X2 X3:term, auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_knows_old (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2 X3.
  cut (auto_knows_old (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_knows_old (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4256 X1 X2 X3).
Qed.

Remark rem_4258 : forall X1 X2 X3:term, auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil)) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)). (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intro H. intros.
  elim (rem_1862 (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil) H);  intros.
  apply (rem_4257 X1 X2 X3);  tauto.
Qed.

Remark rem_4259 : forall _big_nAI _big_p _big_s:term, auto_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_old (cons respond_id (cons _big_nAI nil)) -> auto_server_keys_old _big_s (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)). (* Prove equivalent, normalized clause. *)
Proof.
   intros X3 X2 X1.
  cut (auto_knows_old (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (h (cons (h (cons X3 (cons (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (cons (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil)))) (cons (f2 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) nil))) nil)) -> auto_knows_old (cons respond_id (cons X3 nil)) -> auto_server_keys_old X1 (f4 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2)) (f3 (key sym (cons X1 (cons X2 nil))) (nonces_old X3 X1 X2))). tauto. exact (rem_4258 X1 X2 X3).
Qed.

Remark rem_4260 : (forall X:term, auto___def_120 X -> auto_knows_current X -> False)
    -> forall X2:term, auto___def_57 X2 -> auto___def_122 X2 -> False. (* Cut history. *)
Proof.  intros epsilon_m__def_120_mknows_current. exact (rem_3406).
Defined.

Remark rem_4261 : (forall X:term, auto___def_120 X -> auto_knows_current X -> False)
    -> forall X1 X2:term, auto___def_122 X2 -> auto___def_121 X1 -> auto___def_57 X2 -> auto___def_56 X1 -> False. (* Split. *)
Proof.
  intros epsilon_m__def_120_mknows_current. intros X1 X2.
  cut (auto___def_57 X2 -> auto___def_122 X2 -> False). clear  epsilon_m__def_120_mknows_current. tauto.
  exact (rem_4260 epsilon_m__def_120_mknows_current X2).
Defined.

Remark rem_4262 : (forall X:term, auto___def_120 X -> auto_knows_current X -> False)
    -> forall X1 X2:term, auto_knows_current (f3 X1 X2) -> auto___def_121 X1 -> auto___def_122 X2 -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_120_mknows_current. intros X1 X2. intro H. intros.
  elim (rem_2268 X1 X2 H);  intros.
  apply (rem_4261 epsilon_m__def_120_mknows_current X1 X2);  tauto.
Defined.

Remark rem_4263 : forall X1 X2:term, auto___def_120 (f3 X1 X2) -> or_1
    (auto___def_121 X1 /\ auto___def_122 X2)
.
Proof.
  intros. inversion H.
  intros. apply or_1_intro_1; tauto.
Qed.

Remark rem_4264 : (forall X:term, auto___def_120 X -> auto_knows_current X -> False)
    -> forall X1 X2:term, auto___def_120 (f3 X1 X2) -> auto_knows_current (f3 X1 X2) -> False. (* Eliminate negative atom. *)
Proof.
  intros epsilon_m__def_120_mknows_current. intros X1 X2. intro H. intros.
  elim (rem_4263 X1 X2 H);  intros.
  apply (rem_4262 epsilon_m__def_120_mknows_current X1 X2);  tauto.
Defined.

Remark rem_4265 : forall X1:term, auto___def_120 (s X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4266 : forall X1 X2:term, auto___def_120 (key X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4267 : auto___def_120 nil -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4268 : auto___def_120 i -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4269 : auto___def_120 sym -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4270 : forall X1 X2:term, auto___def_120 (f5 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4271 : forall X1 X2 X3:term, auto___def_120 (session_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4272 : forall X1:term, auto___def_120 (h X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4273 : forall X1 X2 X3:term, auto___def_120 (nonces_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4274 : forall X1 X2 X3:term, auto___def_120 (session_current X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4275 : auto___def_120 respond_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4276 : auto___def_120 prv -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4277 : forall X1 X2:term, auto___def_120 (f2 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4278 : auto___def_120 success -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4279 : auto___def_120 request_id -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4280 : auto___def_120 pub -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4281 : forall X1 X2:term, auto___def_120 (crypt X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4282 : forall X1:term, auto___def_120 (nai X1) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4283 : forall X1 X2:term, auto___def_120 (f4 X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4284 : auto___def_120 bob -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4285 : auto___def_120 server -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4286 : forall X1 X2 X3:term, auto___def_120 (nonces_old X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4287 : forall X1 X2:term, auto___def_120 (cons X1 X2) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4288 : auto___def_120 alice -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4289 : forall X1 X2 X3:term, auto___def_120 (f1 X1 X2 X3) -> or_0.
Proof.
  intros. inversion H.
Qed.

Remark rem_4290 : forall X1:term, auto___def_120 X1 -> auto_knows_current X1 -> False. (* Induct. *)
Proof.
  fix epsilon_m__def_120_mknows_current 1.
  intro X. case X.
   intro H. elim (rem_4288  H).
   intro H. elim (rem_4284  H).
  intros X1 X2. intro H. elim (rem_4287 X1 X2 H).
  intros X1 X2. intro H. elim (rem_4281 X1 X2 H).
  intros X1 X2 X3. intro H. elim (rem_4289 X1 X2 X3 H).
  intros X1 X2. intro H. elim (rem_4277 X1 X2 H).
  intros X1 X2;  exact (rem_4264 epsilon_m__def_120_mknows_current X1 X2).
  intros X1 X2. intro H. elim (rem_4283 X1 X2 H).
  intros X1 X2. intro H. elim (rem_4270 X1 X2 H).
  intros X1. intro H. elim (rem_4272 X1 H).
   intro H. elim (rem_4268  H).
  intros X1 X2. intro H. elim (rem_4266 X1 X2 H).
  intros X1. intro H. elim (rem_4282 X1 H).
   intro H. elim (rem_4267  H).
  intros X1 X2 X3. intro H. elim (rem_4273 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_4286 X1 X2 X3 H).
   intro H. elim (rem_4276  H).
   intro H. elim (rem_4280  H).
   intro H. elim (rem_4279  H).
   intro H. elim (rem_4275  H).
  intros X1. intro H. elim (rem_4265 X1 H).
   intro H. elim (rem_4285  H).
  intros X1 X2 X3. intro H. elim (rem_4274 X1 X2 X3 H).
  intros X1 X2 X3. intro H. elim (rem_4271 X1 X2 X3 H).
   intro H. elim (rem_4278  H).
   intro H. elim (rem_4269  H).
Qed.

Remark rem_4291 : forall X1 X2 X3:term, auto___def_119 X1 -> auto___def_120 X2 -> auto___type_17 X3 -> auto_knows_current X2 -> False. (* Subsumed by epsilon clause. *)
Proof.
  intros X1 X2 X3. intros.
  assert (HH:=(rem_4290 X2)). tauto.
Qed.

Remark rem_4292 : forall X1 X2 X3:term, auto___type_17 X2 -> auto___def_119 X3 -> auto___def_120 X1 -> auto_knows_current X1 -> False. (* Prove equivalent, normalized clause. *)
Proof.
   intros X2 X3 X1.
  cut (auto___def_119 X1 -> auto___def_120 X2 -> auto___type_17 X3 -> auto_knows_current X2 -> False). tauto. exact (rem_4291 X1 X2 X3).
Qed.

Remark rem_4293 : forall X1 X2 X3:term, auto_knows_current X1 -> auto_server_keys_current X2 X3 X1 -> False. (* Eliminate negative atom. *)
Proof.
  intros X1 X2 X3. intros H1. intro H. intros.
  elim (rem_3440 X2 X3 X1 H);  intros.
  apply (rem_4292 X1 X2 X3);  tauto.
Qed.

Remark rem_4294 : forall X1 X2 X3:term, auto_knows_current X1 -> auto_server_keys_current X2 X3 X1 -> auto___query__intruder_knows_server_CK. (* Split. *)
Proof.
  intros X1 X2 X3.
  cut (auto_knows_current X1 -> auto_server_keys_current X2 X3 X1 -> False). tauto.
  exact (rem_4293 X1 X2 X3).
Qed.

Remark rem_4295 : forall _big_cK _big_iK _big_s:term, auto_knows_current _big_cK -> auto_server_keys_current _big_s _big_iK _big_cK -> auto___query__intruder_knows_server_CK. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X3 X2.
  cut (auto_knows_current X1 -> auto_server_keys_current X2 X3 X1 -> auto___query__intruder_knows_server_CK). tauto. exact (rem_4294 X1 X2 X3).
Qed.

Remark rem_4296 : auto_knows_old nil. (* Deduce positive atom. *)
Proof.
   case rem_2552. intros. apply trans_knows_old_nil_1;  tauto.
 tauto.
Qed.

Remark rem_4297 : forall X1:term, auto_knows_old (s X1) -> auto_knows_old X1. (* Eliminate negative atom. *)
Proof.
  intros X1. intro H. intros.
  elim (rem_33 X1 H);  intros.
  apply (rem_3 X1);  tauto.
Qed.

Remark rem_4298 : forall _big_m:term, auto_knows_old (s _big_m) -> auto_knows_old _big_m. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_old (s X1) -> auto_knows_old X1). tauto. exact (rem_4297 X1).
Qed.

Remark rem_4299 : forall X1 X2:term, auto_knows_old (cons X1 X2) -> auto_knows_old X1. (* Eliminate negative atom. *)
Proof.
  intros X1 X2. intro H. intros.
  elim (rem_1862 X1 X2 H);  intros.
  apply (rem_3373 X1 X2);  tauto.
Qed.

Remark rem_4300 : forall _big_m1 _big_m2:term, auto_knows_old (cons _big_m1 _big_m2) -> auto_knows_old _big_m1. (* Prove equivalent, normalized clause. *)
Proof.
   intros X1 X2.
  cut (auto_knows_old (cons X1 X2) -> auto_knows_old X1). tauto. exact (rem_4299 X1 X2).
Qed.

Remark rem_4301 : forall X1:term, auto_knows_old X1 -> auto_knows_old (h X1). (* Deduce positive atom. *)
Proof.
  intros X1. intros A1.
  case (rem_2251 X1 A1). clear  A1. intros. apply trans_knows_old_h_3;  tauto.
 clear  A1. tauto.
Qed.

Remark rem_4302 : forall _big_m:term, auto_knows_old _big_m -> auto_knows_old (h _big_m). (* Prove equivalent, normalized clause. *)
Proof.
   intros X1.
  cut (auto_knows_old X1 -> auto_knows_old (h X1)). tauto. exact (rem_4301 X1).
Qed.

(* [trnp] Proofs of translated source clauses. *)


Lemma lem_alice_agent : auto_agent alice.
Proof.
  
  exact rem_3762.
Qed.

Lemma lem_bob_agent : auto_agent bob.
Proof.
  
  exact rem_3760.
Qed.

Lemma lem_server_agent : auto_agent server.
Proof.
  
  exact rem_3763.
Qed.

Lemma lem_intruder_agent : auto_agent i.
Proof.
  
  exact rem_3761.
Qed.

Lemma lem_intruder_knows_nil_old : auto_knows_old nil.
Proof.
  
  exact rem_4296.
Qed.

Lemma lem_intruder_can_take_first_components_old : forall _big_m1 _big_m2:term, auto_knows_old (cons _big_m1 _big_m2) -> auto_knows_old _big_m1.
Proof.
   intros _big_m1 _big_m2. intros H1.
  exact (rem_4300 _big_m1 _big_m2
          H1).
Qed.

Lemma lem_intruder_can_take_second_components_old : forall _big_m1 _big_m2:term, auto_knows_old (cons _big_m1 _big_m2) -> auto_knows_old _big_m2.
Proof.
   intros _big_m1 _big_m2. intros H1.
  exact (rem_3376 _big_m1 _big_m2
          H1).
Qed.

Lemma lem_intruder_can_build_pairs_old : forall _big_m1 _big_m2:term, auto_knows_old _big_m1 -> auto_knows_old _big_m2 -> auto_knows_old (cons _big_m1 _big_m2).
Proof.
   intros _big_m1 _big_m2. intros H1 H2.
  exact (rem_4172 _big_m1 _big_m2
          H1
          H2).
Qed.

Lemma lem_intruder_can_encrypt_old : forall _big_k _big_m:term, auto_knows_old _big_m -> auto_knows_old _big_k -> auto_knows_old (crypt _big_m _big_k).
Proof.
   intros _big_k _big_m. intros H1 H2.
  exact (rem_1895 _big_k _big_m
          H1
          H2).
Qed.

Lemma lem_intruder_can_decrypt_if_has_private_key_old : forall _big_k _big_m:term, auto_knows_old (crypt _big_m (key pub _big_k)) -> auto_knows_old (key prv _big_k) -> auto_knows_old _big_m.
Proof.
   intros _big_k _big_m. intros H1 H2.
  exact (rem_2551 _big_k _big_m
          H1
          H2).
Qed.

Lemma lem_intruder_can_decrypt_if_has_public_key_old : forall _big_k _big_m:term, auto_knows_old (crypt _big_m (key prv _big_k)) -> auto_knows_old (key pub _big_k) -> auto_knows_old _big_m.
Proof.
   intros _big_k _big_m. intros H1 H2.
  exact (rem_1901 _big_k _big_m
          H1
          H2).
Qed.

Lemma lem_intruder_can_decrypt_if_has_symmetric_key_old : forall _big_m X:term, auto_knows_old (crypt _big_m (key sym X)) -> auto_knows_old (key sym X) -> auto_knows_old _big_m.
Proof.
   intros _big_m X. intros H1 H2.
  exact (rem_8 _big_m X
          H1
          H2).
Qed.

Lemma lem_intruder_can_compute_successors_old : forall _big_m:term, auto_knows_old _big_m -> auto_knows_old (s _big_m).
Proof.
   intros _big_m. intros H1.
  exact (rem_2253 _big_m
          H1).
Qed.

Lemma lem_intruder_can_compute_predecessors_old : forall _big_m:term, auto_knows_old (s _big_m) -> auto_knows_old _big_m.
Proof.
   intros _big_m. intros H1.
  exact (rem_4298 _big_m
          H1).
Qed.

Lemma lem_intruder_can_hash_old : forall _big_m:term, auto_knows_old _big_m -> auto_knows_old (h _big_m).
Proof.
   intros _big_m. intros H1.
  exact (rem_4302 _big_m
          H1).
Qed.

Lemma lem_message1_old : auto_knows_old request_id.
Proof.
  
  exact rem_3972.
Qed.

Lemma lem_message2_old : forall _big_p:term, auto_agent _big_p -> auto_knows_old request_id -> auto_knows_old (cons respond_id (nai _big_p)).
Proof.
   intros _big_p. intros H1 H2.
  exact (rem_3820 _big_p
          H1
          H2).
Qed.

Lemma lem_message3_old : forall _big_nAI _big_p _big_s:term, auto_agent _big_s -> auto_agent _big_p -> auto_knows_old (cons respond_id (cons _big_nAI nil)) -> auto_knows_old (cons (nonces_old _big_nAI _big_s _big_p) (cons (cons (crypt (session_old _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_old _big_nAI _big_s _big_p) (nonces_old _big_nAI _big_s _big_p)) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (nonces_old _big_nAI _big_s _big_p) (cons (cons (crypt (session_old _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_old _big_nAI _big_s _big_p) (nonces_old _big_nAI _big_s _big_p)) nil)) nil)))) nil))).
Proof.
   intros _big_nAI _big_p _big_s. intros H1 H2 H3.
  exact (rem_4168 _big_nAI _big_p _big_s
          H1
          H2
          H3).
Qed.

Lemma lem_message4_old : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil))) nil)).
Proof.
   intros _big_nAI _big_ns _big_p _big_s _big_sqn. intros H1 H2.
  exact (rem_2242 _big_nAI _big_ns _big_p _big_s _big_sqn
          H1
          H2).
Qed.

Lemma lem_message5_old : forall _big_nAI _big_p _big_s:term, auto_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_old (cons respond_id (cons _big_nAI nil)) -> auto_knows_old success.
Proof.
   intros _big_nAI _big_p _big_s. intros H1 H2.
  exact (rem_3823 _big_nAI _big_p _big_s
          H1
          H2).
Qed.

Lemma lem_define_server_keys_old : forall _big_nAI _big_p _big_s:term, auto_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_old (cons respond_id (cons _big_nAI nil)) -> auto_server_keys_old _big_s (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)).
Proof.
   intros _big_nAI _big_p _big_s. intros H1 H2.
  exact (rem_4259 _big_nAI _big_p _big_s
          H1
          H2).
Qed.

Lemma lem_define_peer_keys_old : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_old success -> auto_knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_old request_id -> auto_peer_keys_old _big_p (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns).
Proof.
   intros _big_nAI _big_ns _big_p _big_s _big_sqn. intros H1 H2 H3.
  exact (rem_3372 _big_nAI _big_ns _big_p _big_s _big_sqn
          H1
          H2
          H3).
Qed.

Lemma lem_intruder_remembers : forall _big_m:term, auto_knows_old _big_m -> auto_knows_current _big_m.
Proof.
   intros _big_m. intros H1.
  exact (rem_1889 _big_m
          H1).
Qed.

Lemma lem_intruder_knows_previous_server_IK : forall _big_cK _big_iK _big_s:term, auto_server_keys_old _big_s _big_iK _big_cK -> auto_knows_current _big_iK.
Proof.
   intros _big_cK _big_iK _big_s. intros H1.
  exact (rem_2601 _big_cK _big_iK _big_s
          H1).
Qed.

Lemma lem_intruder_knows_previous_server_CK : forall _big_cK _big_iK _big_s:term, auto_server_keys_old _big_s _big_iK _big_cK -> auto_knows_current _big_cK.
Proof.
   intros _big_cK _big_iK _big_s. intros H1.
  exact (rem_3295 _big_cK _big_iK _big_s
          H1).
Qed.

Lemma lem_intruder_knows_previous_peer_IK : forall _big_cK _big_iK _big_p:term, auto_peer_keys_old _big_p _big_iK _big_cK -> auto_knows_current _big_iK.
Proof.
   intros _big_cK _big_iK _big_p. intros H1.
  exact (rem_3801 _big_cK _big_iK _big_p
          H1).
Qed.

Lemma lem_intruder_knows_previous_peer_CK : forall _big_cK _big_iK _big_p:term, auto_peer_keys_old _big_p _big_iK _big_cK -> auto_knows_current _big_cK.
Proof.
   intros _big_cK _big_iK _big_p. intros H1.
  exact (rem_3758 _big_cK _big_iK _big_p
          H1).
Qed.

Lemma lem_intruder_knows_nil_current : auto_knows_current nil.
Proof.
  
  exact rem_3759.
Qed.

Lemma lem_intruder_can_take_first_components_current : forall _big_m1 _big_m2:term, auto_knows_current (cons _big_m1 _big_m2) -> auto_knows_current _big_m1.
Proof.
   intros _big_m1 _big_m2. intros H1.
  exact (rem_3298 _big_m1 _big_m2
          H1).
Qed.

Lemma lem_intruder_can_take_second_components_current : forall _big_m1 _big_m2:term, auto_knows_current (cons _big_m1 _big_m2) -> auto_knows_current _big_m2.
Proof.
   intros _big_m1 _big_m2. intros H1.
  exact (rem_3966 _big_m1 _big_m2
          H1).
Qed.

Lemma lem_intruder_can_build_pairs_current : forall _big_m1 _big_m2:term, auto_knows_current _big_m1 -> auto_knows_current _big_m2 -> auto_knows_current (cons _big_m1 _big_m2).
Proof.
   intros _big_m1 _big_m2. intros H1 H2.
  exact (rem_3809 _big_m1 _big_m2
          H1
          H2).
Qed.

Lemma lem_intruder_can_encrypt_current : forall _big_k _big_m:term, auto_knows_current _big_m -> auto_knows_current _big_k -> auto_knows_current (crypt _big_m _big_k).
Proof.
   intros _big_k _big_m. intros H1 H2.
  exact (rem_3971 _big_k _big_m
          H1
          H2).
Qed.

Lemma lem_intruder_can_decrypt_if_has_private_key_current : forall _big_k _big_m:term, auto_knows_current (crypt _big_m (key pub _big_k)) -> auto_knows_current (key prv _big_k) -> auto_knows_current _big_m.
Proof.
   intros _big_k _big_m. intros H1 H2.
  exact (rem_2610 _big_k _big_m
          H1
          H2).
Qed.

Lemma lem_intruder_can_decrypt_if_has_public_key_current : forall _big_k _big_m:term, auto_knows_current (crypt _big_m (key prv _big_k)) -> auto_knows_current (key pub _big_k) -> auto_knows_current _big_m.
Proof.
   intros _big_k _big_m. intros H1 H2.
  exact (rem_24 _big_k _big_m
          H1
          H2).
Qed.

Lemma lem_intruder_can_decrypt_if_has_symmetric_key_current : forall _big_m X:term, auto_knows_current (crypt _big_m (key sym X)) -> auto_knows_current (key sym X) -> auto_knows_current _big_m.
Proof.
   intros _big_m X. intros H1 H2.
  exact (rem_2250 _big_m X
          H1
          H2).
Qed.

Lemma lem_intruder_can_compute_successors_current : forall _big_m:term, auto_knows_current _big_m -> auto_knows_current (s _big_m).
Proof.
   intros _big_m. intros H1.
  exact (rem_12 _big_m
          H1).
Qed.

Lemma lem_intruder_can_compute_predecessors_current : forall _big_m:term, auto_knows_current (s _big_m) -> auto_knows_current _big_m.
Proof.
   intros _big_m. intros H1.
  exact (rem_29 _big_m
          H1).
Qed.

Lemma lem_intruder_can_hash_current : forall _big_m:term, auto_knows_current _big_m -> auto_knows_current (h _big_m).
Proof.
   intros _big_m. intros H1.
  exact (rem_26 _big_m
          H1).
Qed.

Lemma lem_message1_current : auto_knows_current request_id.
Proof.
  
  exact rem_2553.
Qed.

Lemma lem_message2_current : forall _big_p:term, auto_agent _big_p -> auto_knows_current request_id -> auto_knows_current (cons respond_id (nai _big_p)).
Proof.
   intros _big_p. intros H1 H2.
  exact (rem_2562 _big_p
          H1
          H2).
Qed.

Lemma lem_message3_current : forall _big_nAI _big_p _big_s:term, auto_agent _big_s -> auto_agent _big_p -> auto_knows_current (cons respond_id (cons _big_nAI nil)) -> auto_knows_current (cons (nonces_current _big_nAI _big_s _big_p) (cons (cons (crypt (session_current _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_current _big_nAI _big_s _big_p) (nonces_current _big_nAI _big_s _big_p)) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (nonces_current _big_nAI _big_s _big_p) (cons (cons (crypt (session_current _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_current _big_nAI _big_s _big_p) (nonces_current _big_nAI _big_s _big_p)) nil)) nil)))) nil))).
Proof.
   intros _big_nAI _big_p _big_s. intros H1 H2 H3.
  exact (rem_2545 _big_nAI _big_p _big_s
          H1
          H2
          H3).
Qed.

Lemma lem_message4_current : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil))) nil)).
Proof.
   intros _big_nAI _big_ns _big_p _big_s _big_sqn. intros H1 H2.
  exact (rem_3257 _big_nAI _big_ns _big_p _big_s _big_sqn
          H1
          H2).
Qed.

Lemma lem_message5_current : forall _big_nAI _big_p _big_s:term, auto_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_current (cons respond_id (cons _big_nAI nil)) -> auto_knows_current success.
Proof.
   intros _big_nAI _big_p _big_s. intros H1 H2.
  exact (rem_3804 _big_nAI _big_p _big_s
          H1
          H2).
Qed.

Lemma lem_define_server_keys_current : forall _big_nAI _big_p _big_s:term, auto_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) -> auto_knows_current (cons respond_id (cons _big_nAI nil)) -> auto_server_keys_current _big_s (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)).
Proof.
   intros _big_nAI _big_p _big_s. intros H1 H2.
  exact (rem_3963 _big_nAI _big_p _big_s
          H1
          H2).
Qed.

Lemma lem_define_peer_keys_current : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, auto_knows_current success -> auto_knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> auto_knows_current request_id -> auto_peer_keys_current _big_p (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns).
Proof.
   intros _big_nAI _big_ns _big_p _big_s _big_sqn. intros H1 H2 H3.
  exact (rem_3812 _big_nAI _big_ns _big_p _big_s _big_sqn
          H1
          H2
          H3).
Qed.

Lemma lem_intruder_knows_server_IK : forall _big_cK _big_iK _big_s:term, auto_knows_current _big_iK -> auto_server_keys_current _big_s _big_iK _big_cK -> auto___query__intruder_knows_server_IK.
Proof.
   intros _big_cK _big_iK _big_s. intros H1 H2.
  exact (rem_3443 _big_cK _big_iK _big_s
          H1
          H2).
Qed.

Lemma lem_intruder_knows_server_CK : forall _big_cK _big_iK _big_s:term, auto_knows_current _big_cK -> auto_server_keys_current _big_s _big_iK _big_cK -> auto___query__intruder_knows_server_CK.
Proof.
   intros _big_cK _big_iK _big_s. intros H1 H2.
  exact (rem_4295 _big_cK _big_iK _big_s
          H1
          H2).
Qed.


(* [srcc] Source clauses. *)

Inductive __query__intruder_knows_server_CK : Prop :=
    intruder_knows_server_CK : forall _big_cK _big_iK _big_s:term, knows_current _big_cK -> server_keys_current _big_s _big_iK _big_cK -> __query__intruder_knows_server_CK

with __query__intruder_knows_server_IK : Prop :=
    intruder_knows_server_IK : forall _big_cK _big_iK _big_s:term, knows_current _big_iK -> server_keys_current _big_s _big_iK _big_cK -> __query__intruder_knows_server_IK

with agent : term -> Prop :=
    alice_agent : agent alice
  | bob_agent : agent bob
  | intruder_agent : agent i
  | server_agent : agent server

with knows_current : term -> Prop :=
    intruder_can_build_pairs_current : forall _big_m1 _big_m2:term, knows_current _big_m1 -> knows_current _big_m2 -> knows_current (cons _big_m1 _big_m2)
  | intruder_can_compute_predecessors_current : forall _big_m:term, knows_current (s _big_m) -> knows_current _big_m
  | intruder_can_compute_successors_current : forall _big_m:term, knows_current _big_m -> knows_current (s _big_m)
  | intruder_can_decrypt_if_has_private_key_current : forall _big_k _big_m:term, knows_current (crypt _big_m (key pub _big_k)) -> knows_current (key prv _big_k) -> knows_current _big_m
  | intruder_can_decrypt_if_has_public_key_current : forall _big_k _big_m:term, knows_current (crypt _big_m (key prv _big_k)) -> knows_current (key pub _big_k) -> knows_current _big_m
  | intruder_can_decrypt_if_has_symmetric_key_current : forall _big_m X:term, knows_current (crypt _big_m (key sym X)) -> knows_current (key sym X) -> knows_current _big_m
  | intruder_can_encrypt_current : forall _big_k _big_m:term, knows_current _big_m -> knows_current _big_k -> knows_current (crypt _big_m _big_k)
  | intruder_can_hash_current : forall _big_m:term, knows_current _big_m -> knows_current (h _big_m)
  | intruder_can_take_first_components_current : forall _big_m1 _big_m2:term, knows_current (cons _big_m1 _big_m2) -> knows_current _big_m1
  | intruder_can_take_second_components_current : forall _big_m1 _big_m2:term, knows_current (cons _big_m1 _big_m2) -> knows_current _big_m2
  | intruder_knows_nil_current : knows_current nil
  | intruder_knows_previous_peer_CK : forall _big_cK _big_iK _big_p:term, peer_keys_old _big_p _big_iK _big_cK -> knows_current _big_cK
  | intruder_knows_previous_peer_IK : forall _big_cK _big_iK _big_p:term, peer_keys_old _big_p _big_iK _big_cK -> knows_current _big_iK
  | intruder_knows_previous_server_CK : forall _big_cK _big_iK _big_s:term, server_keys_old _big_s _big_iK _big_cK -> knows_current _big_cK
  | intruder_knows_previous_server_IK : forall _big_cK _big_iK _big_s:term, server_keys_old _big_s _big_iK _big_cK -> knows_current _big_iK
  | intruder_remembers : forall _big_m:term, knows_old _big_m -> knows_current _big_m
  | message1_current : knows_current request_id
  | message2_current : forall _big_p:term, agent _big_p -> knows_current request_id -> knows_current (cons respond_id (nai _big_p))
  | message3_current : forall _big_nAI _big_p _big_s:term, agent _big_s -> agent _big_p -> knows_current (cons respond_id (cons _big_nAI nil)) -> knows_current (cons (nonces_current _big_nAI _big_s _big_p) (cons (cons (crypt (session_current _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_current _big_nAI _big_s _big_p) (nonces_current _big_nAI _big_s _big_p)) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (nonces_current _big_nAI _big_s _big_p) (cons (cons (crypt (session_current _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_current _big_nAI _big_s _big_p) (nonces_current _big_nAI _big_s _big_p)) nil)) nil)))) nil)))
  | message4_current : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> knows_current request_id -> knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil))) nil))
  | message5_current : forall _big_nAI _big_p _big_s:term, knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) -> knows_current (cons respond_id (cons _big_nAI nil)) -> knows_current success

with knows_old : term -> Prop :=
    intruder_can_build_pairs_old : forall _big_m1 _big_m2:term, knows_old _big_m1 -> knows_old _big_m2 -> knows_old (cons _big_m1 _big_m2)
  | intruder_can_compute_predecessors_old : forall _big_m:term, knows_old (s _big_m) -> knows_old _big_m
  | intruder_can_compute_successors_old : forall _big_m:term, knows_old _big_m -> knows_old (s _big_m)
  | intruder_can_decrypt_if_has_private_key_old : forall _big_k _big_m:term, knows_old (crypt _big_m (key pub _big_k)) -> knows_old (key prv _big_k) -> knows_old _big_m
  | intruder_can_decrypt_if_has_public_key_old : forall _big_k _big_m:term, knows_old (crypt _big_m (key prv _big_k)) -> knows_old (key pub _big_k) -> knows_old _big_m
  | intruder_can_decrypt_if_has_symmetric_key_old : forall _big_m X:term, knows_old (crypt _big_m (key sym X)) -> knows_old (key sym X) -> knows_old _big_m
  | intruder_can_encrypt_old : forall _big_k _big_m:term, knows_old _big_m -> knows_old _big_k -> knows_old (crypt _big_m _big_k)
  | intruder_can_hash_old : forall _big_m:term, knows_old _big_m -> knows_old (h _big_m)
  | intruder_can_take_first_components_old : forall _big_m1 _big_m2:term, knows_old (cons _big_m1 _big_m2) -> knows_old _big_m1
  | intruder_can_take_second_components_old : forall _big_m1 _big_m2:term, knows_old (cons _big_m1 _big_m2) -> knows_old _big_m2
  | intruder_knows_nil_old : knows_old nil
  | message1_old : knows_old request_id
  | message2_old : forall _big_p:term, agent _big_p -> knows_old request_id -> knows_old (cons respond_id (nai _big_p))
  | message3_old : forall _big_nAI _big_p _big_s:term, agent _big_s -> agent _big_p -> knows_old (cons respond_id (cons _big_nAI nil)) -> knows_old (cons (nonces_old _big_nAI _big_s _big_p) (cons (cons (crypt (session_old _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_old _big_nAI _big_s _big_p) (nonces_old _big_nAI _big_s _big_p)) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (nonces_old _big_nAI _big_s _big_p) (cons (cons (crypt (session_old _big_nAI _big_s _big_p) (f5 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) (session_old _big_nAI _big_s _big_p) (nonces_old _big_nAI _big_s _big_p)) nil)) nil)))) nil)))
  | message4_old : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> knows_old request_id -> knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil))) nil))
  | message5_old : forall _big_nAI _big_p _big_s:term, knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) -> knows_old (cons respond_id (cons _big_nAI nil)) -> knows_old success

with peer_keys_current : term -> term -> term -> Prop :=
    define_peer_keys_current : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, knows_current success -> knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> knows_current request_id -> peer_keys_current _big_p (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns)

with peer_keys_old : term -> term -> term -> Prop :=
    define_peer_keys_old : forall _big_nAI _big_ns _big_p _big_s _big_sqn:term, knows_old success -> knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) -> knows_old request_id -> peer_keys_old _big_p (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns)

with server_keys_current : term -> term -> term -> Prop :=
    define_server_keys_current : forall _big_nAI _big_p _big_s:term, knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) -> knows_current (cons respond_id (cons _big_nAI nil)) -> server_keys_current _big_s (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p))

with server_keys_old : term -> term -> term -> Prop :=
    define_server_keys_old : forall _big_nAI _big_p _big_s:term, knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) -> knows_old (cons respond_id (cons _big_nAI nil)) -> server_keys_old _big_s (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p))
.

(* [srct] Translation from source clauses. *)

Definition translate_auto_agent_from_agent (x1 : term) (pi : agent x1) : auto_agent x1 :=
  match pi as pi in agent x1 return auto_agent x1 with
    (alice_agent) => 
      (lem_alice_agent)
  | (bob_agent) => 
      (lem_bob_agent)
  | (intruder_agent) => 
      (lem_intruder_agent)
  | (server_agent) => 
      (lem_server_agent)
  end
.
Fixpoint translate_auto_knows_old_from_knows_old (x1 : term) (pi : knows_old x1) {struct pi} : auto_knows_old x1 :=
  match pi as pi in knows_old x1 return auto_knows_old x1 with
    (intruder_can_build_pairs_old _big_m1 _big_m2 H1 H2) => 
      (lem_intruder_can_build_pairs_old _big_m1 _big_m2
        (translate_auto_knows_old_from_knows_old _big_m1 H1)
        (translate_auto_knows_old_from_knows_old _big_m2 H2))
  | (intruder_can_compute_predecessors_old _big_m H1) => 
      (lem_intruder_can_compute_predecessors_old _big_m
        (translate_auto_knows_old_from_knows_old (s _big_m) H1))
  | (intruder_can_compute_successors_old _big_m H1) => 
      (lem_intruder_can_compute_successors_old _big_m
        (translate_auto_knows_old_from_knows_old _big_m H1))
  | (intruder_can_decrypt_if_has_private_key_old _big_k _big_m H1 H2) => 
      (lem_intruder_can_decrypt_if_has_private_key_old _big_k _big_m
        (translate_auto_knows_old_from_knows_old (crypt _big_m (key pub _big_k)) H1)
        (translate_auto_knows_old_from_knows_old (key prv _big_k) H2))
  | (intruder_can_decrypt_if_has_public_key_old _big_k _big_m H1 H2) => 
      (lem_intruder_can_decrypt_if_has_public_key_old _big_k _big_m
        (translate_auto_knows_old_from_knows_old (crypt _big_m (key prv _big_k)) H1)
        (translate_auto_knows_old_from_knows_old (key pub _big_k) H2))
  | (intruder_can_decrypt_if_has_symmetric_key_old _big_m X H1 H2) => 
      (lem_intruder_can_decrypt_if_has_symmetric_key_old _big_m X
        (translate_auto_knows_old_from_knows_old (crypt _big_m (key sym X)) H1)
        (translate_auto_knows_old_from_knows_old (key sym X) H2))
  | (intruder_can_encrypt_old _big_k _big_m H1 H2) => 
      (lem_intruder_can_encrypt_old _big_k _big_m
        (translate_auto_knows_old_from_knows_old _big_m H1)
        (translate_auto_knows_old_from_knows_old _big_k H2))
  | (intruder_can_hash_old _big_m H1) => 
      (lem_intruder_can_hash_old _big_m
        (translate_auto_knows_old_from_knows_old _big_m H1))
  | (intruder_can_take_first_components_old _big_m1 _big_m2 H1) => 
      (lem_intruder_can_take_first_components_old _big_m1 _big_m2
        (translate_auto_knows_old_from_knows_old (cons _big_m1 _big_m2) H1))
  | (intruder_can_take_second_components_old _big_m1 _big_m2 H1) => 
      (lem_intruder_can_take_second_components_old _big_m1 _big_m2
        (translate_auto_knows_old_from_knows_old (cons _big_m1 _big_m2) H1))
  | (intruder_knows_nil_old) => 
      (lem_intruder_knows_nil_old)
  | (message1_old) => 
      (lem_message1_old)
  | (message2_old _big_p H1 H2) => 
      (lem_message2_old _big_p
        (translate_auto_agent_from_agent _big_p H1)
        (translate_auto_knows_old_from_knows_old request_id H2))
  | (message3_old _big_nAI _big_p _big_s H1 H2 H3) => 
      (lem_message3_old _big_nAI _big_p _big_s
        (translate_auto_agent_from_agent _big_s H1)
        (translate_auto_agent_from_agent _big_p H2)
        (translate_auto_knows_old_from_knows_old (cons respond_id (cons _big_nAI nil)) H3))
  | (message4_old _big_nAI _big_ns _big_p _big_s _big_sqn H1 H2) => 
      (lem_message4_old _big_nAI _big_ns _big_p _big_s _big_sqn
        (translate_auto_knows_old_from_knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) H1)
        (translate_auto_knows_old_from_knows_old request_id H2))
  | (message5_old _big_nAI _big_p _big_s H1 H2) => 
      (lem_message5_old _big_nAI _big_p _big_s
        (translate_auto_knows_old_from_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) H1)
        (translate_auto_knows_old_from_knows_old (cons respond_id (cons _big_nAI nil)) H2))
  end
.
Definition translate_auto_peer_keys_old_from_peer_keys_old (x1 : term) (x2 : term) (x3 : term) (pi : peer_keys_old x1 x2 x3) : auto_peer_keys_old x1 x2 x3 :=
  match pi as pi in peer_keys_old x1 x2 x3 return auto_peer_keys_old x1 x2 x3 with
    (define_peer_keys_old _big_nAI _big_ns _big_p _big_s _big_sqn H1 H2 H3) => 
      (lem_define_peer_keys_old _big_nAI _big_ns _big_p _big_s _big_sqn
        (translate_auto_knows_old_from_knows_old success H1)
        (translate_auto_knows_old_from_knows_old (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) H2)
        (translate_auto_knows_old_from_knows_old request_id H3))
  end
.
Definition translate_auto_server_keys_old_from_server_keys_old (x1 : term) (x2 : term) (x3 : term) (pi : server_keys_old x1 x2 x3) : auto_server_keys_old x1 x2 x3 :=
  match pi as pi in server_keys_old x1 x2 x3 return auto_server_keys_old x1 x2 x3 with
    (define_server_keys_old _big_nAI _big_p _big_s H1 H2) => 
      (lem_define_server_keys_old _big_nAI _big_p _big_s
        (translate_auto_knows_old_from_knows_old (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_old _big_nAI _big_s _big_p)) nil))) nil)) H1)
        (translate_auto_knows_old_from_knows_old (cons respond_id (cons _big_nAI nil)) H2))
  end
.
Fixpoint translate_auto_knows_current_from_knows_current (x1 : term) (pi : knows_current x1) {struct pi} : auto_knows_current x1 :=
  match pi as pi in knows_current x1 return auto_knows_current x1 with
    (intruder_can_build_pairs_current _big_m1 _big_m2 H1 H2) => 
      (lem_intruder_can_build_pairs_current _big_m1 _big_m2
        (translate_auto_knows_current_from_knows_current _big_m1 H1)
        (translate_auto_knows_current_from_knows_current _big_m2 H2))
  | (intruder_can_compute_predecessors_current _big_m H1) => 
      (lem_intruder_can_compute_predecessors_current _big_m
        (translate_auto_knows_current_from_knows_current (s _big_m) H1))
  | (intruder_can_compute_successors_current _big_m H1) => 
      (lem_intruder_can_compute_successors_current _big_m
        (translate_auto_knows_current_from_knows_current _big_m H1))
  | (intruder_can_decrypt_if_has_private_key_current _big_k _big_m H1 H2) => 
      (lem_intruder_can_decrypt_if_has_private_key_current _big_k _big_m
        (translate_auto_knows_current_from_knows_current (crypt _big_m (key pub _big_k)) H1)
        (translate_auto_knows_current_from_knows_current (key prv _big_k) H2))
  | (intruder_can_decrypt_if_has_public_key_current _big_k _big_m H1 H2) => 
      (lem_intruder_can_decrypt_if_has_public_key_current _big_k _big_m
        (translate_auto_knows_current_from_knows_current (crypt _big_m (key prv _big_k)) H1)
        (translate_auto_knows_current_from_knows_current (key pub _big_k) H2))
  | (intruder_can_decrypt_if_has_symmetric_key_current _big_m X H1 H2) => 
      (lem_intruder_can_decrypt_if_has_symmetric_key_current _big_m X
        (translate_auto_knows_current_from_knows_current (crypt _big_m (key sym X)) H1)
        (translate_auto_knows_current_from_knows_current (key sym X) H2))
  | (intruder_can_encrypt_current _big_k _big_m H1 H2) => 
      (lem_intruder_can_encrypt_current _big_k _big_m
        (translate_auto_knows_current_from_knows_current _big_m H1)
        (translate_auto_knows_current_from_knows_current _big_k H2))
  | (intruder_can_hash_current _big_m H1) => 
      (lem_intruder_can_hash_current _big_m
        (translate_auto_knows_current_from_knows_current _big_m H1))
  | (intruder_can_take_first_components_current _big_m1 _big_m2 H1) => 
      (lem_intruder_can_take_first_components_current _big_m1 _big_m2
        (translate_auto_knows_current_from_knows_current (cons _big_m1 _big_m2) H1))
  | (intruder_can_take_second_components_current _big_m1 _big_m2 H1) => 
      (lem_intruder_can_take_second_components_current _big_m1 _big_m2
        (translate_auto_knows_current_from_knows_current (cons _big_m1 _big_m2) H1))
  | (intruder_knows_nil_current) => 
      (lem_intruder_knows_nil_current)
  | (intruder_knows_previous_peer_CK _big_cK _big_iK _big_p H1) => 
      (lem_intruder_knows_previous_peer_CK _big_cK _big_iK _big_p
        (translate_auto_peer_keys_old_from_peer_keys_old _big_p _big_iK _big_cK H1))
  | (intruder_knows_previous_peer_IK _big_cK _big_iK _big_p H1) => 
      (lem_intruder_knows_previous_peer_IK _big_cK _big_iK _big_p
        (translate_auto_peer_keys_old_from_peer_keys_old _big_p _big_iK _big_cK H1))
  | (intruder_knows_previous_server_CK _big_cK _big_iK _big_s H1) => 
      (lem_intruder_knows_previous_server_CK _big_cK _big_iK _big_s
        (translate_auto_server_keys_old_from_server_keys_old _big_s _big_iK _big_cK H1))
  | (intruder_knows_previous_server_IK _big_cK _big_iK _big_s H1) => 
      (lem_intruder_knows_previous_server_IK _big_cK _big_iK _big_s
        (translate_auto_server_keys_old_from_server_keys_old _big_s _big_iK _big_cK H1))
  | (intruder_remembers _big_m H1) => 
      (lem_intruder_remembers _big_m
        (translate_auto_knows_old_from_knows_old _big_m H1))
  | (message1_current) => 
      (lem_message1_current)
  | (message2_current _big_p H1 H2) => 
      (lem_message2_current _big_p
        (translate_auto_agent_from_agent _big_p H1)
        (translate_auto_knows_current_from_knows_current request_id H2))
  | (message3_current _big_nAI _big_p _big_s H1 H2 H3) => 
      (lem_message3_current _big_nAI _big_p _big_s
        (translate_auto_agent_from_agent _big_s H1)
        (translate_auto_agent_from_agent _big_p H2)
        (translate_auto_knows_current_from_knows_current (cons respond_id (cons _big_nAI nil)) H3))
  | (message4_current _big_nAI _big_ns _big_p _big_s _big_sqn H1 H2) => 
      (lem_message4_current _big_nAI _big_ns _big_p _big_s _big_sqn
        (translate_auto_knows_current_from_knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) H1)
        (translate_auto_knows_current_from_knows_current request_id H2))
  | (message5_current _big_nAI _big_p _big_s H1 H2) => 
      (lem_message5_current _big_nAI _big_p _big_s
        (translate_auto_knows_current_from_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) H1)
        (translate_auto_knows_current_from_knows_current (cons respond_id (cons _big_nAI nil)) H2))
  end
.
Definition translate_auto_server_keys_current_from_server_keys_current (x1 : term) (x2 : term) (x3 : term) (pi : server_keys_current x1 x2 x3) : auto_server_keys_current x1 x2 x3 :=
  match pi as pi in server_keys_current x1 x2 x3 return auto_server_keys_current x1 x2 x3 with
    (define_server_keys_current _big_nAI _big_p _big_s H1 H2) => 
      (lem_define_server_keys_current _big_nAI _big_p _big_s
        (translate_auto_knows_current_from_knows_current (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil)))) (cons (f2 (key sym (cons _big_s (cons _big_p nil))) (nonces_current _big_nAI _big_s _big_p)) nil))) nil)) H1)
        (translate_auto_knows_current_from_knows_current (cons respond_id (cons _big_nAI nil)) H2))
  end
.
Definition translate_auto_peer_keys_current_from_peer_keys_current (x1 : term) (x2 : term) (x3 : term) (pi : peer_keys_current x1 x2 x3) : auto_peer_keys_current x1 x2 x3 :=
  match pi as pi in peer_keys_current x1 x2 x3 return auto_peer_keys_current x1 x2 x3 with
    (define_peer_keys_current _big_nAI _big_ns _big_p _big_s _big_sqn H1 H2 H3) => 
      (lem_define_peer_keys_current _big_nAI _big_ns _big_p _big_s _big_sqn
        (translate_auto_knows_current_from_knows_current success H1)
        (translate_auto_knows_current_from_knows_current (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) (cons (h (cons (h (cons _big_nAI (cons (f4 (key sym (cons _big_s (cons _big_p nil))) _big_ns) (cons (f3 (key sym (cons _big_s (cons _big_p nil))) _big_ns) nil)))) (cons _big_ns (cons (cons (crypt _big_sqn (f5 (key sym (cons _big_s (cons _big_p nil))) _big_ns)) (cons (f1 (key sym (cons _big_s (cons _big_p nil))) _big_sqn _big_ns) nil)) nil)))) nil))) H2)
        (translate_auto_knows_current_from_knows_current request_id H3))
  end
.
Definition translate_auto___query__intruder_knows_server_CK_from___query__intruder_knows_server_CK (pi : __query__intruder_knows_server_CK) : auto___query__intruder_knows_server_CK :=
  match pi  with
    (intruder_knows_server_CK _big_cK _big_iK _big_s H1 H2) => 
      (lem_intruder_knows_server_CK _big_cK _big_iK _big_s
        (translate_auto_knows_current_from_knows_current _big_cK H1)
        (translate_auto_server_keys_current_from_server_keys_current _big_s _big_iK _big_cK H2))
  end
.
Definition translate_auto___query__intruder_knows_server_IK_from___query__intruder_knows_server_IK (pi : __query__intruder_knows_server_IK) : auto___query__intruder_knows_server_IK :=
  match pi  with
    (intruder_knows_server_IK _big_cK _big_iK _big_s H1 H2) => 
      (lem_intruder_knows_server_IK _big_cK _big_iK _big_s
        (translate_auto_knows_current_from_knows_current _big_iK H1)
        (translate_auto_server_keys_current_from_server_keys_current _big_s _big_iK _big_cK H2))
  end
.


(* [conp] Consistency proofs. *)

Theorem thm_intruder_knows_server_CK : ~__query__intruder_knows_server_CK.
Proof.
  unfold not. intro H.
  elim (translate_auto___query__intruder_knows_server_CK_from___query__intruder_knows_server_CK H).
Qed.

Theorem thm_intruder_knows_server_IK : ~__query__intruder_knows_server_IK.
Proof.
  unfold not. intro H.
  elim (translate_auto___query__intruder_knows_server_IK_from___query__intruder_knows_server_IK H).
Qed.

